MIPS Addressing Modes
32bit의 주소를 instruction에 다 담을 수 없으니 고안한 방법들. 그냥 앞의 것들을 정리한 것이다.
- Immediate
- 최대 16bit의 immediate의 표현. 그 이상을 가지고 연산하려면 lui, ori 등 사용
- Register
- Register의 값을 활용. 최대 32bit까지 표현
- Base/Displacement
- 배열등의 값을 읽어올 때 사용하는 방법. Register의 값에 immediate를 더하여 새 주소를 표현
- PC-relative
- PC에 immediate를 더해서 주소를 표현
- Branch, loop으로 이동할 때 그렇게 멀리 떨어진 곳으로 가지 않는다는 가정하에 사용. Base/Displacement의 특별한 경우 정도
- 16bit immediate를 2번 left shift해서 사용. address를 byte로 보지 않고 word 단위로 본다.
- Pseudodirect
- J-type에 해당. PC에 immediate를 더해서 주소 표현
- 이 역시 address를 word단위로 본다.
- {PC[31:26], address[25:0]}로 jump한다.
Decoding the Machine Language
CPU가 어떤 연산을 수행하려면 binary number로 표현되는 data와 instruction을 이해해야한다. Decode한다고 표현한다. 그 순서는 다음과 같다.
- Instruction의 첫 6bit field(op)를 확인한다.
- Format(R, I, J)를 확인한다.
- Format에 맞게 32bit를 field별로 나눈다.
- 각 field의 값을 계산한다.
위의 과정은 MIPS ISA manual을 기반으로 이루어진다.
- op에 해당하는 부분이다. 첫 3bit(31~29번째 bit)는 row, 뒤 3bit(28~26번째 bit)는 col에 표현되어 있다.
- 000000과 같은 경우 R-format이라는 것만 확정된다. 아직 어떤 instruction인지 알 수 없는 것이다. 이렇게 여러 Instruction들이 op field 값을 공유하는 경우에는 funct field에 의해 확정된다.