第四章 指令系统
4.1指令系统的发展和性能要求
1,指令系统的发展计算机的程序是由一系列的指令组成的,
指令就是要计算机执行某种操作的命令 。
指令系统,一台计算机中所有机器指令的集合,
它是表征一台计算机性能的重要因素,其格式与功能不仅直接影响到机器的硬件结构,也直接影响到系统软件,影响到机器的适用范围
2.从计算机组成的层次结构来说,计算机的指令有 微指令,机器指令 和 宏指令 之分。
微指令,微程序级的命令,它属于硬件;
宏指令,由若干条机器指令组成的软件指令,它属于软件;
机器指令(指令),介于微指令与宏指令之间,每条指令可完成一个独立的算术运算或逻辑运算。
3.计算机指令系统的发展过程
50年代,指令系统只有定点加减、逻辑运算、数据传送、
转移等十几至几十条指令。
60年代后期,增加了乘除运算、浮点运算、十进制运算、
字符串处理等指令,指令数目多达一二百条,寻址方式也趋多样化。
60年代后期 开始出现 系列计算机 (指基本指令系统相同、
基本体系结构相同的一系列计算机 )一个系列往往有多种型号,它们在结构和性能上有所差异。同一系列的各机种有共同的指令级而且新推出的机种指令系统一定包含所有旧机种的全部指令,旧机种上运行的各种软件可以不加任何修改便可在新机种上运行,大大减少了软件开发费用。
70年代末期,大多数计算机的指令系统多达几百条。我们称这些计算机为 复杂指令系统计算机 (CISC)。
但是如此庞大的指令系统难以保证正确性,不易调试维护,造成硬件资源浪费。为此人们又提出了 精简指令系统计算机( RISC) 。
4,对指令系统性能的要求完备性 用汇编语言编写各种程序时,指令系统直接提供的指令足够使用,而不必用软件来实现。完备性要求指令系统丰富、功能齐全、使用方便 。
有效性 利用该指令系统所编写的程序能够高效率的运行。高效率主要表现在 程序占据存储空间小、
执行速度快 。一般来说,一个功能更强、更完善的指令系统,必定有更好的有效性。
一个完善的指令系统应满足如下 四 方面的要求:
规整性 规整性包括指令系统的对称性,匀齐性,指令格式和数据格式的一致性 。
对称性 指在指令系统中所有的寄存器和存储器单元都可同等对待,所有的指令都可使用各种寻址方式;
匀齐性 是指一种操作性质的指令可以支持各种数据类型;
指令格式和数据格式的一致性 是指指令长度和数据长度有一定的关系,以方便处理和存取。
兼容性 系列机各机种之间具有相同的基本结构和共同的基本指令集,因而指令系统是兼容的,即各机种上基本软件可以通用。但由于不同机种推出的时间不同,在结构和性能上有差异,
做到所有软件都完全兼容是不可能的,只能做到“向上兼容”,
即低档机上运行的软件可以在高档机上运行。
5,低级语言与硬件结构的关系计算机语言具有 高级语言 和 低级语言 之分高级语言与低级语言的性能比较比 较 内 容 高 级 语 言 低 级 语 言
1
对程序员的训练要求
(1)通用算法
(2)语言规则
(3)硬件知识有较 少不 要有较 多要
2 对机器独立的程度 独 立 不 独 立
3 编制程序的难易程度 易 难
4 编制程序所需时间 短 较 长
5 程序执行时间 较 长 短
6 编译过程中对计算机资源的要求 多 少计算机能够直接识别和执行的唯一语言是二进制语言,但人们采用符号语言或高级语言编写程序。为此,
必须借助汇编程序或编译程序,把符号语言或高级语言翻译成二进制码组成的机器语言。
汇编语言依赖于计算机的硬件结构和指令系统 。
不同的机器有不同的指令,所以用汇编语言编写的程序不能在其他类型的机器上运行。
高级语言与计算机的硬件结构及指令系统无关,在编写程序方面比汇编语言优越。但是高级语言程序“看不见”机器的硬件结构,不能用于编写直接访问机器硬件资源的系统软件或设备控制软件。为此,一些高级语言提供了与汇编语言之间的调用接口 。用汇编语言编写的程序,可作为高级语言的一个外部过程或函数,利用堆栈来传递参数或参数的地址。
4.2指令格式
1,操作码指令格式 则是指令字用二进制代码表示的结构形式,由 操作码 字段和 地址码 字段组成。
操作码 字段表征指令的操作特性与功能地址码 字段通常指定参与操作的操作数的地址操作码字段 地址码字段不同的指令用操作码字段的不同编码来表示,每一种编码代表一种指令。
组成操作码字段的位数一般取决于计算机指令系统的规模。
例如,一个指令系统只有 8条指令,则有 3位操作码就够;
如果有 32条指令,那么就需要 5位操作码。
对于一个机器的指令系统,在指令字中操作码字段和地址码字段长度通常是固定的。
2 地址码根据一条指令中有几个操作数地址,可将该指令称为几操作数指令或几地址指令。
操作数有 被操作数的地址,操作数地址,操作结果地址 及 下一条指令的地址 这四种地址数,因而就形成了四地址指令格式 。
操作码 A1 A2 A3 A4
操作码 A 1 A 2 A 3
三地址指令格式操作数有 被操作数的地址,操作数地址,操作结果地址。
二地址指令常称为双操作数指令,它的两个地址码字段分别指明参与操作的两个数在内存中或运算器中通用寄存器的地址,A1作存放操作结果的地址。
操作码 A 1 A 2
二地址指令操作码 A 1一地址指令一地址指令常称为单操作数指令。通常这种指令以运算器中累加寄存器 AC中的数据为被操作数,指令字的地址码字段所指明的数为操作数,操作结果又放回累加寄存器 AC中。
零地址指令的指令字中只有操作码,而没有地址码操作码零地址指令二地址指令格式中,从操作数的物理位置来说,又可归结为 三 种类型。
存储器 ---存储器( SS)型指令,操作时都是涉及内存单元,参与操作的数都放在内存里,从内存某单元中取操作数,操作结果存放至内存另一单元中,因此机器执行这种指令需要多次访问内存。
寄存器 ---寄存器( RR)型指令,需要多个通用寄存器或个别专用寄存器,从寄存器中取操作数,把操作结果放到另一寄存器。机器执行寄存器 -寄存器型指令的速度很快,因为执行这类指令,不需要访问内存。
寄存器 ---存储器( RS)型指令,执行此类指令时,既要访问内存单元,又要访问寄存器。
3 指令字长度指令字长度,一个指令字中包含二进制代码的位数。
机器字长,计算机能直接处理的二进制数据的位数,它决定了计算机的运算精度其中 L为指令字长度,
N为机器字长度使用多字长指令,目的在于提供足够的地址位来解决访问内存任何单元的寻址问题。其主要缺点是必须两次或多次访问内存以取出一整条指令,降低了 CPU的运算速度,又占用了更多的存储空间。
等长指令字结构,各种指令字长度是相等的。这种指令字结构简单,且指令字长度是不变的。
变长指令字结构,各种指令字长度随指令功能而异。
结构灵活,能充分利用指令长度,但指令的控制较复杂。
需要注意的是,在不同的计算机中,指令助记符的规定是不一样的。因此,指令助记符还必须转换成与它们相对应的二进制码。这种转换借助汇编程序可以自动完成,汇编程序相当于一个“翻译”。
4 指令助记符由于硬件只能识别 1和 0,所以采用二进制操作码是必要的,但是我们用二进制来书写程序却非常麻烦。
为了便于书写和阅读程序,每条指令通常用 3个或 4个英文缩写字母来表示。这种缩写码叫做 指令助记符 。
5,指令格式举例
1)八位微型计算机的指令格式
8位微型机字长只有 8位,指令结构是一种 可变 字长形式,
包含 单字长,双字长,三字长 指令等多种。
操作码 单字长指令操作码 操作数地址 双字长指令操作码 操作数地址1 操作数地址 2 三字长指令
2),PDP/11系列机指令格式
PDP/11系列机指令字长 16位 指令格式如表所示从表中看出,在 PDP/11中,操作码字段是不固定的,其长度也是不相同的。
这样做可以扩展操作码以包含较多的指令。
但是操作码字段不固定,对控制器的设计来说必将复杂化。
3),pentium指令格
pentium机 的指令字长度是可变的:从1字节到 12字节,还可以带前缀
0或 1 0或 1 0或 1 0或 1(字节数 )
指令前缀 段取代 操作数长度取代 地址长度取代
1或 2 0或 1 0或 1 0,1,2,4 0,1,2,4(字节数操作码 Mod Reg或操作码 R/M 比例 S 变址 I 基址 B 位移量 立即数
2位 3位 3位 2位 3位 3位这种非固定长度的指令格式是典型的 CICS结构特征。
一是为了与它的前身 80486保持兼容,
二是希望能给编译程序写作者以更多灵活的编程支持。
指令,
前缀,
指令前缀 包括 LOCK(锁定)前缀和重复前缀。 LOCK前缀用于多 CPU环境中对共享存储器的排它性访问。
重复前缀用于字符串的重复操作,以获得比软件循环方法更快的速度。
指令的前缀是可选项,其作用是对其后的指令本身进行显示约定。每个前缀占1个字节。
段取代前缀 根据指令的定义和程序的上下文,一条指令所使用的段寄存器名称可以不出现在指令格式中,这称为 段缺省规则 。
当要求一条指令不按缺省规则使用某个段寄存器时,必须以段取代前缀明确指明此段寄存器。
操作数长度取代前缀和地址长度取代前缀,
在实地址模式下,操作数和地址的默认长度是 16位;
在保护模式下,若 D= 1,操作数和地址的默认长度是 32位,
若 D= 0,操作数和地址的默认长度是 16位 。
指令本身由操作码字段,Mod-R/M字段,S,I,B字段、
位移量字段、立即数字段组成。除操作码字段外,其他字段都是可选字段。
Mod-R/M字段,规定了存储器操作数的寻址方式,给出了寄存器操作数的寄存器地址号。
SIB字段,和 Mod-R/M字段 一起,对操作数来源进行完整的说明。
[例 1] 指令格式如下所示,其中 OP为操作码,试分析指令格式的特点。
15 9 7 4 3 0
OP ---------------------- 源寄存器 目标寄存器
(1)单字长二地址指令。
(2)操作码字段 OP可以指定 128条指令。
(3)源寄存器和目标寄存器都是通用寄存器(可分别指定 16个),
(4)这种指令结构常用于算术逻辑运算类指令。
[解 ]:
所以是 RR型指令,两个操作数均在寄存器中 。
[例 2] 指令格式如下所示,OP为操作码字段,试分析指令格式特点。
15 10 7 4 3 0
OP ----------- 源寄存器 变址寄存器位移量 (16位 )
[解 ]:
( 1)双字长二地址指令,用于访问存储器。
(2)操作码字段 OP为 6位,可以指定 64种操作。
(3)一个操作数在源寄存器(共 16个),另一个操作数在存储器中(由变址寄存器和位移量决定)
所以是 RS型指令。
4.3指令和数据的寻址方式
1 指令的寻址方式操作数或指令在存储器中的 地址,某个操作数或某条指令存放在某个存储单元时其存储单元的编号。
在存储器中,操作数或指令字写入或读出的方式,有地址指定方式,相联存储方式 和 堆栈存取方式 。
当采用地址指定方式时,形成操作数或指令地址的方式,称为 寻址方式 。
寻址方式分为 两 类,既 指令寻址方式 和 数据寻址方式,
前者比较简单,后者比较复杂。
指令的寻址方式有 两 种,一种是 顺序寻址方式,另一种是 跳跃寻址方式 。
概念:
演示
2 操作数寻址方式
4.4堆栈寻址方式
1 串联堆栈
2 存储器堆栈
4.5典型指令
1 指令的分类
3 精简指令系统
2 基本指令系统