跳轉到內容

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
華夏公益教科書