1. 程式人生 > >MIPS的暫存器、指令和定址方式的分類

MIPS的暫存器、指令和定址方式的分類

MIPS的32個暫存器

助記符 編號 作用
zero 0 恆為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型

I型

J型

 

基本指令格式

兩點注意:

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

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

指令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的含義表

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

清單二:R型的funct含義表

 

 

參考連結:

1、http://www.cnblogs.com/junuh/archive/2009/06/12/1502030.html

2、https://blog.csdn.net/qq_32146369/article/details/79006728