메모리에 저장
- $4: source
- 8($5): base register -> destination (메모리 어디에 저장해야할까)
base register를 어떻게 해석해야할까?
메모리를 계산하는 수식: R[$5] + 8
-> 5번 레지스터가 가지고 있는 32bit 값에 offset 8을 더해준다.
🤔 메모리 주소를 왜 이렇게 나타낼까?
메모리 주소는 32bit를 나타내려 하는데 instruction에서 32bit를 바로 표현할 수 있는 방법은 register를 사용하는 방법밖에 없기 때문이다.
메모리에서 불러옴
- $4: destination
- 8($5): base register
두번째 operand가 나타내는 메모리 주소에 저장되어 있는 4byte word (32bit)를 읽어와서 $4번 레지스터에 쓰는 것이다.
다음 코드 수행 결과 $4, $5, $6의 값은?
.text .globl main main: lui $5, 0x1000 lui $4, 0x789A ori $4, $4, 0xBCDE sw $4, 8($5) lw $6, 8($5)
1. lui $5, 0x1000
2. lui $4, 0x789A
ori $4, $4, 0xBCDE
3. sw $4, 8($5)
$5번 레지스터 값에다가 8을 더한다. -> 0x10000008 (data segment에서 확인 가능)
0x10000008 이 위치에 $4번 레지스터의 값을 저장한다.
4. lw $6, 8($5)
❗ 참고로, 두 instruction의 경우 I-format이 적합하다!
sw를 disassemble하면 lw가 된다.