精简指令集(MIPS为例)常用指令特点及其格式
精简指令集(MIPS为例)常用指令特点及其格式
一、指令集
指令集是指一台计算机的全部指令;不同的计算机有不同的指令集,但是在许多方面都有共同之处。早期的计算机有非常简单的指令集:实现简单,许多现代计算机也有简单的指令集。因此,指令集具有精简指令集(RISC)与复杂指令集(CISC)之分,本文主要介绍精简指令集,并以其中的MIPS为例展开。
二、设计原则
设计原则1: 简单源于规整
规整使得实现更简单
简单使得以较低成本实现更高性能成为可能
设计原则2: 越小越快
设计原则3: 加速执行常用操作
小常数出现频率高
立即数操作避免load指令
设计原则4:优秀的设计需要适宜的折中方案
不同的指令格式使译码变得复杂, 但是允许所有指令统一32-bit 字长
使格式尽可能相似
三、常用指令
常用指令汇总
add rd,rs,rt
rd=rs+rt;
sub rd,rs,rt
rd=rs-rt;
addi rt,rs,constant
rt=rs+constant;
lw rt,rs,constant
rt=Address(rs+constant/4);//Address(rs+constant/4)表示:rs对应的数组,索引为constant/4的取值
lw rt,rs,constant
Address(rs+constant/4)=rt;
sll rt,rs,constant
rt=rs<<4;
srl rt,rs,constant
rt=rs>>4;
and rd,rs,rt
rd=rs&rt;//按位与,还有andi
or rd,rs,rt
rd=rs|rt;//按位或,还有ori
nor rd,rs,rt//rt取$zero
rd=rs~rt;//按位取反
beq rs,rt,L1
if (rs == rt) 分支跳转到指令L1;
bne rs, rt, L1
if (rs != rt) 分支跳转到指令L1;
j L1
无条件跳转到指令 L1
slt rd,rs,rt
if (rs<rt) rd=1; else rd=0;
slti rt,rs,constant
if (rs<constant) rt=1; else rt=0;
带符号数比较:slt, slti
无符号数比较:sltu, sltiu
例如:
$s0 = 1111 1111 1111 1111 1111 1111 1111 1111
$s1 = 0000 0000 0000 0000 0000 0000 0000 0001
slt $t0,$s0,$s1 # signed
–1 < +1 ===> $t0 = 1
sltu $t0,$s0,$s1 # unsigned
+4,294,967,295 > +1 ===> $t0 = 0
jal 过程标签l
跳转到目标地址
jr $ra
复制 $ra的内容到程序计数器PC
lb rt, offset(rs) lh rt, offset(rs)
在 rt中用符号位扩展到32 bits
lbu rt, offset(rs) lhu rt, offset(rs)
在 rt中用0扩展到32 bits
sb rt, offset(rs) sh rt, offset(rs)
只存储最右边的字节/半字
lui rt, constant
复制16-bit 常数值 到rt的高16位,将rt 的低16位清为 0
链接取数:ll rt, offset(rs)
条件存数:sc rt, offset(rs)
寄存器用法
$a0 – $a3:参数寄存器 (reg’s 4 – 7)
$v0, $v1:结果值寄存器(reg’s 2 and 3)
$t0 – $t9:临时寄存器,用于存储临时值,可以由被调用者重写
$s0 – $s7:保留寄存器,用于存储变量,必须由被调用者保存/恢复
$gp:静态数据的全局指针(reg 28)
$sp:栈指针(reg 29)
$fp:帧指针(reg 30)
$ra:返回地址(reg 31)
过程调用步骤
1.将参数放在寄存器中
2.将控制转移给过程
3.获得过程所需的存储资源
4.执行过程的操作
5.将结果放在调用者可以访问到的寄存器
6.返回调用点
四、32位指令格式
R-格式指令
op:操作码(opcode)
rs:第一源操寄存器号
rt:第二源操寄存器号
rd:目的寄存器号
shamt:移位的位数(其它指令为00000)
funct:功能码(扩展操作码)
I-格式指令
立即数运算和load/store指令
rt:源寄存器号(store指令)或目的寄存器号(立即数运算和load指令)
立即数:–215 — +215 – 1
地址:rs中的基地址加上偏移量
J-格式指令
跳转 (j和jal) 目标地址可以是代码段的任意位置
上一篇: iOS CPU架构(ARM指令集)
下一篇: ARM指令集(未完待续)