본문 바로가기

Computer Science/Computer Architecture

[Computer Architecture] picoMIPS 명령어 집합 구조

+ 한국항공대학교 길현영 교수님의 컴퓨터구조론 과목 내용을 정리한 글입니다.
 

picoMIPS

MIPS Technologies에서 만든 명령어 집합이다. (교육용)
 
RISC 기반 아키텍쳐로 명령어 형식이 단순하고, 고정 길이 명령어를 사용한다.
- 명령어 길이: 16bit (OpCode 4bit, Operand 12bit)
 
8개의 범용 레지스터를 사용한다.
- 3 bit로 레지스터 주소를 표현한다.

- 레지스터 데이터는 16bit로 구성되어있다.
 
3가지 명령어 형식만 존재한다.
- 기본적으로 3-주소 명령어 형식을 사용한다.
 

명령어 형식 opcode fn 의미
and $rd $rs $rt R 0000 000 $rd <- $rs and $ rt
or $rd $rs $rt R 0000 001 $rd <- $rs or $ rt
add $rd $rs $rt R 0000 010 $rd <- $rs + $ rt
sub $rd $rs $rt R 0000 011 $rd <- $rs - $ rt
mul $rd $rs $rt R 0000 100 $rd <- $rs × $ rt
div $rd $rs $rt R 0000 101 $rd <- $rs ÷ $ rt
addi $rt $rs $imm I 1010   $rt <- $rs + imm
subi $rt $rs $imm I 1011   $rt <- $rs - imm
lw $rt imm($rs) I 0100   $rt <- M[$rs + imm × 2]
sw $rt imm($rs) I 0101   M[$rs + imm × 2] <- $rt
beq $rs $rt imm I 0001   if($rs - $rt == 0) then PC <- PC + 2 + imm × 2
j addr J 0011   PC <- PC + 2 + add × 2

+ ×2는 CPU의 word단위(16bit), Memory의 Byte단위(8bit) 차이로 발생
 
+ fn: function 필드 (opcode와 결합하여 사용)
=> 4Bit, 명령어를 16개 밖에 사용하지 못하는 것을 추가로 더 사용이 가능하다. (레지스터 크기가 작기 때문에 조금 남는다.)

+ $rd: register destination - 연산의 결과 값을 저장하는 레지스터
+ $rs: register source - 연산에 사용되는 첫번째 레지스터
+ $rt: register target - 연산에 사용되는 두 번째 레지스터
+ $imm: immediate (상수 값)
 

고급 프로그래밍 언어와 기계어 관계


R-형식 명령어 (Register Type)

3개의 피연산자를 필요로 하는 ALU 명령어와 같은 형식이다.
- fn 필드는 연산 부호 필드와 결합하여, 산술 연산 명령어로 사용된다.
 
rs(register source)와 rt(register target)로 연산(fn + op)하여 rd(register destination)에 저장한다.
=> Reg[rd] = op/fn(Reg[rs], Reg[rt]) 
 

R-형식 명령어 구조


I-형식 명령어 (Immediate Type)

6 bit로 구성된 imm/address 필드를 포함한다.
 
적재, 저장, 판단 명령어 등과 산술 연산 일부를 포함한다.
 
rs(register source)와 imm(상수 or 주소) 값을 갖고 op를 수행한 결과를 rt(register target)에 저장한다.
Reg[rt] = op(Reg[rs], imm)
 

I-형식 명령어 구조


J-형식 명령어 (Jump Type)

Jump와 같은 하나의 긴 주소 필드를 요구하는 명령어 형식이다.
 

J-형식 명령어 구조