MIPS的暫存器、指令和定址方式的分類
阿新 • • 發佈:2018-12-24
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