1、机器指令特征
指令是计算机完成某种操作的命令。
指令系统是一台计算机中机器指令的集合。它决定一台计算机硬件的主要性能和基本功能,是硬件和软件之间的界面,是机器硬件设计的依据与软件设计的基础,直接影响计算机系统的性能。
一条机器指令应该包含以下信息:
● 操作码:指定该指令将要完成的操作类型。
● 源操作数的引用:指明从哪里得到源操作数。
● 结果操作数的引用:指明操作结果存放在何处。
● 下一条指令的引用:指明下一条指令。
操作数可以存放的位置:
● 主存或虚存:指令中提供主存或虚存地址。
● CPU寄存器:指令中提供寄存器编号。
● I/O设备:指令中提供外设地址。
机器指令在计算机中用二进制位串表示;为方便阅读和记忆,可以用助记符表示:
二进制位串表示:10010110
助记符表示:ADD R1,R2
上面两条指令等价于:(R1)+(R2)->R1
指令系统的设计需要考虑以下信息:
● 操作清单:指令系统应提供操作的数量、种类以及复杂程度。
● 数据类型:指令需要对哪几种数据进行操作。
● 指令格式:指令长度,字段组成、字段含义;
● 寄存器:可被访问指令的寄存器及其功能;
● 寻址方式:如何形成操作数的有效地址,获取操作数。
指令系统性能的要求:
● 完备性:指令丰富、功能齐全、使用方便。
● 有效性:编写的程序能高效运行,占据空间小、执行速度快。
● 规整性:对称性、匀齐性、一致性。
● 兼容性:系列机向上兼容、非兼容机软件兼容性。
指令系统的两个发展方向:
● 复杂指令系统计算机CISC:指令集庞大、设计周期长、实现复杂、硬件利用率低。
● 精简指令系统计算机RISC:简化指令系统、单周期指令、简单指令格式、简单寻址方式。
2、数据类型与操作类型
数据通常分为以下四类:
● 地址:无符号整数,通过某种运算确定操作数在主存中的位置
● 数值数据:定点整数、定点小数(二进制补码);浮点数(IEEE-754);压缩十进制数(BCD码)
● 字符数据:文本数据或字符串、ASCII码
● 逻辑数据:若干位二进制
操作的类型主要有以下几种:
● 数据传送:包括寄存器之间、存储单元之间、寄存器和存储单元之间的数据传送
● 数据处理:实现数据的算术运算、逻辑运算、移位运算、比较运算
● 程序控制:控制程序的执行顺序,使程序具有测试、分析、判断能力;有转移指令、子程序调用指令和返回指令
● 输入输出:从外设寄存器中读入数据到CPU寄存器中;或将数据从CPU寄存器中输出至外设寄存器中
3、指令格式
指令基本格式:操作码+地址码;操作码指明完成什么操作,地址码指明数据从哪里来、结果送往哪里去,下条指令在哪里取。
指令格式主要分为:
● 操作码结构
操作码字段位数决定计算机允许的指令条数。根据操作码字段位数是否固定可以分为:
- 定长操作码:
指令系统中所有指令的操作码长度固定、位置固定,集中放在指令的一个字段中。
操作码的位数反映了机器的操作种类和允许的指令条数。
特点:简化硬件设计、减少指令译码时间、广泛用于字长较长的大中型计算机和小型超级计算机中。 - 变长操作码:
指令中操作码字段位数不固定,且分散存放在指令字的不同位置上。
扩展操作码的方法:用一个定长字段表示基本操作码,不需要或只需要部分地址码的指令,将操作码扩展到地址码字段。
例如:假设一台计算机指令字长16位,其中4位为基本操作码字段,另外3个4位长的地址码字段位A1、A2、A3。请采用“扩展操作码技术”设计61条指令,其中三地址指令15条,二地址指令15条,一地址指令15条,零地址指令16条。
对三地址指令:前4位操作码可取0000~1110,后12位为地址码,共15条。
对二地址指令:前4位操作码为1111,之后4位可取0000~1110,后8位为地址码,共15条。
对单地址指令:前8位操作码为11111111,之后4位可取0000~1110,后4位为地址码,共15条。
对零地址指令:可取1111111111110000~1111111111111111,共16条。 以上总计指令61条。
不管什么扩展方式,设计变长操作码指令系统时,尽量让使用频率高的指令占用短的操作码,缩短经常使用指令的译码时间。
● 地址码结构
地址码用于指出源操作数地址、结果地址和下一条指令的地址。地址可以是主存地址、寄存器地址和I/O设备地址。
在指令长度和操作码长度一定的情况下,地址码的多少会影响寻址范围。根据地址码个数多少,可以分为:
- 四地址指令:指明两个操作数、结果地址和下一条指令地址。直观易懂但地址的寻址范围较小。
- 三地址指令:后续地址指令由程序计数器PC提供。可以提高剩余三个地址的寻址范围。
- 二地址指令:将源操作数地址A1或A2作为结果的存放地址。地址的寻址范围进一步扩大。
- 单地址指令:一个操作数以隐含的方式在累加器ACC中给出。地址的寻址范围扩大.
- 零地址指令:只有操作码没有地址,表示不需要地址码、或有一个/两个隐含地址的指令。
根据源操作数和目的操作数的存放位置,可以将二地址指令分为三类:
● 存储器-存储器型指令(SS型)
● 寄存器-寄存器型指令(RR型)
● 寄存器-存储器型指令(RS型)
RR型指令的执行速度最快。
● 指令字长度
操作码和地址码合并成为指令。指令字长度指一条指令中包含的二进制码位数,取决于操作码长度和地址码个数。
根据指令字长度可以分为:
● 定长指令字:指令系统的所有指令长度相等,长度设定向最长的指令看齐。
● 变长指令字:指令系统中不同指令的长度不等,随功能而异,能短则短、需长则长。
4、寻址方式
编址方式:对各存储设备进行编号的方式。主要有:
● 字编址:以存储字为单位进行编号
● 字节编址:以字节为单位进行编号
寻址方式:找到下一条指令和操作数地址的方式。可分为:
● 指令寻址
- 顺序寻址:程序顺序执行时的指令寻址方式。用程序计数器的自增操作记录下一条指令在内存中的地址。
- 跳跃寻址:程序转移执行时的指令寻址方式。程序计数器内容不通过自增顺序改变,而由转移指令给出。
● 数据寻址
形式地址:指令地址码字段中的地址,用A表示。
有效地址:操作数的真实地址,用EA表示。
数据寻址是根据地址码字段形成操作数在存储设备中真实地址的方式。
数据寻址的方式:
- 立即寻址:形式地址A给出的就是操作数本身。
优点:无需访问内存、执行速度快;缺点:操作数大小受地址字段长度限制。 - 直接寻址:有效地址由形式地址给出,即EA=A。
特点:只需访问内存一次,执行速度较快;A的位数决定寻址范围。 - 间接寻址:有效地址由形式地址间接给出,即EA=(A)。
特点:需多次访问内存,执行速度较慢;扩大了寻址范围。 - 寄存器寻址:操作数在寄存器中,有效地址就是寄存器编号,即EA=Ri(A=Ri)。
特点:无需访问内存,执行速度快;寄存器个数有限,可缩短指令字长度。 - 寄存器间接寻址:操作数在内存中,操作数的地址在寄存器中,即EA=(Ri)。
特点:指令执行阶段需访问内存,便于编制循环程序。 - 隐含寻址:操作数的地址隐含在寄存器或累加器中。
特点:指令字少了一个地址码字段,可缩短指令字长。 - 偏移寻址:直接寻址与间接寻址的结合,操作数的地址需要通过计算得到。偏移寻址又可以分为:
● 相对寻址:有效地址EA=(PC)+A。
● 基址寻址:有效地址EA=基址寄存器+A。扩大指令的寻址范围。在多道程序和浮动程序编制时极为有用。
● 变址寻址:有效地址EA=变址寄存器+A。有利于处理数组问题。 - 堆栈寻址:无需地址码,有效地址存放在栈顶。