您的位置:首页 > 其它

MIPS 指令集格式

2015-10-30 21:16 267 查看
参考链接

MIPS 指令集(共31条)
MIPS 指令集(共31条)
助记符
指令格式
示例
示例含义
操作及其解释
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
4000
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寄存器。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  体系结构