本节主要介绍了指令集结构的基本概念及其寻址方式
指令集结构概述
指令集:一些指令的集合,每条指令都是直接由CPU硬件执行
指令的表示方式:
- 二进制表示
- 物理存储空间组织方式是位、字节、字和多字等
- 当前的指令字长有:16、32、64位
- 可变长格式和固定长度格式
指令的特点:
- 指令由操作码和地址码组成
- 每个操作需要的操作数个数为0~3个不等
- 操作数是一些存储单元的地址
- 典型的存储单元通常有:主存、寄存器、堆栈和累加器
- 操作数地址隐含表示或显式表示
指令集与计算机的性能:
$$
T_{CPU}=CPI\times IC \times T_{CLK}
$$
通用寄存器型指令集结构(GPR)
- CPU中用来存储操作数的存储单元主要有:
- 堆栈
- 累加器
- 一组寄存器
- 指令中的操作数可以被明确地显示给出,也可以按照某种约定隐式给出
- 通用寄存器型指令集结构的主要优点:
- 在表达式求值方面,比其他类型指令集结构都具有更大的灵活性
- 寄存器可以用来存放变量
- 减少存储器的通信量,加快程序的执行速度(因为寄存器比存储器快)
- 可以用更少的地址位来寻址寄存器,从而可以有效改进程序的目标代码大小
指令集的寻址
1.寻址技术
- 在通用寄存器型指令集结构中,一般是利用寻址方式指明指令中的操作数是一个常数、一个寄存器操作数,又或是一个存储器操作数
- 寻址实际上是从形式地址到实际地址的转换,形式地址由指令描述,实际地址也称为有效地址
- 有效地址指明的是存储器单元的地址或寄存器地址
- 必须加速有效地址生成
2.常用的一些操作数寻址方式
寄存器寻址:
- 指令实例:Add R4,R3
- 含义:Regs[R4]<-Regs[R4]+Regs[R3]
立即值寻址:
- 指令实例:Add R4,#3
- 含义:Regs[R4]<-Regs[R4]+3
偏移寻址:
- 指令实例:Add R4,100(R1)
- 含义:Regs[R4]<-Regs[R4]+Mem[100+Regs[R1]]
寄存器间接寻址:
- 指令实例:Add R4,(R1)
- 含义:Regs[R4]<-Regs[R4]+Mem[Regs[R1]]
索引寻址:
- 指令实例:Add R3,(R1+R2)
- 含义:Regs[R3]<-Regs[R3]+Mem[Regs[R1]+Regs[R2]]
直接寻址或绝对寻址:
- 指令实例:Add R1,(1001)
- 含义:Regs[R1]<-Regs[R1]+Mem[1001]
存储器间接寻址:
- 指令实例:Add R1,@(R3)
- 含义:Regs[R1]<-Regs[R1]+Mem[Mem[Regs[R3]]]
自增寻址:
- 指令实例:Add R1,(R2)+
- 含义:
- Regs[R1]<-Regs[R1]+Mem[Regs[R2]]
- Regs[R2]<-Regs[R2]+d
- d代表R2所占的字节个数
自减寻址:
- 指令实例:Add R1,-(R2)
- 含义:
- Regs[R2]<-Regs[R2]-d
- Regs[R1]<-Regs[R1]+Mem[Regs[R2]]
缩放寻址:
- 指令实例:Add R1,100(R2)[R3]
- 含义:Regs[R1]<-Regs[R1]+Mem[100+Regs[R2]+Regs[R3]*d]
MIPS指令集结构
寄存器:
- 32个32位的通用寄存器(GPRs),寄存器R0的内容恒为全0
- 32个32位浮点寄存器(FPRS),单精度浮点数表示和双精度浮点数表示
数据类型:
- 整型数据:8位、16位、32位
- 浮点数据:
- 32位单精度浮点
- 64位双精度浮点
操作类型:
- 符号“<-”表示数据传送操作,其后附带一个下标n,也即“<-n”表示传送一个n位数据
- 符号”##”用来表示两个域的串联操作,它可以出现在数据传送操作的任何一边
域的下表用来表明从该域中选择一位,域中位的标记是从最高位开始标记,并且起始标记为0
上标表示复制一个域,如$0^{24}$可以得到一个24位全为0的一个域