借此機會,再總結一下前幾周理論課學習到的一些MIPS指令集:(主要查詢自別處)
【空操作】
nop、ssnop(不能和其他指令同時,至少需要一個時鍾周期)
【寄存器間的數據傳送指令】
move、movf、movt、movn、movz(后四個為條件傳遞指令)
【常數加載指令】
dla、la(獲取某些標號地址或程序中變量地址的宏指令);
dli、li(加載常數立即數指令);
lui(加載高位立即數指令)
【算術/邏輯操作指令】
addu、addiu、daddu,daddiu(加法指令);
dsub、sub(會觸發溢出陷入的減法操作);
dsubu、subu(普通減法指令);
abs、dabs(求絕對值操作);
dneg、neg、dnegu、negu(一元非操作);
and、andi、or、ori、xor、xori、nor、not(按位邏輯指令);
drol、dror、rol、ror(循環左移和右移);
dsll、dsll32、dsllv(64位左移,低位補零);
dsra、dsra32、dsrav(64位算術右移指令);
dsrl、dsrl32、dsrlv(64位邏輯右移指令);
sll、sllv(32位左移指令);sra、srav(32位算術右移指令);
srl、srlv(32位邏輯右移指令);
slt、slti、sltiu、sltu(硬件指令,條件滿足就寫入1,否則寫0);
seq、sge、sgeu、sgt、sgtu、sle、slue、sne(根據更復雜的條件設置目的寄存器的宏指令)
【整數乘法、除法以及求余指令】
ddiv、ddivu、div、divu(整數除法的3操作數宏指令分別處理64位或32位有符號或無符號數);
divo、divou(明確該指令是帶有溢出檢查的除法指令);
dmul、mul(3操作數64位或32位乘法指令,沒有溢出檢查);
mulo、mulou、dmulo、dumlou(乘法宏指令,如果結果不能存入一個通用寄存器,發生溢出,觸發異常);
dmult、dmultu、mult、multu(執行有符號/無符號32/64位乘法的機器指令);
drem、dremu、rem、remu(求余操作);
mfhi、mflo、mthi、mtlo(用於訪問整數乘除單元的結果寄存器hi和lo)
【存取指令(內存訪問指令】
lb、lbu(加載一個字節,高位可以補零,或進行符號擴展,以補充整個寄存器的長度);
ld(加載一個雙字);
ldl、ldr、lwl、lwr、sdl、sdr、swl、swr(向左、向右加載、存儲一個字、雙字);
lh、lhu(加載一個半字,高位可以補零,或進行符號擴展,以補充整個寄存器的長度);
lw、lwu(加載一個字);
pref、prefx(把數據預取到緩沖);
sb、sd、sh、sw(存儲字節、雙字、半字、字);
uld、ulh、ulhu、ulw、usd、usw、ush(地址非對齊的數據存取宏指令);
l.d、l.s、s.d、s.s(存取雙精度和單精度浮點數的指令,地址必須對齊);
ldxcl、lwxcl、sdxcl、swxcl(采用基址寄存器+偏移寄存器的尋址方式存取指令);
【跳轉、分支和子程序調用指令】
j(無條件跳轉到一個絕對地址,訪問256M的代碼空間);
jal、jalr(直接或間接子程序調用,這種跳轉不僅能跳轉到指定地址,而且可以順便把返回地址(當前指令地址+8)放到ra寄存器中);
b(基於當前指令地址的無條件相對跳轉);
bal(基於當前地址的函數調用指令);
bc0f、bc0f1、bc0t、bc0t1、bc2f、bc2f1、bc2t、bc2t1(根據協處理器0和2的條件標志進行跳轉);
bc1f、bc1f1、bc1t、bc1t1(根據浮點條件標志位進行跳轉);
beq、beq1、beqz、beqz1、bge、bge1、bgeu、bgeu1、bgez、bgez1、bgt、bgt1、bgtu、bgtu1、bgtz、bgtz1、ble、ble1、bleu、bleu1、blez、blez1、blt、blt1、bltu、bltu1、bltz、bltz1、bne、bnel、bnez、bnezl(雙操作數和單操作數的比較跳轉指令);
bgeza1、bgeza11、bltza1、bltza11(如果需要 ,這些指令是用於有條件函數調用的原始機器指令);
【斷點及陷阱指令】
break(產生一個“斷點”類型的異常);
sdbbp(產生EJTAG異常的斷點指令);
syscall(產生一個約定用於系統調用的異常類型);
teq、teqi、tge、tgei、tgeiu、tgeu、tlt、tlti、tltiu、tltu、tne、tnei(條件異常指令,對一個或兩個操作數進行條件測試);
【協處理器0的功能】
cfc0、ctc0(把數據拷進和拷出協處理器0的控制寄存器);
mfc0、mtc0、dmfc0、dmtc0(在通用寄存器和協處理器0寄存器之間交換數據);
cfc2、ctc2、dmfc2、dmtc2、mfc2、mtc2(協處理器2的指令);