MIPS匯編指令集


mips

MIPS匯編

MIPS指令集

MIPS指令集屬於精簡指令集

MIPS的所有指令都是32位,指令格式簡單,而X86的指令長度不是固定的。

簡單的指令和格式易於譯碼和流水線操作,但是代碼密度不高,導致二進制文件大

MIPS有32個通用寄存器REG,為什么是32個而不是更多呢?
因為更多的寄存器需要更多的指令空間對寄存器編碼,也會增加上下文切換的負擔。

MIPS指令格式

R格式

6 5 5 5 5 6
op rs rt rd shamt funct

用處:
寄存器-寄存器ALU操作
讀寫專用寄存器

I格式

6 5 5 16
op rs rt 立即數操作

用處:
加載/存儲字節,半字,字,雙字
條件分支,跳轉,跳轉並鏈接寄存器

J格式

6 26
op 跳轉地址

用處:
跳轉,跳轉並鏈接
陷阱和從異常中返回

各字段含義:
op:指令基本操作,稱為操作碼。
rs:第一個源操作數寄存器。
rt:第二個源操作數寄存器。
rd:存放操作結果的目的操作數。
shamt:位移量;
funct:函數,這個字段選擇op操作的某個特定變體。

例:

add $t0,$s0,$s1  

表示$t0=$s0+$s1,即16號寄存器(s0)的內容和17號寄存器(s1)的內容相加,結果放到8號寄存器(t0)。
指令各字段的十進制表示為:

0 16 17 8 0 32

op=0和funct=32表示這是加法,
16=$s0表示第一個源操作數(rs)在16號寄存器里,

17=$s1表示第二個源操作數(rt)在17號寄存器里,
8=$t0表示目的操作數(rd)在8號寄存器里。
把各字段寫成二進制,為:

000000 10000 10001 01000 00000 100000

這就是上述指令的機器碼(machine code),可以看出是很有規則性的。

MIPS指令

MIPS沒有棧操作指令 ,調用子程序時沒有自動壓棧的call指令,只能用jal。

MIPS的內存映射、中斷等功能都做到了協處理器0(cp0)中,浮點運算做到了協處理器1(cp1)中。

MIPS的尋址方式最簡單,僅有寄存器加偏移尋址方式。

MIPS常用指令集

lb/lh/lw: 從存儲器中讀取一個byte/half word/word的數據到寄存器中.如lb $1, 0($2)
sb/sh/sw: 把一個byte/half word/word的數據從寄存器存儲到存儲器中.如 sb $1, 0($2)
add/addu:把兩個定點寄存器的內容相加add $1,$2,$3($1=$2+$3);u為不帶符號加。  

addi/addiu:把一個寄存器的內容加上一個立即數add $1,$2,#3($1=$2+3);u為不帶符號加。
sub/subu:把兩個定點寄存器的內容相減。
div/divu:兩個定點寄存器的內容相除。
mul/mulu:兩個定點寄存器的內容相乘。
and/andi:與運算,兩個寄存器中的內容相與and $1,$2,$3($1=$2 & $3);i為立即數。
or/ori:或運算。
xor/xori:異或運算。
beq/beqz/benz/bne:條件轉移eq相等,z零,ne不等。
j/jr/jal/jalr:j直接跳轉;jr使用寄存器跳轉;
lui:把一個16位的立即數填入到寄存器的高16位,低16位補零。
sll/srl:邏輯左移/右移sll $1,$2,#2。
slt/slti/sltui:如果$2的值小於$3,那么設置$1的值為1,否則設置$1的值為0。slt $1,$2,$3。
mov/movz/movn:復制,n為負,z為零。mov $1,$2; movz $1,$2,$3($3為零則復制$2到$1)。
trap:根據地址向量轉入管態。
eret:從異常中返回到用戶態。

32個通用寄存器

0($zero): 永遠返回值為0
1($at): 用做匯編器的暫時變量
2-3($v0-$v1): 子函數調用返回結果
4-7($a0-$a3): 子函數調用的參數
8-15($t0-$t7): 暫時變量,子函數使用時不需要保存與恢復
16-23($s0-$s7): 子函數寄存器變量。子函數必須保存和恢復使用過的變量在函數返回之前,從而調用函數知道這些寄存器的值沒有變化。
24-25($t8-$t9): 暫時變量,子函數使用時不需要保存與恢復
26-27($k0-$k1): 通常被中斷或異常處理程序使用作為保存一些系統參數
28($gp): 全局指針。一些運行系統維護這個指針來更方便的存取“static“和”extern”變量。
29($sp): 堆棧指針
30($s8/$fp): 第9個寄存器變量。子函數可以用來做楨指針
31($ra): 子函數的返回地
cp0:協處理器0,MIPS對CPU的控制用cp0完成

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM