1. Data Transfer Instructions
- cpu는 general 32개밖에 없기 때문에 메모리와 data transfer 필요
- 메모리의 데이터에 접근하기 위해서 메모리 주소 필요! (레지스터는 이름으로 접근)
- Load : 메모리 -> 레지스터
- Store : 레지스터 -> 메모리
2. 메모리
- 메모리는 byte addressed (1바이트 = 8비트)
- lw, sw -> 메모리 주소는 4의 배수 (word 단위라서)
- MIPS는 "Big Endian" -> MSB가 가장 작은 주소에 들어간다
C code:
g = h + A[8];
Compiled MIPS code:
lw $t0, 32($s3) // $s3 = base address of A
add $s1, $s2, $t0 // $s1 = g, $s2 = h
C code:
A[12] = h + A[8]; // 4*8
Compiled MIPS code:
lw $t0, 32($s3) // $s3 = base address of A
add $t0, $s2, $t0 // $s2 = h
sw $t0, 48($s3)

- R-format은 3개의 피연산자(레지스터) 필요했음 (rs, rt, rd)
- I-format에서는 피연산자 1개가 '상수'로 저장되어 있음 (레지스터, 메모리 접근 필요 없음)
- imm 필드(16비트) 범위 : -2^15 ~ 2^15-1
- addi rt, rs, imm // addi, $t0, $s3, -12
- lw rt, address // lw $t0, 24($s3)
= s3의 주소 + 24의 주소의 메모리에서 32비트 읽어와라
- sw rt, address // sw $t2, 8($s3)