MIPS寄存器和指令总结


每次学计组的时候总要去查MIPS的寄存器和指令,索性自己总结了如下的知识点,方便之后查看


32个通用寄存器

Register Name Usage
$0 $zero 常量0(constant value 0)
$1 $at 保留给汇编器(Reserved for assembler)
$2-$3 v 0 v0- v1 函数调用返回值(values for results and expression evaluation)
$4-$7 a 0 a0- a3 函数调用参数(arguments)
$8-$15 t 0 t0- t7 暂时的(或随便用的)
$16-$23 s 0 s0- s7 保存的(或如果用,需要SAVE/RESTORE的)(saved)
$24-$25 t 8 t8- t9 暂时的(或随便用的)
$28 $gp 全局指针(Global Pointer)
$29 $sp 堆栈指针(Stack Pointer)
$30 $fp 帧指针(Frame Pointer)
$31 $ra 返回地址(return address)

32个寄存器(详细)

Register Name Number Usage
$zero 0 Constant 0
$at 1 Reserved for assembler
$v0 2 Expression evaluation and results of a function
$v1 3 Expression evaluation and results of a function
$a0 4 Argument 1
$a1 5 Argument 2
$a2 6 Argument 3
$a3 7 Argument 4
$t0 8 Temporary (not preserved across call)
$t1 9 Temporary (not preserved across call)
$t2 10 Temporary (not preserved across call)
$t3 11 Temporary (not preserved across call)
$t4 12 Temporary (not preserved across call)
$t5 13 Temporary (not preserved across call)
$t6 14 Temporary (not preserved across call)
$t7 15 Temporary (not preserved across call)
$s0 16 Saved temporary (preserved across call)
$s1 17 Saved temporary (preserved across call)
$s2 18 Saved temporary (preserved across call)
$s3 19 Saved temporary (preserved across call)
$s4 20 Saved temporary (preserved across call)
$s5 21 Saved temporary (preserved across call)
$s6 22 Saved temporary (preserved across call)
$s7 23 Saved temporary (preserved across call)
$t8 24 Temporary (not preserved across call)
$t9 25 Temporary (not preserved across call)
$k0 26 Reserved for OS kernel
$k1 27 Reserved for OS kernel
$gp 28 Pointer to global area
$sp 29 Stack pointer
$fp or s8 30 Frame pointer
$ra 31 Return address (used by function call)

MIPS指令集(31条)

助记符 用法 解释 注释
R-type
add add $1,$2,$3 $1=$2+$3 其中rs=$2,rt=$3, rd=$1
addu addu $1,$2,$3 $1=$2+$3 其中rs=$2,rt=$3, rd=$1,无符号数
sub sub $1,$2,$3 $1=$2-$3 其中rs=$2,rt=$3, rd=$1
subu subu $1,$2,$3 $1=$2-$3 其中rs=$2,rt=$3, rd=$1,无符号数
and and $1,$2,$3 $1=$2 & $3 其中rs=$2,rt=$3, rd=$1
or or $1,$2,$3 $1=$2 | $3 其中rs=$2,rt=$3, rd=$1
xor xor $1,$2,$3 $1=$2 ^ $3 其中rs=$2,rt=$3, rd=$1(异或)
nor nor $1,$2,$3 $1=~($2|$3) ;其中rs=$2,rt=$3, rd=$1(或非)
slt 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 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 sll $1,$2,10 $1=$2<<10 rd <- rt << shamt ;shamt存放移位的位数, 也就是指令中的立即数,其中rt=$2, rd=$1
srl srl $1,$2,10 $1=$2>>10 rd <- rt >> shamt ;(logical) ,其中rt=$2, rd=$1
sra sra $1,$2,10 $1=$2>>10 rd <- rt >> shamt ;(arithmetic) 注意符号位保留 其中rt=$2, rd=$1
sllv sllv $1,$2,$3 $1=$2<<$3 rd <- rt << rs ;其中rs=$3,rt=$2, rd=$1
srlv srlv $1,$2,$3 $1=$2>>$3 rd <- rt >> rs ;(logical)其中rs=$3,rt=$2, rd=$1
srav srav $1,$2,$3 $1=$2>>$3 rd <- rt >> rs ;(arithmetic) 注意符号位保留 其中rs=$3,rt=$2, rd=$1
jr jr $31 goto $31 PC <- rs
I-type
addi addi $1,$2,100 $1=$2+100 rt <- rs + (sign-extend)immediate ;其中rt=$1,rs=$2
addiu addiu $1,$2,100 $1=$2+100 rt <- rs + (zero-extend)immediate ;其中rt=$1,rs=$2
andi andi $1,$2,10 $1=$2 & 10 rt <- rs & (zero-extend)immediate ;其中rt=$1,rs=$2
ori andi $1,$2,10 $1=$2 | 10 rt <- rs | (zero-extend)immediate ;其中rt=$1,rs=$2
xori andi $1,$2,10 $1=$2 ^ 10 rt <- rs xor (zero-extend)immediate ;其中rt=$1,rs=$2
lui lui $1,100 $1=100*65536 rt <- immediate*65536 ;将16位立即数放到目标寄存器高16 位,目标寄存器的低16位填0
lw lw $1,10($2) $1=memory[$2 +10] rt <- memory[rs + (sign-extend)immediate] ;rt=$1,rs=$2
sw sw $1,10($2) memory[$2+10] =$1 memory[rs + (sign-extend)immediate] <- rt ;rt=$1,rs=$2
beq beq $1,$2,10 if($1==$2) goto PC+4+40 if (rs == rt) PC <- PC+4 + (sign-extend)immediate<<2
bne bne $1,$2,10 if($1!=$2) goto PC+4+40 if (rs != rt) PC <- PC+4 + (sign-extend)immediate<<2
slti 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 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
j j 10000 goto 10000 PC <- (PC+4)[31…28],address,0,0 ;address=10000/4
jal jal 10000 $31<-PC+4; goto 10000 $31<-PC+4;PC <- (PC+4)[31…28],address,0,0 ;address=10000/4

其他指令

助记符 用法 解释 注释
bnez bnez $t0 ,trylk if $t0 != 0 ,goto trylk
beqz beqz $t0 ,trylk if $t0 ==0, goto trylk
伪指令
not not $1,$2 对应MIPS,nor $1, 2 , 2, zero 或非操作
move move $1,$2 对应MIPS , or $1, 2 , 2, zero
li li $1,$2 对应MIPS,ori 1 , 1, zero,c c为16位立即数

会不断更新~

若有错误,不吝指正~

发布了40 篇原创文章 · 获赞 57 · 访问量 2763

猜你喜欢

转载自blog.csdn.net/weixin_44984664/article/details/104970433
今日推荐