기초
- 종류
- arithmetic, logic
- data transfer
- control
arithmetic, logic
data transfer
- load
- lw s1,8(s0): s1(dst)<−memory[s0+8]
- LB는 1byte단위로 Load함
- store
- sw s1,12(s0): memory[$s0+12] <- s1(source)
- move(pseudo 코드)
- move $s1, $2: s2에서 s1으로 이동
- 레지스터에서 레지스터로 이동
control
-
conditional branch
-
BEQ(Branch if Equal)
- BEQ s1,s2,label: if(s1==s2) PC <- TargetAddress
- i type 사용 --> offset에 16bit로 들어감
- 16bit
- 이동할 주소를 offset으로 표현 --> offset: 현재로 위치로 부터 얼마나 떨어져 있는지를 표시
- ex) offset:2 ==> pc <- pc + 2(offset)*4
- pc는 항상 다음 주소를 가리키고 있음을 유의
- sign extension
- 16bit를 pc와 연산하기 위해 se사용
- 1로 모두 채운 음수인 경우도 크기를 알기 위해 절대값을 확인해보면 1로 채운 부분이 보두 0으로 변하여 기본 값이 유지됨!
-
BNE
- BNE s1,s2,label: if(s1=s2) PC <- TargetAdress
-
SLT(set if less than)
- slt $t0, $s1 $s2
-
SLTI
-
unconditional branch
- J
- pc를 타켓으로 변경하여 타켓으로 jump(무조건 jump함)
- j format
- word address 26bit: 4bit(pc) + 26bit + 00(명령어 단위 4bit --> 마지막 00)
- 앞에 4자리 해당하는 Pc 범위안에서만 움직이라는 의미
- JR(jump register)
- jr $ra: pc <- $ra
- JAL(jump and link)
- JAL label : $ra <- PC; PC <- TargetAddress
- 현재 pc값 레지스터에 넣어놓고, label로 점프
- 함수 호출시 돌아올 주소를 기억
1. ra(31번 레지스터)에 저장
- 참조