MIPS常用指令笔记

MIPS(Microprocessor without Interlocked Pipeline Stages),是一种RISC架构处理器的一种, 由史丹佛大学教授约翰·轩尼诗领导他的团队于1981年开发,现MIPS专利拥有者为MIPS科技公司。这种指令集的CPU常用于嵌入式设备中。

前几天在看计算机组成与设计:硬件、软件接口(原书第4版). David A, Patterson. 机械工业出版社.的时候,初步了解了这种处理器架构,书中给出了MIPS的操作数类型(寄存器,内存)如下表:

MIPS操作数

MIPS操作数
名字 举例 注释
32个寄存器 $zero,$at,$v0 ~ $v1,$a0 ~ $a3,$t0 ~ $t7, $s0 ~ $s7,$t8 ~ $t9,$gp,$sp,$fp,$ra 寄存器用于数据的快速访问。在MIPS中,只能对存放在寄存器中的数执行算术操作,寄存器$zero恒为0,寄存器$at被汇编器保留,用于处理大的常数。
2^30个存储字 Memory[0],Memory[4],…,Memory[4294967292] 存储器只能通过数据传输指令访问。MIPS使用字节编址,所以连续的字地址相差4。存储器用于保存数据结构、数组和溢出的寄存器

MIPS指令格式

维基百科了解到,在MIPS架构中,指令被分为以下三类:

类型 格式(位,31~0)
R opcode (6) rs (5) rt (5) rd (5) shamt (5) funct (6)
I opcode (6) rs (5) rt (5) immediate (16)
J opcode (6) address (26)

三种类型的指令的最高6位均为opcode码。

从25位往下:

  1. rs:第一个源操作数寄存器;
  2. rt:第二个源操作数寄存器;
  3. rd:目的操作数寄存器;
  4. shamt:即shift amount,移位指令的偏移量;
  5. funct:函数(常结合opcode使用,用于指明操作类型);
  6. immediate:立即数;
  7. address:地址(立即数等)。

常用MIPS指令

以下是摘自计算机组成与设计:硬件、软件接口(原书第4版). David A, Patterson. 机械工业出版社.的常用MIPS指令,其他指令以此类推。

## Arithmetic
add  $s1, $s2, $s3          # NOTE $s1 = $s2 + $s3
sub  $s1, $s2, $s3          # NOTE $s1 = $s2 - $s3
addi $s1, $s2, 20           # NOTE $s1 = $s2 + 20  (add immediate)

## Date transmission
lw   $s1, 20($s2)           # NOTE $1 = Memory[$s2 + 20] (load word)
sw   $s1, 20($s2)           # NOTE Memory[$s2 + 20] = $1 (store word)
lh   $s1, 20($s2)           # NOTE $1 = Memory[$s2 + 20] (load halfword)
lhu  $s1, 20($s2)           # NOTE $1 = Memory[$s2 + 20] (load halfword-unsigned)
sh   $s1, 20($s2)           # NOTE Memory[$s2 + 20] = $1 (store halfword)

lb   $s1, 20($s2)           # NOTE $1 = Memory[$s2 + 20] (load byte)
lbu  $s1, 20($s2)           # NOTE $1 = Memory[$s2 + 20] (load byte-unsigned)
sb   $s1, 20($s2)           # NOTE Memory[$s2 + 20] = $1 (store byte)

ll   $s1, 20($s2)           # NOTE $1 = Memory[$s2 + 20] (load-link)
sc   $s1, 20($s2)           # NOTE Memory[$s2 + 20] = $1; $s1 = 0 or 1 (store-conditional)

lui  $s1, 20                # NOTE $1 = 20 * (20 ^ 16) (load upper immediate)

## Logic
and  $s1, $s2, $s3          # NOTE $s1 = $s2 & $s3 (and)
or   $s1, $s2, $s3          # NOTE $s1 = $s2 | $s3 (or)
nor  $s1, $s2, $s3          # NOTE $s1 = ~($s2 | $s3) (nor)
andi $s1, $s2, 20           # NOTE $s1 = $s2 & 20 (and immediate)
ori  $s1, $s2, 20           # NOTE $s1 = $s2 | 20 (or immediate)

sll  $s1, $s2, 10           # NOTE $s1 = $s2 << 10 (shift left logical) srl $s1, $s2, 10 # NOTE $s1 = $s2 >> 10 (shift right logical)

## Conditional jump
beq  $s1, $s2, 25           # NOTE if($s1 == $s2) go to PC + 4 + 100 (branch on equal)
bne  $s1, $s2, 25           # NOTE if($s1 != $s2) go to PC + 4 + 100 (branch on not equal)

slt  $s1, $s2, $s3          # NOTE if($s2 < $s3) $s1 = 1; else $s1 = 0 (set on less than (signed))
sltu $s1, $s2, $s3          # NOTE if($s2 < $s3) $s1 = 1; else $s1 = 0 (set on less than (unsigned))
slti $s1, $s2, 20           # NOTE if($s2 < 20) $s1 = 1; else $s1 = 0 (set on less than immediate (signed))
sltiu$s1, $s2, $s3          # NOTE if($s2 < $s3) $s1 = 1; else $s1 = 0 (set on less than immediate (unsigned))

## Unconditional jump
j    2500                   # NOTE go to 10000 (jump)
jr   $ra                    # NOTE go to $ra (jump register)
jal  2500                   # NOTE $ra = PC + 4; go to 10000 (jump and link)

更多MIPS指令详见MIPS Green Sheet,本文底部有下载链接。

常见MIPS寻址方式

MIPS的寻址方式相对x86的少许多,常见的有:

  1. 寄存器寻址;
  2. 变址寻址;
  3. 立即数寻址;
  4. PC相对寻址;
  5. 伪直接寻址(跳转);
  6. ……

Download:

参考:

  1. http://www.mrc.uidaho.edu/mrc/people/jff/digital/MIPSir.html
  2. http://alumni.cs.ucr.edu/~vladimir/cs161/mips.html
  3. Wikipedia – MIPS Architecture
  4. 维基百科 – MIPS架构
  5. 维基百科 – Load-link/store-conditional
  6. https://www.cnblogs.com/jiangu66/archive/2013/05/12/3074188.html

作者: YanWen

Web 开发者

发表评论

Fill in your details below or click an icon to log in:

WordPress.com 徽标

You are commenting using your WordPress.com account. Log Out /  更改 )

Google photo

You are commenting using your Google account. Log Out /  更改 )

Twitter picture

You are commenting using your Twitter account. Log Out /  更改 )

Facebook photo

You are commenting using your Facebook account. Log Out /  更改 )

Connecting to %s