1.概述
指令系统:指一台计算机所具有的
全部机器指令的集合
,反映了该计算机所拥有的基本功能,是计算机硬件的语言系统,也被称为机器语言
- CISC与RISC指令系统的特点及区别
CISC | RISC |
---|---|
指令系统庞大,软件硬化 | 指令系统简单 |
指令格式和寻址方式多样性 | 指令长度固定,指令格式,寻址方式种类少 |
编译程序复杂,程序编译速度慢 | 优先选取高频简单指令,避免复杂指令 |
大多数指令功能复杂 | 各字段划分比较一致,功能也比较规整 |
各种指令都可访问存储器 | 只有LOAD,STORE指令可访问存储器 |
绝大多数指令需多个机器周期完成 | 多数指令一个机器周期内完成 |
控制单元设计采用微程序控制技术 | 控制单元设计采用硬布线控制逻辑 |
各种指令使用频度相差悬殊 | CPU使用流水线结构 |
难以调试维护,可靠性差 | 采用编译优化技术,减少程序执行时间 |
-
指令系统的设计原则
- 完整性:要求通用计算机应具备完善的指令功能
- 规整性:所有运算部件都能等同地访问所有数据存储单元
- 高效性:利用该指令系统编写的程序能够高效率地运行
- 兼容性:通常只能做到
向上兼容
,向后兼容
-
地址空间
- 三地址空间:通用寄存器,主存储器,输入输出设备分别进行
独立编址
- 二地址空间:通用寄存器独立编址,主存和I/O设备统一编址,
优点:能够简化指令系统
,不必另外设置输入输出指令
,所有能访问主存的指令都能访问I/O设备
缺点:所有访问主存的指令都需通过地址译码
来判断是否访问I/O设备
,影响指令的执行速度
二地址空间 - 一地址空间:所有设备
统一编址
,地址编码最长,所有能访问寄存器的指令,也能访问主存和I/O设备
一地址空间 - 零地址空间:隐含编址方式,堆栈计算机中有这种方式
- 三地址空间:通用寄存器,主存储器,输入输出设备分别进行
-
独立编址和统一编址的对比
- 独立编址
专用的I/O端口编址,存储器和I/O端口在两个独立的地址空间中- 优点:I/O端口的地址码较短,译码电路简单,存储器同I/O端口的操作指令不同,程序比较清晰;存储器和I/O端口的控制结构相互独立,可以分别设计
- 缺点:需要有专用的I/O指令,程序设计的灵活性较差
- 统一编址
存储器映像编址,存储器和I/O端口共用统一的地址空间,当一个地址空间分配给I/O端口以后,存储器就不能再占有这一部分的地址空间- 优点:不需要专用的I/O指令,任何对存储器数据进行操作的指令都可用于I/O端口的数据操作,程序设计比较灵活;由于I/O端口的地址空间是内存空间的一部分,这样,I/O端口的地址空间可大可小,从而使外设的数量几乎不受限制
- 缺点:I/O端口占用了内存空间的一部分,影响了系统的内存容量;访问I/O端口也要同访问内存一样,由于内存地址较长,导致执行时间增加
- 独立编址
2.编址方式
-
按字编址
- 实现容易简单,每个
编址单位
与设备的访问单位
一致,即每个编址单位所包含的信息量(二进制位数)与访问一次设备所获得的信息量是等同的,早期采用这种方式 - 缺点:对非数值计算支持不足,不支持
字节操作,位操作
,需专门设置字节操作指令,微操作指令
- 实现容易简单,每个
-
按字节编址
- 编址单位是
字节
,与信息的基本单位一致 - 即有字节地址,又有字地址,字节地址一般连续,字地址一般不连续
字地址 = n * 字长 / 8(n = 0,1,2,...) - 每个编址单位所包含的信息量与访问一次存储器所获得的信息量不相同
- 编址单位是
-
字节编址顺序问题
- 小端方式(低字节低地址)
字节地址从左往右逆序
小端方式 - 大端方式(高字节低地址)
字节地址从左往右升序
大端方式
- 小端方式(低字节低地址)
-
数据存放边界对齐问题
- 边界对齐
- 规定了
字节
,半字
,单字
,双字
存放的起始位置 - 优点:访问各种长度的数据都可在
一个存储周期内完成
,读写控制简单
- 缺点:造成
存储空间浪费
,存储空间利用率低
边界对齐
- 规定了
- 边界不对齐:可从
任意位置
开始存储- 不浪费存储空间,不同长度的数据
一个紧接着一个
存放,存储空间利用率高
- 访问双字,单字都有可能
跨越两个字单元
存放,可能需花费两个存储周期
的时间,存储器工作速度降低一倍 - 存储器读写控制复杂
边界不对齐
- 不浪费存储空间,不同长度的数据
- 边界对齐
3.指令格式
- 操作码:给出指令操作性质,即指令要完成的功能
-
地址码:指出操作数的地址,或下一条指令在主存储器中的地址
指令基本格式 - 三地址指令:指令执行后
两个源操作数内容不变
,但指令字长较长- 通常完成 A3 <- (A1)OP(A2)
三地址指令
- 通常完成 A3 <- (A1)OP(A2)
- 二地址指令:两个源地址之一和目的地址结合起来,留下另一个源地址格式保持独立
- 通常完成 A1 <- (A1)OP(A2)
- 优势:通过减少一个地址码字段,可以
减少指令字长度
。可通过增加地址码字段位数,提高可寻址范围
-
缺点:影响了程序的灵活性
二地址指令
- 一地址指令:在二地址指令格式基础上,将源操作数或目的操作数设定到一个
专用寄存器(通常为AC累加器)
中- 通常完成 AC <- (AC)OP(A)
一地址指令
- 通常完成 AC <- (AC)OP(A)
- 零地址指令:源操作数和目的操作数都
内含
在一个处理机堆栈
中,由两个栈顶单元
提供两个源操作数
,结果(目的操作数)存放在栈顶
零地址指令 - 地址码个数选择标准
- 程序所占存储量尽可能小
- 程序的执行速度尽可能快
4.操作码扩展技术
可充分利用指令信息位,有效压缩操作码平均长度
基本思想:当采用定长指令字格式
,且多种地址码结构混合使用
,可利用地址码个数较少的指令空出来的地址码字段,来增加操作码的位数
- 定长操作码: 操作码
OP长度固定
,指令译码结构简单
,浪费信息位
- 变长操作码:操作码
OP长度不固定
,
首先需明确两个原则: - 不允许短码是长码的前缀
- 可表示的指令的操作码一定不能重复
通常用全1作为扩展标志码
,例如下图,4位操作码时,用1111作为扩展标志码,该操作码不表示三地址指令,这样,8位操作码时,操作码高4位全为1表示是因为不允许短码是长码的前缀
,若高4位用从0000~1110之间任一编码,则违反了上述第一个原则,故高位必须是上一长度操作码的扩展标志码,只能从低位开始进行当前操作码长度指令编码,故最多可表示15条二地址指令,12位时,11111111作为扩展标志码,16位操作码时,由于后面没有可扩展的地址空间了,故1111111111111111 可以表示一条零地址指令
5.寻址方式
几个与地址相关的概念
形式地址:指指令中显式给出
的地址
有效地址:也称逻辑地址
,通常指在本程序中的相对地址
,可根据形式地址通过某种变换
得到
即 有效地址 = 形式地址 + 寻址方式
- 指令寻址:
确定下一条将要执行的指令所在主存单元地址的方法
- 顺序寻址:程序计数器
PC+1
,自动形成下一条指令地址,PC初始值
设定为该程序第一条指令
所在主存单元的地址 - 跳跃寻址:
转移类指令
给出下一条指令的地址信息
- 顺序寻址:程序计数器
- 数据寻址
如图,通常在指令地址码字段设置寻址方式子字段
,又称寻址特征字段
,指出具体寻址方式,另一个子字段给出形式地址
,一条指令可能包含多个操作数,各操作数的寻址方式可以不同
一地址指令-
基本寻址方式
根据数据所在位置不同
可分为:-
立即寻址:
操作数
直接在指令地址码字段
给出,即操作数本身设在指令字中- 形式地址 I 不是操作数的地址,而是
操作数本身
,又称立即数
-
#
表示立即寻址特征 - 只能用于
源操作数
寻址 - 作用 :
给寄存器赋初值
,立即数作为常数参与运算
- 有效地址EA 就是
该指令在主存单元的地址
- 特点:只要取出指令,便可立即获得操作数,执行阶段不必再次访问存储器,指令
执行速度快
- 缺点:I 的位数限制了所能表示的
立即数范围
,大量使用立即寻址程序的通用性会下降
立即寻址
- 形式地址 I 不是操作数的地址,而是
-
寄存器寻址 : 指
源操作数
已经在通用寄存器
中,或操作结果
要返回通用寄存器
,源操作数,目的操作数都适用- 形式地址
EA = Ri
,Ri为通用寄存器编号 - 获得操作数
无需访问内存
,指令执行时间短
- 形式地址字段只需指明
寄存器编号
(位数远小于主存单元地址位数),故指令字长短
,节省存储空间
寄存器寻址
- 形式地址
-
存储器寻址
按有效地址形成方式
,可分为:-
直接寻址:地址码字段的
形式地址A
就是操作数或下一条指令的有效地址
- 有效地址
EA = A
-
形成地址无需变换
,获得有效地址比较简单
, - 指令执行期间
需访问一次内存
- 缺点:
指令字长限制了形式地址字段的位数
,故操作数或指令的可寻址范围
比较小
直接寻址
- 有效地址
-
存储器间接寻址
- 形式地址是
操作数地址的地址
- 有效地址
EA = (A)
,括号表示地址A对应存储单元的内容
- 至少
两次或两次以上
访存才可获得操作数(或指令),可多次间接
- 指令中
形式地址码
长度可以很短
,但寻址范围
可以很大
- 寻址范围取决于
主存字长m
- 一次间接寻址的最大寻址范围
2^m字
,两次间接寻址的最大寻址范围2^(m-1)字
(其中一位用来作间接寻址标志位,故为m-1次方
) - 可为程序设计提供很好
灵活性
- 访问不同主存单元数据时,可通过
改变形式地址对应主存单元内容
,而不必改变指令本身
- 缺点:
需多次访问主存
,影响指令执行速度
存储器一次间接寻址 - 多次间接寻址的
寻址标志
问题
第一次间接寻址标志
由指令
给出,以后每次的间接寻址标志由紧接着访问主存所取出来的地址码
给出,如果取出的地址码的间接寻址标志位(通常用最高位
)为1,则表示要用除去标志位后的部分作为地址码
,继续访问主存,直至取出来的间接寻址标志位为0
为止,此时除去间接寻址标志位的地址码即为有效地址
多次间接寻址
多次间接寻址
- 形式地址是
-
寄存器间接寻址
- 有效地址
EA = (Ri)
- 指令中
地址码长度更短
,寄存器间接寻址范围取决于寄存器位数(即机器字长n)
寄存器间接寻址
- 有效地址
-
偏移寻址
- 有效地址
EA = (Ri) + A
,Ri 是专用寄存器
或通用寄存器
编号,形式地址A为偏移量
,是有符号整数
偏移寻址
偏移寻址可分为如下三类:
- 相对寻址
- 有效地址
EA = (PC) + A
,PC为程序计数器 - 地址码字段较短
- 相对寻址范围取决于
偏移量A的位数k
,即寻址范围为:(PC)-2^(k-1) ~ (PC)+2^(K-1) -1(A是有符号数,k位补码表示范围为-2^(k-1) ~ 2^(K-1) -1)
- 特点:只要操作数或下一条指令与当前指令的相对距离不变,无论程序存放在主存中哪段区域都可以正确执行,即有利于程序在内存中浮动 ,可编写与位置无关的代码
- 有效地址
- 变址寻址
- 引用一个
变址寄存器
, - 若采用
专用变址寄存器Rx
,有效地址EA = (Rx) + A
- 若采用
通用寄存器Ri
,有效地址EA = (Ri) + A
- 常用于对数组处理或字符串操作,变址寄存器存放
地址修改量
,形式地址A给出基本地址值(起始地址,无符号整数)
- 操作数地址变化由
变址值增,减量完成
- 寻址范围由
变址寄存器位数n决定
,最大寻址空间2^n字
- 引用一个
- 基址寻址
- 引用一个
基址寄存器Rb
, - 有效地址
EA = (Rb) + A
- 常用于实现操作系统对用户程序的动态定位
- 基址寄存器存放的是
基本地址值
,一旦设定后一般用户不能改变 - 操作数或指令地址变化由不同的偏移量A完成,寻址范围由偏移量位数决定
- 引用一个
- 变址寻址和基址寻址的共同目标是不必修改程序中指令,而达到修改地址码的目的
- 有效地址
-
段寻址:基址寻址的一种特例,用于
地址长度超过机器字长的场合
- 基本思想:将主存空间在逻辑上划分成若干段,一个程序可以占用多个段,对指令或操作数的访问,需指出
所在段
以及段内偏移量
。与机器字长相等的段地址和段内偏移量错位相加,获得更长存储器地址,段地址存放在专用的段地址寄存器Rs中
- 整个段寻址过程由
硬件自动完成
,对用户透明
- 段内偏移量是其他寻址方式形成的有效地址EA
- 段寻址后形成的地址就是
实际的主存单元地址
,即物理地址
- 基本思想:将主存空间在逻辑上划分成若干段,一个程序可以占用多个段,对指令或操作数的访问,需指出
-
-
堆栈寻址:FIFO先进后出
- 寄存器堆栈(硬堆栈)
- 存储器堆栈(软堆栈):在主存开辟一块区域,一端固定称为
栈底
,另一端浮动称为栈顶
-
复合寻址方式:将
两种以上
寻址方式联合起来使用即复合寻址,关键问题在于地址的计算顺序,一般从名称反映,先按在前的方式进行寻址
-