精简指令集(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  # signed1 < +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) 目标地址可以是代码段的任意位置

猜你喜欢

转载自blog.csdn.net/hyl1181/article/details/107746124