CS/컴퓨터 구조

[컴퓨터 구조] 7. MIPS 명령어 총 정리

에버듀 2024. 4. 16. 20:03
반응형

산술 명령어 (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으로 초기화

반응형