MIPS CPU的一次操作可加載或存儲1到8個字節的數據。由於乘法的結果返回的速度不足以使下一條指令能夠自動得到這個結果,乘法結果寄存器是互鎖的(interlocked)。在乘法操作完成之前試圖讀取結果寄存器就是導致CPU停止運行,直到完成。
和其他一些更簡單的RISC體系結構相比,MIPS體系結構的目標之一是:體系結構朝着64位發展,從而使得地址的段式結構變得沒有任何必要。(在64位版本的X86核PowerPC中還有這個負擔)
功能分組:
空操作: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的指令);
匯編資料匯總:http://www.cnblogs.com/kingwolfofsky/archive/2011/09/02/2163457.html