MIPS Instruction Field
MIPS 명령어 구성 형식
- MIPS의 명령어들은 모두 1Word(32bit)로 구성되어 있다.
- 명령어의 피연산자가 모두 레지스터이면 대부분의 명령어는 R-Format으로 표현된다.
- 명령어의 피연산자 중 immediateConstant가 있다면, 명령어는 I-Format으로 표현된다.
R-Format (Registser Format)
op : 연산의 종류를 나타내기 위한 필드로, 연산 종류를 funct보다 큰 범주로 구분한다. (산술 연산, 논리 연산 등)
rs : 첫 번째 Source의 값을 저장하는 필드이다.
rt : 두 번째 Source의 값을 저장하는 필드이다. ("t"인 이유는 s의 다음 알파벳이기 때문이다.)
rd : Destination의 값을 저장하는 필드이다.
shamt : Shift Amount의 약자로, 산술 연산 이외의 연산을 위해 예약된 필드이다.
funct : 연산의 종류를 나타내기 위한 필드로, op보다 작은 범주로 구분한다. (덧셈 연산, 논리곱 연산 등)
I-Format (Immediate Constant Format)
op : 연산의 종류를 나타내기 위한 필드이다.
rs : Source 혹은 Destination 역할을 수행하는 필드이다.
rt : Source 혹은 Destination 역할을 수행하는 필드이다. (보통 rt가 목적지 역할을 수행한다.)
constant or address : 특정 상수 혹은 주솟값이 위치하는 필드이다. (2의 보수 형태로 저장된다.)
(16비트로 배정받은 관계로, 상수의 범위는 \(-2^{15} ~ 2^{15}-1\) 이다.)
- I-Format은 MIPS의 설계 철학 중 "Good design demands good compromises." 원칙에 부합한다.
(명령어 형식의 종류가 늘어났지만, 그에 따른 복잡성를 상쇄할 만큼의 효율성이 제고되었다.)
- 기존의 R-Format과 구조를 비슷하게 유지하기 위해, rd, sa, funct필드를 상수 필드로 대체했다.
- R-Format에서는 rs, rt가 Source 역할을 수행했지만, I-Format에서는 목적지 역할을 수행하게 될 수도 있다.
- I-Format에서는 Sign-Extend가 Default로 지정되어 있기 때문에, immediateConstant에 저장되는 값들은 자동으로 Sign-Extend가 진행된다.
J-Format (Jump Instruction Format)
op : 연산의 종류를 나타내기 위한 필드이다. (무조건 분기 연산)
jump target : 현재 수행중인 명령어와 분기하고자 하는 명령어의 상대적인 위치 차이를 Word 단위로 나타낸 값을 저장하는 필드이다.
- 26Bit의 jump target 필드는 연산에 용이한 32비트 형태로 변환되기 위해 하위 Bit에는 00을 채워넣고(Twice Left Shift, *2 효과), 최상의 4Bit에는 PC+4(다음 수행될 명령어 주소)의 최상위 4비트 값으로 채워지게 된다.
- 목적지 주솟값 : (PC+4)[31:28] , jump target , 2'b00
- 26Bit의 jump target 필드는 I-Format의 16Bit 주소필드 보다 큰 값을 저장할 수 있어, 더욱 먼 거리에 위치한 레이블로의 분기도 가능하다.
이미지 출처: Computer Organization And Design 5th Edition (David A. Patterson)