指令 |
功能 |
應用實例 |
LB |
從存儲器中讀取一個字節的數據到寄存器中 |
LB R1, 0(R2) |
LH |
從存儲器中讀取半個字的數據到寄存器中 |
LH R1, 0(R2) |
LW |
從存儲器中讀取一個字的數據到寄存器中 |
LW R1, 0(R2) |
LD |
從存儲器中讀取雙字的數據到寄存器中 |
LD R1, 0(R2) |
L.S |
從存儲器中讀取單精度浮點數到寄存器中 |
L.S R1, 0(R2) |
L.D |
從存儲器中讀取雙精度浮點數到寄存器中 |
L.D R1, 0(R2) |
LBU |
功能與LB指令相同,但讀出的是不帶符號的數據 |
LBU R1, 0(R2) |
LHU |
功能與LH指令相同,但讀出的是不帶符號的數據 |
LHU R1, 0(R2) |
LWU |
功能與LW指令相同,但讀出的是不帶符號的數據 |
LWU R1, 0(R2) |
SB |
把一個字節的數據從寄存器存儲到存儲器中 |
SB R1, 0(R2) |
SH |
把半個字節的數據從寄存器存儲到存儲器中 |
SH R1,0(R2) |
SW |
把一個字的數據從寄存器存儲到存儲器中 |
SW R1, 0(R2) |
SD |
把兩個字節的數據從寄存器存儲到存儲器中 |
SD R1, 0(R2) |
S.S |
把單精度浮點數從寄存器存儲到存儲器中 |
S.S R1, 0(R2) |
S.D |
把雙精度數據從存儲器存儲到存儲器中 |
S.D R1, 0(R2) |
DADD |
把兩個定點寄存器的內容相加,也就是定點加 |
DADD R1,R2,R3 |
DADDI |
把一個寄存器的內容加上一個立即數 |
DADDI R1,R2,#3 |
DADDU |
不帶符號的加 |
DADDU R1,R2,R3 |
DADDIU |
把一個寄存器的內容加上一個無符號的立即數 |
DADDIU R1,R2,#3 |
ADD.S |
把一個單精度浮點數加上一個雙精度浮點數,結果是單精度浮點數 |
ADD.S F0,F1,F2 |
ADD.D |
把一個雙精度浮點數加上一個單精度浮點數,結果是雙精度浮點數 |
ADD.D F0,F1,F2 |
ADD.PS |
兩個單精度浮點數相加,結果是單精度浮點數 |
ADD.PS F0,F1,F2 |
DSUB |
兩個寄存器的內容相減,也就是定點數的減 |
DSUB R1,R2,R3 |
DSUBU |
不帶符號的減 |
DSUBU R1,R2,R3 |
SUB.S |
一個雙精度浮點數減去一個單精度浮點數,結果為單精度 |
SUB.S F1,F2,F3 |
SUB.D |
一個雙精度浮點數減去一個單精度浮點數,結果為雙精度浮點數 |
SUB.D F1,F2,F3 |
SUB.PS |
兩個單精度浮點數相減 |
SUB.SP F1,F2,F3 |
DDIV |
兩個定點寄存器的內容相除,也就是定點除 |
DDIV R1,R2,R3 |
DDIVU |
不帶符號的除法運算 |
DDIVU R1,R2,R3 |
DIV.S |
一個雙精度浮點數除以一個單精度浮點數,結果為單精度浮點數 |
DIV.S F1,F2,F3 |
DIV.D |
一個雙精度浮點數除以一個單精度浮點數,結果為雙精度浮點數 |
DIV.D F1,F2,F3 |
DIV.PS |
兩個單精度浮點數相除,結果為單精度 |
DIV.PS F1,F2,F3 |
DMUL |
兩個定點寄存器的內容相乘,也就是定點乘 |
DMUL R1,R2,R3 |
DMULU |
不帶符號的乘法運算 |
DMULU R1,R2,R3 |
MUL.S |
一個雙精度浮點數乘以一個單精度浮點數,結果為單精度浮點數 |
DMUL.S F1,F2,F3 |
MUL.D |
一個雙精度浮點數乘以一個單精度浮點數,結果為雙精度浮點數 |
DMUL.D F1,F2,F3 |
MUL.PS |
兩個單精度浮點數相乘,結果為單精度浮點數 |
DMUL.PS F1,F2,F3 |
AND |
與運算,兩個寄存器中的內容相與 |
ANDR1,R2,R3 |
ANDI |
一個寄存器中的內容與一個立即數相與 |
ANDIR1,R2,#3 |
OR |
或運算,兩個寄存器中的內容相或 |
ORR1,R2,R3 |
ORI |
一個寄存器中的內容與一個立即數相或 |
ORIR1,R2,#3 |
XOR |
異或運算,兩個寄存器中的內容相異或 |
XORR1,R2,R3 |
XORI |
一個寄存器中的內容與一個立即數異或 |
XORIR1,R2,#3 |
BEQZ |
條件轉移指令,當寄存器中內容為0時轉移發生 |
BEQZ R1,0 |
BENZ |
條件轉移指令,當寄存器中內容不為0時轉移發生 |
BNEZ R1,0 |
BEQ |
條件轉移指令,當兩個寄存器內容相等時轉移發生 |
BEQ R1,R2 |
BNE |
條件轉移指令,當兩個寄存器中內容不等時轉移發生 |
BNE R1,R2 |
J |
直接跳轉指令,跳轉的地址在指令中 |
J name |
JR |
使用寄存器的跳轉指令,跳轉地址在寄存器中 |
JR R1 |
JAL |
直接跳轉指令,並帶有鏈接功能,指令的跳轉地址在指令中,跳轉發生時要把返回地址存放到R31這個寄存器中 |
JAL R1 name |
JALR |
使用寄存器的跳轉指令,並且帶有鏈接功能,指令的跳轉地址在寄存器中,跳轉發生時指令的放回地址放在R31這個寄存器中 |
JALR R1 |
MOV.S |
把一個單精度浮點數從一個浮點寄存器復制到另一個浮點寄存器 |
MOV.S F0,F1 |
MOV.D |
把一個雙精度浮點數從一個浮點寄存器復制到另一個浮點寄存器 |
MOV.D F0,F1 |
MFC0 |
把一個數據從通用寄存器復制到特殊寄存器 |
MFC0 R1,R2 |
MTC0 |
把一個數據從特殊寄存器復制到通用寄存器 |
MTC0 R1,R2 |
MFC1 |
把一個數據從定點寄存器復制到浮點寄存器 |
MFC1 R1,F1 |
MTC1 |
把一個數據從浮點寄存器復制到定點寄存器 |
MTC1 R1,F1 |
LUI |
把一個16位的立即數填入到寄存器的高16位,低16位補零 |
LUI R1,#42 |
DSLL |
雙字邏輯左移 |
DSLL R1,R2,#2 |
DSRL |
雙字邏輯右移 |
DSRL R1,R2,#2 |
DSRA |
雙字算術右移 |
DSRA R1,R2,#2 |
DSLLV |
可變的雙字邏輯左移 |
DSLLV R1,R2,#2 |
DSRLV |
可變的雙字羅伊右移 |
DSRLV R1,R2,#2 |
DSRAV |
可變的雙字算術右移 |
DSRAV R1,R2,#2 |
SLT |
如果R2的值小於R3,那么設置R1的值為1,否則設置R1的值為0 |
SLT R1,R2,R3 |
SLTI |
如果寄存器R2的值小於立即數,那么設置R1的值為1,否則設置寄存器R1的值為0 |
SLTI R1,R2,#23 |
SLTU |
功能與SLT一致,但是帶符號的 |
SLTU R1,R2,R3 |
SLTUI |
功能與SLT一致,但不帶符號 |
SLTUI R1,R2,R3 |
MOVN |
如果第三個寄存器的內容為負,那么復制一個寄存器的內容到另外一個寄存器 |
MOVN R1,R2,R3 |
MOVZ |
如果第三個寄存器的內容為0,那么復制一個寄存器的內容到另外一個寄存器 |
MOVZ R1,R2,R3 |
TRAP |
根據地址向量轉入管態 |
|
ERET |
從異常中返回到用戶態 |
|
MADD.S |
一個雙精度浮點數與單精度浮點數相乘加,結果為單精度 |
|
MADD.D |
一個雙精度浮點數與單精度浮點數相乘加,結果為雙精度 |
|
MADD.PS |
兩個單精度浮點數相乘加,結果為單精度 |