指令的格式如下:
對於R型指令:
可以完成的功能包括add、sub、and、or、xor等指令,用三個寄存器:rs、rt、rd進行運算,rd用來數據結果的存儲,rs,rt則存運算的兩個數據,簡單的數據通路設計如下:
對於R指令op字段提供類型(R,I,J),func字段提供具體的運算類型,每個操作都有一個具體的類型碼,通過這兩個字段,控制單元產生對應的信號。
aluc:運算器控制信號 wreg:寄存器寫信號
對於R型移位指令,移位位數由指令字段給出,兩個操作數分別為Rt和sa給出,通過寫寄存器指令將結果寫到寄存器Rd中。PC為指令,其中含有指令格式,PC將op與func子段的值給控制單元,控制單元產生指令對應的信號,下一條指令的PC=PC+4。
shift:產生移位信號,控制多路選擇器選擇移位的數據還是正常的數據。
對於I型指令:
操作數兩位由Rs與立即數給出,結果存放在rt中。imm只有16位所以對於的位用0或符號擴展法進行擴展。
e:控制符號擴展或者0擴展 aluimm:控制信號,表明進行立即數的運算
對於I型指令的訪存與寫回指令:
地址=邏輯地址+物理地址
LW:將存儲器某一地址單元的數據加載到寄存器Rt中
SW:將寄存器Rt數據寫到存儲器某一地址單元中
對於寄存器尋址的計算方法:某一通用寄存器的值Rs+16位符號擴展的立即數=ADDR
wmem:寫存儲器信號 m2reg:存儲器向寄存器寫信號
0:PC+4
1:分支指令
2:寄存器尋址指令,寄存器Rt的值為PC執行的地址
3:跳轉指令
對於I型指令中的條件轉移指令,跳轉的PC值=PC+4+SignEXT(imm),但是計算的時候我們還要對擴展后的imm進行左移兩位的操作,其原因為:mips的指令長度為4個字節,所以指令地址一定為4的倍數,因而地址后兩位一定為0,因此offset左移兩位使偏移量變為4的倍數,保持地址最后兩位為0。跳轉指令影響標志位,送到控制單元。
對於J型指令,跳轉的目標地址有target給出,jump target 是26位的。
j指令,跳轉指令,跳到target給出的目標地址,高地址4位由PC給出,低地址由addr給出,二者拼接成為32位地址。addr是26位,通過左移兩位成28位,因為所有指令在內存中都是4字節對齊的,因此最低的2個比特位是無需存儲的,最低為“00”。
jal指令與jr指令與子程序調用返回有關系。jr指令是使用寄存器跳轉是R型指令。jal進行函數調用,函數完成后要返回到指令之前進行的位置,所以要把跳轉之前的下一條指令的地址存儲起來,即將PC+4存到寄存器中。
regrt:控制將結果寫到Rt還是Rd中 jal:控制是否進行函數調用,若進行調用,將PC的值存到寄存器中