指令系统
概述
指令是计算机处理的最基本单位,采取多周期实现方案
操作码 + 操作数
取指令,译码/取寄存器,执行/有效地址/完成分支,访问内存,存储结果
指令表示
指令由一个位串来表示
指令格式:对于指令的个要素,这个位串划分成几个字段
- 大多数指令集使用不止一种指令格式
机器指令符号表示法:
操作码缩写成助记符,比如 ADD、SUB 等
操作数也可以用符号表示
- 寄存器编号或内存地址
操作码
所有计算机上都会存在相同的常用操作类型,比如数据传送、算数运算、逻辑运算、转换、输入/输出、系统控制、控制转移
操作数
常见类型:地址、数值、字符、逻辑数据
地址
一个指令需要有4个地址引用:2个源操作数,1个目的操作数、1个下一指令地址
- 下一指令地址是隐含的
每条指令中的地址数目越少,指令的长度越短,不需要复杂的CPU,但是程序总的指令条数更多,执行时间更长,程序更长更复杂
数值
计算机存储的数值是受限的
字符
国际参考字母表IRA / 美国信息交换标准码ASCII:每个字符被表示为唯一的7位二进制串
扩展的二进制编码的十进制交换码EBCDIC:8位编码
统一码Unicode:16位/32位
逻辑数据
将一个n位单元看成是由n个1位项组成,每一项有值0或1
大端序和小端序
大端序:把数据高位放在低地址
小端序:把数据低位放在低地址
两种策略中每个数据项有同样地址
端序不影响结构中的数据项的次序
操作数的引用
寻址方式:立即寻址、直接寻址、简介寻址、寄存器寻址、寄存器间接寻址、偏移寻址、栈寻址
记号:
A:指令中地址字段的内容
R:指向寄存器的指令地址字段的内容
EA:被访问位置的实际地址
(X):存储器位置X或寄存器X的内容
立即寻址
操作数实际出现在指令中
除了取指令之外,获取操作数不要求另外的存储器访问
数的大小受限于地址字段的长度
直接寻址
地址字段含有操作数的有效地址
只要求1次存储器访问,且无需为生成地址而专门计算
地址空间有限
间接寻址
地址字段指示一个存储器字地址,而此地址保存有操作数的全长度地址
第一层地址指向第二层的实际地址
扩大了地址空间
取操作数需要2次访问存储器
寄存器寻址
地址字段指示的是寄存器
寄存器存的是操作数
指令中仅需要一个较小的地址字段,而不需要存储器访问
地址空间十分有限
寄存器间接寻址
地址字段指示寄存器
寄存器存的是操作数地址
扩大地址空间,比间接寻址少1次存储器访问
相对于寄存器寻址,需要多1次存储器访问
偏移寻址
结合直接寻址和寄存器间接寻址能力
- 实际地址:寄存器存放的地址 + 直接指示的地址
相对寻址
隐含引用的寄存器是程序计数器(PC)
- 实际地址:下一条指令的地址 +直接指示的地址
基址寄存器寻址
引用的寄存器含有一个存储器地址,地址字段含有偏移量(通常是无符号整数)
实际地址:寄存器存放的地址 + 直接指示的偏移量
寄存器引用可以是显式的,也可以是隐式的
变址寻址
指令地址字段引用一个主存地址,被引用的寄存器含有的对该地址的一个正的偏移量
- 实际地址:直接指示的地址 + 寄存器存放的偏移量
栈寻址
栈指针保存在寄存器中,对寄存器中栈位置的访问实际上是一种寄存器间接寻址方式
- 与栈相关的是一个指针,它的值是栈顶地址,或者当栈顶的两个元素已在CPU寄存器内,此时栈顶指针指向栈顶的第三个元素
指令格式
指令格式通过它的各个构成部分来定义指令的位安排
一个指令格式必须包含一个操作码,以及显式或隐式的、零个或多个操作数
必须显式或隐式地为每个操作数指定其寻址方式
大多数指令集使用不止一种指令格式
设计原则
指令尽量短
- 占用存储空间小
有足够的操作码位数
- 要为操作类型不断增加预留
操作码地编码必须有唯一的解释
指令长度是字节地整数倍
- 内存是按字节寻址
合理选择地址字段的个数
指令尽量规整
指令长度
指令长度应该是字符长度或定点数长度的整数倍
指令长度应该等于存储器的传送长度(数据总线宽度)
- 或者这两个值其中之一是另一个的整数倍
最明显的权衡考虑是在强有力的指令清单和节省空间之间进行
编程人员希望更多的操作码、更多的操作数、更多的寻址方式和更大的地址范围
指令长度变短可以节省存储空间和减少数据传送时间
位的分配
对于给定的指令长度,在操作码数目和寻址能力之间存在着权衡考虑
使用变长的操作码
- 使用一个最小操作码长度,但是对于某些操作码,可以使用指令附加位的方式来指定附加的操作
使用寻址位的考虑因素
寻址方式的种数、操作数的数量、寄存器与存储器比较、寄存器组的数目、地址范围、寻址粒度
能用于操作数引用的寄存器越多,指令需要的位数越少
对于固定数目的寄存器,功能上的分开将是指令只需较少的位数
使用较大的字时,需要的地址位更少
变长指令
提供不同长度的各种指令格式
- 取至少等于最长指令长度的几个字节或几个字
优点:
易于提供大的操作码清单,而操作码具有不同的长度
寻址方式能更灵活,指令格式能将各种寄存器和存储器引用加上寻址方式予以组合
缺点:
- 增加了CPU的复杂程度
指令集设计
指令集:定义了处理器应完成的多数功能,对处理器的实现有着显著的影响,是程序员控制处理器的方式,设计时必须考虑程序员的要求
设计基本原则:
完备性/完整性
- 操作类型应当尽可能完备,但是太复杂也会给硬件实现增加困难
兼容性
- 应当兼容以前的指令系统,为软件重复利用带来方便
均匀性
- 应当能对多种类型的数据进行处理
可扩充性
- 操作码要预留一定的编码空间
设计的基本问题:
操作指令表
数据类型
指令格式
寄存器
寻址方式
下一条指令地址的确定
指令周期
简单指令周期
当且仅有当机器关闭,不可被恢复的错误发生或者程序指令停止了计算机时,程序执行才会停止,不然操作系统的执行是不会停止的
指令周期:处理单个指令的过程
取指周期:从内存中获取指令
执行周期:执行所提取的指令
指令周期状态图:
从内存中取指令
解析指令获取操作码
获取操作数
含有中断的指令周期
开中断时响应中断(Interupt enable)
- 每执行完成一次指令后要check有无中断并且进行处理
关中断的时候不响应中断
指令周期状态图:
间址周期
指令的执行可能涉及一个或多个存储器中的操作数,它们都要求一次存储器访问
- 使用间接寻址,还需要额外的存储器访问
间址周期:把简介地址的读取看成是一个额外的指令子周期