산술 명령어 (Arithemtic Instructions)
R - Format
add, sub
add rd, rs, rt => rd = rs + rt
sub rd, rs, rt => rd = rs - rt
mult $r, $s => r * s, 곱셈의 경우, 연산 결과는 따로 어딘가에 저장됨
mfhi $d => set hi to $d 연산 결과의 상위 32bit를 $d 레지스터에 이동
mflo $d => set lo to $d 연산 결과의 하위 32bit를 $d 레지스터에 이동
div
I - Format
addi / addiu
addi rt, rs, imm => rt = rs + imm (rd 가 없으니 rt 를 대신 목적지로 사용한다. addiu 는imm 값을 zero extend 한다.)
논리 명령어 (Logical Instructions)
R - Format
and, or, nor, xor
and rd, rs, rt => rd = rs & rt
I - Format
andi, ori, xori
andi rt, rs, imm => rt = rs & imm (논리 연산자는 기본적으로 imm 필드를 unsigned 로 zero extend 힌다.)
R - Format
sll, srl, sra
sll rd, rt, shamt => rd = rt << shamt
sllv, srlv, srav
sllv rd, rt, rs => rd = rt << rs (레지스터의 하위 5bit만 읽음, rt, rs 위치가 다른 R-Format과 반대다.)
데이터 전송 명령어 (Data Transfer Instructions)
I - Format
lw, sw, lb, sb, lh, sh
lw rt, imm(rs) => rt <= memory [ rs + imm ]
sw rt, imm(rs) => rt => memory [ rs + imm ]
lhu, lbu
형식은 동일, 레지스터에 값을 채울 때, LSB 부터 채우고 나머지 위치를 zero extension 으로 채움
lui (load upper immediate)
lui 0x1234
Pseudo Instructions
li (load immedate)
la (load address)
move r1, r2 => add r1, r2, $0
nop => sll $0, $0, 0
분기 명령어 (Branch Instuctions)
조건 분기 (Conditional Branch)
I - Format
beq, bne
beq rs, rt, label => goto label if rs == rt
slti, sltiu
slti rt, rs, imm => set rt 1 if rs < imm
R - Format
slt, sltu
slt rd, rs, rt => set rd 1 if rs < rt
Pseudo Instructions
bge, bgt, ble, blt / bltu, bleu, bgtu, bgeu
bge r1, r2, label
slt 를 사용하여 $at 레지스터 세팅 후, $at 레지스터를 $zero 레지스터와 비교
무조건 분기 (Unconditional Branch)
J - Format
j target => jump to target
jal target => link and jump to target
R - Format
jr rs => 5bit 만 있으면 되니까 R Format, 나머지는 0으로 초기화
'CS > 컴퓨터 구조' 카테고리의 다른 글
[컴퓨터 구조] 9. 곱셈, 부동 소수점 (1) | 2024.04.17 |
---|---|
[컴퓨터 구조] 8. Computer Performance (0) | 2024.04.16 |
[컴퓨터 구조] 6. MIPS Branch Instructions (0) | 2024.04.15 |
[컴퓨터 구조] 5. MIPS Data Transfer Instructions (2) (0) | 2024.04.14 |
[컴퓨터 구조] 4. MIPS Data Transfer Instructions (1) (0) | 2024.04.06 |