天天看點

MIPS的寄存器、指令和尋址方式的分類

MIPS的32個寄存器

助記符 編号 作用
zero 恒為0
at 1 (assembly temporary)保留給彙編器使用
v0,v1 2-3 (values)子程式傳回,即函數調用時的傳回值
a0-a3 4-7 (arguments)子程式調用的前幾個參數
t0-t7 8-15 (temporaries)臨時變量,子程式使用時無需儲存
t8-t9 24-25
s0-s7 16-23

(saved)子程式寄存器變量:子程式寫入時必須儲存

其值并在傳回前恢複原值

k0-k1 26-27 (Reserved for OS Kernel)保留給中斷處理程式使用;其值可能在你眼皮子底下改變
gp 28

(globe pointer)全局指針;一些運作系統維護這個指針以便

存取static和extern變量(全局變量)

sp 29 (stack pointer)堆棧指針;指向棧頂的指針
fp/s9 30 (frame pointer)第九個寄存器變量;需要的子程式可以用來做幀指針
ra 31 (return address)子程式的傳回值

MIPS的指令

 R型

MIPS的寄存器、指令和尋址方式的分類

I型

MIPS的寄存器、指令和尋址方式的分類

J型

MIPS的寄存器、指令和尋址方式的分類

基本指令格式

MIPS的寄存器、指令和尋址方式的分類

兩點注意:

1、移位指令是R型指令,但沒有使用rs寄存器

例如,sll  $t2,$s0,4   #reg $t2 = reg $s0 << 4 bits,其對應的機器語言是

MIPS的寄存器、指令和尋址方式的分類

指令sll的opcode和funct字段都為0,rd為10(寄存器t2),rt為16(寄存器s0),shamt為4,rs字段沒有使用,被置為0

2、I型指令,rs為源寄存器,rt為目的寄存器

機器碼的解碼

比如,0Xaf8020這條機器指令對應的彙編語言是什麼?

1、轉化成二進制

0000 0000 1010 1111 1000 0000 0010 0000

2、看opocde,即高6位,即26-31

000 000,是以是R型指令

清單一:opcode的含義表

MIPS的寄存器、指令和尋址方式的分類

3、(隻考慮基本指令格式,不考慮浮點指令格式)如果opcode=000000表示R型指令,還需要結合funct字段才能判斷出指令類型。而I型、J型直接從opcode就能判斷出來。

清單二:R型的funct含義表

MIPS的寄存器、指令和尋址方式的分類

MIPS尋址方式

MIPS的寄存器、指令和尋址方式的分類
  • 模式3是基址偏移量尋址,例如lw和sw,是将16位位址字段做符号擴充成32位與PC相加
  • 模式4是PC相對尋址,将16位位址左移2位與PC(已更新為PC+4)相加。為什麼要左移2位?16位偏移量左移2位以訓示以字為機關的偏移量,這樣做将偏移量能表示的有效範圍擴大了4倍。其次,16位位址看作有符号數,一般在流水線設計時,先将16位位址符号擴充成32位,然後左移2位,再與PC相加
  • 模式5是僞直接尋址,把26位位址左移2位與PC高4位相連。這裡的26位位址是無符号的,PC是加4之後的,在流水線設計中,就是将PC+4的高4位、26位位址、末尾00拼接成32位跳轉目标

參考連結: ​

3、​​https://zhuanlan.zhihu.com/p/38534417​​

個性簽名:時間會解決一切