欢喜密探洪二妞与五尺:MIPS 指令集(共31条)

来源:百度文库 编辑:偶看新闻 时间:2024/04/24 07:13:59
助记符
指令格式
示例
示例含义
操作及其解释
Bit #
31..26
25..21
20..16
15..11
10..6
5..0
R-type
op
rs
rt
rd
shamt
func
add
000000
rs
rt
rd
00000
100000
add $1,$2,$3
$1=$2+$3
rd <- rs + rt   ;其中rs=$2,rt=$3, rd=$1
addu
000000
rs
rt
rd
00000
100001
addu $1,$2,$3
$1=$2+$3
rd <- rs + rt   ;其中rs=$2,rt=$3, rd=$1,无符号数
sub
000000
rs
rt
rd
00000
100010
sub $1,$2,$3
$1=$2-$3
rd <- rs - rt   ;其中rs=$2,rt=$3, rd=$1
subu
000000
rs
rt
rd
00000
100011
subu $1,$2,$3
$1=$2-$3
rd <- rs - rt   ;其中rs=$2,rt=$3, rd=$1,无符号数
and
000000
rs
rt
rd
00000
100100
and $1,$2,$3
$1=$2 & $3
rd <- rs & rt   ;其中rs=$2,rt=$3, rd=$1
or
000000
rs
rt
rd
00000
100101
or $1,$2,$3
$1=$2 | $3
rd <- rs | rt   ;其中rs=$2,rt=$3, rd=$1
xor
000000
rs
rt
rd
00000
100110
xor $1,$2,$3
$1=$2 ^ $3
rd <- rs xor rt   ;其中rs=$2,rt=$3, rd=$1(异或)
nor
000000
rs
rt
rd
00000
100111
nor $1,$2,$3
$1=~($2 | $3)
rd <- not(rs | rt)   ;其中rs=$2,rt=$3, rd=$1(或非)
slt
000000
rs
rt
rd
00000
101010
slt $1,$2,$3
if($2<$3)
$1=1 else
$1=0
if (rs < rt) rd=1 else rd=0 ;其中rs=$2,rt=$3, rd=$1
sltu
000000
rs
rt
rd
00000
101011
sltu $1,$2,$3
if($2<$3)
$1=1 else
$1=0
if (rs < rt) rd=1 else rd=0 ;其中rs=$2,rt=$3, rd=$1
(无符号数)
sll
000000
00000
rt
rd
shamt
000000
sll $1,$2,10
$1=$2<<10
rd <- rt << shamt  ;shamt存放移位的位数,
也就是指令中的立即数,其中rt=$2, rd=$1
srl
000000
00000
rt
rd
shamt
000010
srl $1,$2,10
$1=$2>>10
rd <- rt >> shamt ;(logical) ,其中rt=$2, rd=$1
sra
000000
00000
rt
rd
shamt
000011
sra $1,$2,10
$1=$2>>10
rd <- rt >> shamt  ;(arithmetic) 注意符号位保留
其中rt=$2, rd=$1
sllv
000000
rs
rt
rd
00000
000100
sllv $1,$2,$3
$1=$2<<$3
rd <- rt << rs  ;其中rs=$3,rt=$2, rd=$1
srlv
000000
rs
rt
rd
00000
000110
srlv $1,$2,$3
$1=$2>>$3
rd <- rt >> rs  ;(logical)其中rs=$3,rt=$2, rd=$1
srav
000000
rs
rt
rd
00000
000111
srav $1,$2,$3
$1=$2>>$3
rd <- rt >> rs  ;(arithmetic) 注意符号位保留
其中rs=$3,rt=$2, rd=$1
jr
000000
rs
00000
00000
00000
001000
jr $31
goto $31
PC <- rs
I-type
op
rs
rt
immediate
addi
001000
rs
rt
immediate
addi $1,$2,100
$1=$2+100
rt <- rs + (sign-extend)immediate ;其中rt=$1,rs=$2
addiu
001001
rs
rt
immediate
addiu $1,$2,100
$1=$2+100
rt <- rs + (zero-extend)immediate ;其中rt=$1,rs=$2
andi
001100
rs
rt
immediate
andi $1,$2,10
$1=$2 & 10
rt <- rs & (zero-extend)immediate ;其中rt=$1,rs=$2
ori
001101
rs
rt
immediate
andi $1,$2,10
$1=$2 | 10
rt <- rs | (zero-extend)immediate ;其中rt=$1,rs=$2
xori
001110
rs
rt
immediate
andi $1,$2,10
$1=$2 ^ 10
rt <- rs xor (zero-extend)immediate ;其中rt=$1,rs=$2
lui
001111
00000
rt
immediate
lui $1,100
$1=100*65536
rt <- immediate*65536 ;将16位立即数放到目标寄存器高16
位,目标寄存器的低16位填0
lw
100011
rs
rt
immediate
lw $1,10($2)
$1=memory[$2
+10]
rt <- memory[rs + (sign-extend)immediate] ;rt=$1,rs=$2
sw
101011
rs
rt
immediate
sw $1,10($2)
memory[$2+10]
=$1
memory[rs + (sign-extend)immediate] <- rt ;rt=$1,rs=$2
beq
000100
rs
rt
immediate
beq $1,$2,10
if($1==$2)
goto PC+4+40
if (rs == rt) PC <- PC+4 + (sign-extend)immediate<<2
bne
000101
rs
rt
immediate
bne $1,$2,10
if($1!=$2)
goto PC+4+40
if (rs != rt) PC <- PC+4 + (sign-extend)immediate<<2
slti
001010
rs
rt
immediate
slti $1,$2,10
if($2<10)
$1=1 else
$1=0
if (rs <(sign-extend)immediate) rt=1 else rt=0 ;
其中rs=$2,rt=$1
sltiu
001011
rs
rt
immediate
sltiu $1,$2,10
if($2<10)
$1=1 else
$1=0
if (rs <(zero-extend)immediate) rt=1 else rt=0 ;
其中rs=$2,rt=$1
J-type
op
address
j
000010
address
j 10000
goto 10000
PC <- (PC+4)[31..28],address,0,0   ;address=10000/4
jal
000011
address
jal 10000
$31<-PC+4;
goto 10000
$31<-PC+4;PC <- (PC+4)[31..28],address,0,0
;address=10000/4
注意:因为MIPS16只有16个16位的寄存器,所以JAL指令中$31改成$15, 所有立即数均无需扩展,LUI指令直接就是将立即数付给RT寄存器。