跳转到内容

MIPS 汇编/伪指令

来自维基教科书,自由的教科书

MIPS 指令集非常小,因此为了执行更复杂的任务,我们需要使用称为伪指令的汇编器宏。

伪指令列表

[编辑 | 编辑源代码]

以下是作为伪指令实现的标准 MIPS 指令列表

  • abs
  • blt
  • bgt
  • ble
  • neg
  • negu
  • not
  • bge
  • li
  • la
  • move
  • sge
  • sgt


分支伪指令

[编辑 | 编辑源代码]

小于分支 (blt)

blt 指令将两个寄存器进行比较,将它们视为带符号整数,如果一个寄存器小于另一个寄存器,则进行分支。

blt $8, $9, label

翻译为

slt $1, $8, $9
bne $1, $0, label

其他伪指令

[编辑 | 编辑源代码]

立即加载 (li)

li 伪指令将立即值加载到寄存器中。

li $8, 0x3BF20

翻译为

lui $at, 0x0003
ori $8, $at, 0xBF20


绝对值 (abs)

绝对值伪指令将一个寄存器中包含的绝对值加载到另一个寄存器中。

abs $1, $2

翻译为

addu $1, $2, $0
bgez $2, 8 (offset=8 → skip 'sub' instruction)
sub $1, $0, $2

移动 (move)

move 伪指令将第二个寄存器操作数的内容移动到第一个寄存器操作数中。

move $1, $2

翻译为

add $1, $2, $0

加载地址 (la)

la $a0,address

翻译为

  lui $at, 4097 (0x1001 → upper 16 bits of $at).
  ori $a0,$at,disp 

其中立即数 (“disp”) 是第一个数据位置(始终为 0x 1001 0000)与字符串中第一个字节的地址之间的字节数。


大于或等于设置 (sge)

sge 指令将两个寄存器进行比较,将它们视为带符号整数,如果第一个寄存器 ($8) 的值大于或等于第二个寄存器 ($9) 的值,则设置给定寄存器 ($1),否则给定寄存器 ($1) == 00。

sge $1, $8, $9

翻译为

addiu $9, $9, -0x01
slt $1, $9, $8
华夏公益教科书