MIPS匯編指令集


MIPS有三種指令格式:

R型

6 5 5 5 5 6
op rs rt rd shamt funct

 

 

功能:寄存器-寄存器ALU操作 (算術運算,邏輯運算)

I型

6 5 5 16
op rs rt 立即數操作

 

 

功能:條件分支,跳轉

J型

6 26
op 跳轉地址

 

 

功能:跳轉

MIPS常用指令集

lb / lh / lw :      從存儲器中讀取一個byte/half word/word的數據到寄存器中.

sb/sh/sw:        把一個byte/half word/word的數據從寄存器存儲到存儲器中

mov/movz/movn              復制,n為負,z為零。mov $1,$2; movz $1,$2,$3($3為零則復制$2到$1)。
trap                                   根據地址向量轉入管態。 
eret                                  從異常中返回到用戶態。

算術類:
add/addu:       把兩個定點寄存器的內容相加;u為不帶符號加,如 rd = rs + rt

addi/addiu:     把一個寄存器的內容加上一個立即數;u為不帶符號加。 rd = rs + im
sub/subu:    把兩個定點寄存器的內容相減。 rd = rs - rt
div/divu        兩個定點寄存器的內容相除。 
mul/mulu      兩個定點寄存器的內容相乘。 

slt/slti/sltui:    如果rs的值小於rt,那么設置rd的值為1,否則設置rd的值為0。 rd = (rs < rt) ? 1 : 0  ; rd = (rs < im) ? 1 : 0

邏輯類:
and/andi:        與運算,兩個寄存器中的內容相與 ;i為立即數。 rd = rs & rt ; rd = rs & im
or/ori             或運算。  rd = rs | rt ; rd = rs | im
xor/xori:         異或運算。  rd = rs ^ rt ;rd = rs ^ im

nor/nori:         取反運算。 rd = !(rs | rt)

跳轉類:
j/jr/jal/jalr                           j直接跳轉  PC = { (PC+4) [31,28] , addr, 00};jr使用寄存器跳轉 PC = rs; jal    $31 = PC;PC = {(PC+4) [31,28],addr,00}

beq/beqz/benz/bne           條件轉移eq相等,z零,ne不等。  beq ,  PC = (rs == rt) ?  PC+4+im << 2  :   PC  ;  bne ,  PC = (rs != rt) ?  PC+4+im << 2  :   PC 

載入類:
lui                                     把一個16位的立即數填入到寄存器的高16位,低16位補零。 rt = im * 65536(2^16)

lw:                                        rt = memory[ rs + im]

sw:                                       memory[ rs + im] = rt

位移類:
sll/srl:                                  邏輯左移/右移。  rd = rs << shamt  ; rd = rs >> shamt 

32個通用寄存器

MIPS下一共有32個通用寄存器 ;在匯編中,寄存器標志由$符開頭。寄存器表示可以有兩種方式:直接使用該寄存器對應的編號,例如:從$0到$31;使用對應的寄存器名稱,例如:$t1, $sp。

0       ($zero)      : 永遠返回值為0 
1       ($at)          : 用做匯編器的暫時變量 
2-3    ($v0-$v1)  : 子函數調用返回結果 
4-7    ($a0-$a3)  : 子函數調用的參數 
8-15  ($t0-$t7)    : 暫時變量,子函數使用時不需要保存與恢復 
16-23($s0-$s7)  : 子函數寄存器變量。子函數必須保存和恢復使用過的變量在函數返回之前,從而調用函數知道這些寄存器的值沒有變化。 
24-25($t8-$t9)    : 暫時變量,子函數使用時不需要保存與恢復 
26-27($k0-$k1)  : 通常被中斷或異常處理程序使用作為保存一些系統參數 
28     ($gp)        : 全局指針。一些運行系統維護這個指針來更方便的存取“static“和”extern”變量。 
29     ($sp)        : 堆棧指針 
30     ($s8/$fp)  : 第9個寄存器變量。子函數可以用來做棧指針 
31     ($ra)         : 子函數的返回地 
cp0                    :協處理器0,MIPS對CPU的控制用cp0完成

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM