CS 지식/컴퓨터구조 [컴퓨터 구조] 4. MIPS instruction set(명령어 세트) 2023.01.11 - 반응형 Introduction Jumping up a few levels of abstraction 추상화(abstraction)의 몇가지 단계에 대해서 알아볼 것이다. Architecture(아키텍쳐): 컴퓨터를 바라보는 프로그래머(혹은 software)의 관점 instruction과 연산 위치에 의해 결정됨 Microarchitecture(마이크로아키텍쳐): hardware에서 아키텍쳐를 구현하는 방식 Assembly Language 기계가 알아먹는 기본적인 명령어(0, 1로 이루어진) 하나하나를 1:1로 symbolic하게 표현하는 언어 Instruction: commands in a computer's language Instruction이란 컴퓨터의 언어에서 사용되는 명령어이다. Assembly language: 인간이 읽을 수 있는 명령어의 포맷 Machiune language: 컴퓨터가 읽을 수 있는 포맷(1 또는 0) Review) 지난 주 강의 참조 [컴퓨터 구조] 1-3. Performance와 CPU Time Review) performance(speed):clock frequency area(cost): 이는 design에서 줄이는 part가 있고 공정(fab)에서 줄이는 part가 있는데 데이터가 많이 들어간다고 해서 문제가 되지 않는다. 더 중요한 문제는 fab, 즉 어떤 cdragon.tistory.com int a, b, c main ... a = b + c load Mem(b) -> $2 load Mem(c) -> $3 add $2, $3 -> $4 store Mem(a) <- $4 기본적으로 필요한 IS(Instruction Set) add lode store 하지만 b라는 데이터에 3이라는 숫자를 더하려면 어떤 명령어를 써야할까? addi sr1, cont, dr #source register1, constant, destination register1 이와 같이 얼마나 많은 Instruction을 사용할 수 있는가가 processor의 spec을 결정하는데, MIPS에는 instruction set이 약 4~50개가 있다. 그런데 이 중에서 핵심적인 기능만 수행할 수 있는 것을 어떻게 만들까? MIPS Instruction Set (링크 참조) instruction set의 종류(기본,핵심,필수가 되는 세 가지 기능) Arithmetic/Logic comp. (add, addi, andu, sub, subi, and, andi, or, ori, ...) data move(memory-to-reg, reg-to-memory, lw, sw,...) flow control (conditional branch(if), jump, call/return) add rd, rs, rt # rs + rt -> rd addi rd, rs, Const # rd:register destination, rs:register source, Const:constanct number lw, rd, Mem_adr sw, rs, Mem_adr#register 내용을 memory로 옮겨라 beq, $1, $2, Label # if $1 == $2, Label로 jump (branch equal) bne, $1, $2, Label # if $1 != $2, Label로 jump J Label #just jump to Label Jal Function # jump and link; function으로 갔다가 다시 돌아와라(call) 위와 같은 명령어들은 모두 32-bit로 구성되어 있음. R타입 제일 쉬운 add인 경우 맨 앞에 op code정보(add)가 6bit를 차지하고 뒤에 잇따라 오는 세 개의 register의 정보는 5bit씩 표현된다. 그러면 남는 11bit는? -> 거의 사용되지 않는다. I타입 load, store의 경우 맨 앞에 op code(load or store) - 6bit register 정보 - 5bit 남는 bit는 모두 memory address로 사용될 수 있음 beq, bne의 경우 맨 앞 op code - 6bit register 두 개 5bit씩 - 10 bit 나머지는 Label 정보 J 타입 J(ump), Jal의 경우 맨 앞 op code - 6bit 나머지 Label or Function 정보 메모리 위치를 지정하는 방법 Direct addressing mem.adr가 0x10010 이라고 가정했을 때 memory address가 몇 번지인지 딱 지정한 방법 선언한 변수가 중간에 수정이나 삭제가 되면 위 주소가 바뀌어 버린다. 혹은 다른 메모리가 0x10008 번지로 지정되면 위 memory 주소는 전부 옮겨야 하기 때문에 매우 번거로워 이 방식은 잘 사용하지 않는다. Indirect addressing(base addressing) 메모리의 위치(0x10010)를 찾아갈 때 바로 찾아가는 것이 아니라 메모리가 현재 점유하고 있는 범위의 시작 주소를 가리키는 포인터(base register)가 존재하여 그 포인터에 해당 주소로부터 몇 번째 떨어진 곳에 있는 지를 알 수 있는 number가 들어있다. lw $5, 10($4) # 10:offset, $4:base register 4번 레지스터 위치에서 10만큼 떨어진 곳 반응형 공유하기 URL 복사카카오톡 공유페이스북 공유엑스 공유 게시글 관리 구독하기개발자로 살아남기 Contents Introduction AssemblyLanguage Review)지난주강의참조 메모리위치를지정하는방법 당신이 좋아할만한 콘텐츠 [컴퓨터구조] 6. R-Type, J-Type, I-Type 2023.10.10 [컴퓨터구조] 5. Register(레지스터)와 Memory(메모리) 2023.01.11 [컴퓨터 구조] 3. Performance와 CPU Time 2023.01.11 [컴퓨터 구조] 2. CPU와 메모리 2023.01.11 댓글 0 + 이전 댓글 더보기