MIPS

Notes About MIPS Learning

Posted by MichaelChen on 2020-12-03
Estimated Reading Time 2 Minutes
Words 412 In Total
Viewed Times

MIPS

E.G

A[100] $19,h $18,临时 $8

1
2
3
4
A[10] = h + A[3]
lw $8,12($19) //t0 = A[3]
add $8,$18,$8 //t0 = h + A[3]
sw $8,40($19) //A[10] = h+A[3]

指令基本格式

R 寄存器 (Register|6bit opcode|5bit rs|5bit rt|5bit rd|5bit shamt|6bit func)

  • opcode:指令类型

  • rs:第一个源操作数所在寄存器的编号

  • rt:第二个源操作数所在寄存器的编号

  • rd:目的操作数的寄存器编号

add $s1,$s2,$s3 // $s1 = $s2 + $s3

op rs(s2/18(H)) rt(s3/19(H)) rd(s1/17(H)) shamt func
000000 10010 10011 10001 00000 100000

sll $s1,$s2,5 // $s1 = $s2 << 5

op rs(0) rt(s2/18(H)) rd(s1/17(H)) shamt(5) func
000000 00000 10010 10001 00101 000000

I 立即数 Immediate 16位(6bit opcode|5bit rs|5bit rt|16bit immediate)

  • opcode:指令类型
  • rs:第一个源操作数所在寄存器的编号
  • rt:目的操作数所在寄存器的编号

addi $21,$22,-50 //$21=$22+(-50)

op rs($22) rt($21) immediate
001000 10110 10101 1110010 -> 1111 1111 1100 1110(FFCE)

lw $s1,-50($s2)

op rs($s2) rt($s1) immediate
100011 10010 10001 1111 1111 1100 1110(FFCE)

c

1
2
3
4
5
6
if(i==f)
f=g+h;
else
f=g-h
//beq 相等
//bne 不相等

transform

1
2
3
4
5
6
7
8
9
10
11
i:$3
j:$4
f:$0
g:$1
h:$2
beq $s3,$s4,True //i==f
sub $s0,$s1,$s2 //f=g-h
j Fin

True: add $s0,$s1,$s2 //f=g+h
Fin:...

J 跳转 Jump 26位(6bit opcode|26bit address)

e.g

c

1
2
3
4
5
if(i==f)
f=g+h;
else
f=g-h
f -> $s0 g -> $s1 h -> $s2 i -> $s3 j -> $s4

transform

1
2
3
4
5
bne $s3,$s4,Else
add $s0,$s1,$s2
j Exit
Else: sub $s0,$s1,$s2
Exit:

不同维度

运算指令 add rd,rs,rt
sll rd,rt,shamt
addi rt,rs,imm
slti rt,rs,imm
/
访存指令 / lw rt,imm(rs)
sw rt,imm(rs)
/
分支指令 jr rs beq rs,rt,imm j addr
R型指令 I型指令 J型指令

If you like this blog or find it useful for you, you are welcome to comment on it. You are also welcome to share this blog, so that more people can participate in it. If the images used in the blog infringe your copyright, please contact the author to delete them. Thank you !