MIPS指令集與簡要分析

R格式指令

基本格式

標(biāo)記 op rs rt rd shamt funct
位數(shù) 31-26 25-21 20-16 15-11 10-6 5-0
功能 操作符 源操作數(shù)寄存器1 源操作數(shù)寄存器2 目的操作數(shù)寄存器 位移量 操作符附加段

指令

算數(shù)類指令

指令 op rs rt rd shamt funct 功能
add 000000 rs rt rd 00000 100000 rd=rs+rt
addu 000000 rs rt rd 00000 100001 rd=rs+rt(無符號數(shù))
sub 000000 rs rt rd 00000 100010 rd=rs-rt
subu 000000 rs rt rd 00000 100011 rd=rs+rt(無符號數(shù))
slt 000000 rs rt rd 00000 101010 rd=(rs<rt)?1:0
sltu 000000 rs rt rd 00000 101011 rd=(rs<rt)?1:0(無符號數(shù))

邏輯類指令

指令 op rs rt rd shamt funct 功能
and 000000 rs rt rd 00000 100100 rd=rs&rt
or 000000 rs rt rd 00000 100101 rd=rs|rt
xor 000000 rs rt rd 00000 100110 rd=rs xor rd
nor 000000 rs rt rd 00000 100111 rd=!(rs|rt)

位移類指令

指令 op rs rt rd shamt funct 功能
sll 000000 00000 rt rd shamt 000000 rd=rt<<shamt
srl 000000 00000 rt rd shamt 000010 rd=rt>>shamt
sra 000000 00000 rt rd shamt 000011 rd=rt>>shamt(符號位保留)
sllv 000000 rs rt rd 00000 000100 rd=rt<<rs
srlv 000000 rs rt rd 00000 000110 rd=rt>>rs
srav 000000 rs rt rd 00000 000111 rd=rt>>rs(符號位保留)

跳轉(zhuǎn)指令

指令 op rs rt rd shamt funct 功能
jr 000000 rs 00000 00000 00000 001000 PC=rs

I格式指令

基本格式

標(biāo)記 op rs rd im
位數(shù) 31-26 25-21 20-16 15-0
功能 操作符 源操作數(shù)寄存器 目的操作數(shù)寄存器 立即數(shù)

指令

算數(shù)指令

指令 op rs rd im 功能
addi 001000 rs rd im rd=rs+im
addiu 001001 rs rd im rd=rs+im(無符號數(shù))
slti 001010 rs rd im rd=(rs<im)?1:0
sltiu 001011 rs rd im rd=(rs<im)?1:0(無符號數(shù))

邏輯類指令

指令 op rs rd im 功能
andi 001100 rs rd im rd=rs&im
ori 001101 rs rd im rd=rs|im
xori 001110 rs rd im rd=rs xor im

載入類指令

指令 op rs rd im 功能
lui 001111 00000 rd im rt=im*65536
lw 100011 rs rd im rt=memory[rs+im]
sw 101011 rs rd im memory[rs+im]=rt

跳轉(zhuǎn)類指令

指令 op rs rd im 功能
beq 000100 rs rd im PC=(rs==rt)?PC+4+im<<2:PC
bne 000101 rs rd im PC=(rs!=rt)?PC+4+im<<2:PC

J格式指令

基本格式

標(biāo)記 op address
位數(shù) 31-26 25-0
功能 操作符 地址

指令

指令 op address 功能
j 000010 addr PC={(PC+4)[31,28],addr,00}
jal 000011 addr $31=PC;PC={(PC+4)[31,28],addr,00}

指令分析

指令格式

MIPS_order.png

不同格式的指令具有不同的功能,其中:

  • R格式指令為純寄存器指令,所有的操作數(shù)(除移位外)均保存在寄存器中。Op字段均為0,使用funct字段區(qū)分指令
  • I格式指令為帶立即數(shù)的指令,最多使用兩個寄存器,同時包括了load/store指令。使用Op字段區(qū)分指令
  • J格式指令為長跳轉(zhuǎn)指令,僅有一個立即數(shù)操作數(shù)。使用Op字段區(qū)分指令

數(shù)據(jù)通路

以上的指令包括以下幾種與指令有關(guān)的數(shù)據(jù)通路:

  • 指令——寄存器組:R格式指令均為寄存器指令,需要指令提供寄存器地址
  • 指令——運算單元(ALU):運算指令由指令提供運算類型,同時提供參與運算的立即數(shù)和位移量
  • 指令——存儲器:load/store指令的尋址方式僅為寄存器偏移量尋址,需要指令提供立即數(shù)偏移量
  • 指令——PC:J格式指令需要將指令中的立即數(shù)載入PC中

同時還有幾種必備的與指令無關(guān)的數(shù)據(jù)通路:

  • 寄存器組——運算單元(ALU):寄存器組為運算單元提供操作數(shù),運算結(jié)果存在寄存器組中
  • 寄存器組——存儲器:load/store指令的兩端
  • 寄存器組——PC:跳轉(zhuǎn)指令與寄存器組有關(guān)

當(dāng)使用哈弗結(jié)構(gòu)時,數(shù)據(jù)通路框圖如下所示:

MIPS_dataflow.png

流水線劃分

若使用流水線實現(xiàn),可以將流水線劃分為:取指->譯碼->準(zhǔn)備操作數(shù)->執(zhí)行->回寫四個階段:

  • 取指階段:按PC從指令寄存器中取出完整的32位指令,之后PC自增
  • 譯碼階段:按指令的高6位(Op字段)將指令解釋為相應(yīng)的格式
  • 準(zhǔn)備操作數(shù)階段:按指令中的對應(yīng)字段準(zhǔn)備操作數(shù),包括:計算地址(load/store指令),取出寄存器中的操作數(shù)置于數(shù)據(jù)總線(寄存器指令),計算PC值(跳轉(zhuǎn)指令)等
  • 執(zhí)行階段:執(zhí)行指令,包括:訪問存儲器(load/store指令),ALU運算(計算類指令),刷新PC值(跳轉(zhuǎn)指令)等
  • 回寫階段:將結(jié)果存入寄存器中,包括:ALU的運算結(jié)果(計算類指令),訪存結(jié)果(load指令),原PC值(帶返回跳轉(zhuǎn)指令)等
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容