『第 15 楼』:
 
 
使用 LLM 解释/回答一下
  
MIPS 指令集(共31条) 
标签: 扩展 
2011-08-30 10:06 38334人阅读 评论(1) 收藏 举报 
 分类: MIPS(3)   
  
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 
 
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
  
 
 rt <- memory ;rt=$1,rs=$2 
 
sw 
 
101011 
 
rs 
 
rt 
 
immediate 
 
 sw $1,10($2) 
 
 memory 
 =$1 
 
 memory <- 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),address,0,0   ;address=10000/4 
 
jal 
 
000011 
 
address 
 
 jal 10000 
 
 $31<-PC+4; 
 goto 10000 
 
 $31<-PC+4;PC <- (PC+4),address,0,0 
   ;address=10000/4 
 
注意:因为MIPS16只有16个16位的寄存器,所以JAL指令中$31改成$15, 所有立即数均无需扩展,LUI指令直接就是将立即数付给RT寄存器。 
 
 Last edited by zzz19760225 on 2017-6-14 at 01:43 ] 
MIPS Instruction Set (Total 31 Instructions) 
Tags: Extension 
2011-08-30 10:06 38334 views Comment(1) Favorite Report 
Category: MIPS (3)   
 
MIPS Instruction Set (Total 31 Instructions) 
MIPS Instruction Set (Total 31 Instructions) 
 
Mnemonics 
 
Instruction Format 
 
Example 
 
Example Meaning 
 
Operation and Explanation 
 
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 ;where rs=$2, rt=$3, rd=$1 
 
addu 
 
000000 
 
rs 
 
rt 
 
rd 
 
00000 
 
100001 
 
 addu $1,$2,$3 
 
 $1=$2+$3 
 
 rd <- rs + rt ;where rs=$2, rt=$3, rd=$1, unsigned number 
 
sub 
 
000000 
 
rs 
 
rt 
 
rd 
 
00000 
 
100010 
 
 sub $1,$2,$3 
 
 $1=$2-$3 
 
 rd <- rs - rt ;where rs=$2, rt=$3, rd=$1 
 
subu 
 
000000 
 
rs 
 
rt 
 
rd 
 
00000 
 
100011 
 
 subu $1,$2,$3 
 
 $1=$2-$3 
 
 rd <- rs - rt ;where rs=$2, rt=$3, rd=$1, unsigned number 
 
and 
 
000000 
 
rs 
 
rt 
 
rd 
 
00000 
 
100100 
 
 and $1,$2,$3 
 
 $1=$2 & $3 
 
 rd <- rs & rt ;where rs=$2, rt=$3, rd=$1 
 
or 
 
000000 
 
rs 
 
rt 
 
rd 
 
00000 
 
100101 
 
 or $1,$2,$3 
 
 $1=$2 | $3 
 
 rd <- rs | rt ;where rs=$2, rt=$3, rd=$1 
 
xor 
 
000000 
 
rs 
 
rt 
 
rd 
 
00000 
 
100110 
 
 xor $1,$2,$3 
 
 $1=$2 ^ $3 
 
 rd <- rs xor rt ;where rs=$2, rt=$3, rd=$1 (XOR) 
 
nor 
 
000000 
 
rs 
 
rt 
 
rd 
 
00000 
 
100111 
 
 nor $1,$2,$3 
 
 $1=~($2 | $3) 
 
 rd <- not(rs | rt) ;where rs=$2, rt=$3, rd=$1 (NOR) 
 
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 ;where 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 ;where rs=$2, rt=$3, rd=$1 
  (unsigned number) 
 
sll 
 
000000 
 
00000 
 
rt 
 
rd 
 
shamt 
 
000000 
 
 sll $1,$2,10 
 
 $1=$2<<10 
 
 rd <- rt << shamt ;shamt stores the number of shifts, 
  that is, the immediate in the instruction, where rt=$2, rd=$1 
 
srl 
 
000000 
 
00000 
 
rt 
 
rd 
 
shamt 
 
000010 
 
 srl $1,$2,10 
 
 $1=$2>>10 
 
 rd <- rt >> shamt ;(logical) , where rt=$2, rd=$1 
 
sra 
 
000000 
 
00000 
 
rt 
 
rd 
 
shamt 
 
000011 
 
 sra $1,$2,10 
 
 $1=$2>>10 
 
 rd <- rt >> shamt ;(arithmetic) Note that the sign bit is retained 
  where rt=$2, rd=$1 
 
sllv 
 
000000 
 
rs 
 
rt 
 
rd 
 
00000 
 
000100 
 
 sllv $1,$2,$3 
 
 $1=$2<<$3 
 
 rd <- rt << rs ;where rs=$3, rt=$2, rd=$1 
 
srlv 
 
000000 
 
rs 
 
rt 
 
rd 
 
00000 
 
000110 
 
 srlv $1,$2,$3 
 
 $1=$2>>$3 
 
 rd <- rt >> rs ;(logical) where rs=$3, rt=$2, rd=$1 
 
srav 
 
000000 
 
rs 
 
rt 
 
rd 
 
00000 
 
000111 
 
 srav $1,$2,$3 
 
 $1=$2>>$3 
 
 rd <- rt >> rs ;(arithmetic) Note that the sign bit is retained 
  where 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 ;where rt=$1, rs=$2 
 
addiu 
 
001001 
 
rs 
 
rt 
 
immediate 
 
addiu $1,$2,100 
 
 $1=$2+100 
 
 rt <- rs + (zero-extend)immediate ;where rt=$1, rs=$2 
 
andi 
 
001100 
 
rs 
 
rt 
 
immediate 
 
 andi $1,$2,10 
 
 $1=$2 & 10 
 
 rt <- rs & (zero-extend)immediate ;where rt=$1, rs=$2 
 
ori 
 
001101 
 
rs 
 
rt 
 
immediate 
 
 andi $1,$2,10 
 
 $1=$2 | 10 
 
 rt <- rs | (zero-extend)immediate ;where rt=$1, rs=$2 
 
xori 
 
001110 
 
rs 
 
rt 
 
immediate 
 
 andi $1,$2,10 
 
 $1=$2 ^ 10 
 
 rt <- rs xor (zero-extend)immediate ;where rt=$1, rs=$2 
 
lui 
 
001111 
 
00000 
 
rt 
 
immediate 
 
 lui $1,100 
 
 $1=100*65536 
 
 rt <- immediate*65536 ;Put the 16-bit immediate in the high 16 bits of the destination register 
         The low 16 bits of the destination register are filled with 0 
 
lw 
 
100011 
 
rs 
 
rt 
 
immediate 
 
 lw $1,10($2) 
 
 $1=memory
  
 
 rt <- memory ;rt=$1, rs=$2 
 
sw 
 
101011 
 
rs 
 
rt 
 
immediate 
 
 sw $1,10($2) 
 
 memory 
 =$1 
 
 memory <- 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 ; 
   where 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 ; 
  where rs=$2, rt=$1 
 
J-type 
 
op 
 
address 
 
  
 
  
 
  
 
j 
 
000010 
 
address 
 
 j 10000 
 
 goto 10000 
 
 PC <- (PC+4),address,0,0 ;address=10000/4 
 
jal 
 
000011 
 
address 
 
 jal 10000 
 
 $31<-PC+4; 
 goto 10000 
 
 $31<-PC+4;PC <- (PC+4),address,0,0 
   ;address=10000/4 
 
Note: Since MIPS16 has only 16 16-bit registers, the $31 in the JAL instruction is changed to $15, and all immediates do not need to be extended. The LUI instruction directly assigns the immediate to the RT register. 
 
 Last edited by zzz19760225 on 2017-6-14 at 01:43 ] 
    
 
  
  |