指令系统
机器指令
机器指令是CPU能直接识别并执行的指令,表现形式是二进制编码。机器指令通常由操作码和操作数两部分组成。
指令的一般格式
指令是由操作码和地址码两部分组成的。
-
操作码
操作码用来指明指令所要完成的操作,如加法、减法、传送、移位、转移等。 通常,其位数反映了机器的操作种类,也即机器允许的指令条数。 操作码的长度可以是固定的,也可以是变化的。(IBM 370和VAX - 11系列机,操作码长度均为8位。) 对于操作码长度不固定的指令,其操作码分散在指令字的不同字段中。这种格式可有效地压缩操作码的平均长度,在字长较短的微型计算机中被广泛采用。 扩展操作码技术,使操作码的长度随地址数的减少而增加。
-
地址码
地址码用来指出该指令的源操作数的地址(一个或两个)、结果的地址以及下一条指令的地址。这里的“地址”可以是主存的地址,也可以是寄存器的地址,甚至可以是I/O设备的地址。
-
四地址指令
地址字段有4个,其格式如下: OP|A1|A2|A3|A4 其中,OP为操作码;A1为第一操作数地址;A2为第二操作数地址;A3为结果地址;A4为下一跳指令的地址。 该指令完成(A1)OP(A2)→A3的操作。 如果地址字段均指示主存的地址,则完成一条四地址指令,共需访问4次存储器(取指令一次,取两个操作数两次,存放结果一次)。
-
三地址指令
三地址指令中只有3个地址,其格式如下: OP|A1|A2|A3 该指令完成(A1)OP(A2)→A3操作。 如果地址字段均指示主存的地址,则完成一条三地址指令,共需访问4次存储器。
-
二地址指令
二地址指令中只有两个地址字段,其格式如下: OP|A1|A2 该指令完成(A1)OP(A2)→A1操作,即A1字段既代表源操作数的地址,又代表存放本次运算结果的地址。有的机器也可以表示(A1)OP(A2)→A2的操作,此时A2除了代表源操作数的地址外,还代表中间结果的存放地址。这两种情况完成一条指令仍访问4次存储器。 如果使其完成(A1)OP(A2)→ACC,完成一条指令只需3次访存,含义是中间结果暂存于累加器ACC中。
-
一地址指令
一地址指令中只有一个地址字段,其格式如下: OP|A1 该指令完成(ACC)OP(A1)→ACC操作,ACC既存放参与运算的操作数,又存放运算的中间结果,这样完成一条一地址指令只需两次访存。
-
零地址指令
零地址指令在指令字中无地址码。
-
指令字长
指令字长取决于操作码的长度、操作数地址的长度和操作数地址的个数。不同机器的指令字长是不相同的。 早期的计算机指令字长、机器字长和存储字长均相等,因此访问某个存储单元,便可取出一条完整的指令或一个完整的数据。这种机器的指令字长是固定的,控制方式比较简单。 随着计算机的发展,一台机器的指令系统可以采用位数不相同的指令,即指令字长是可变的,如单字长指令、多字长指令。
操作数类型和操作类型
操作数类型
-
地址
地址实际上也可看做是一种数据,在许多情况下要计算操作数的地址。这时,地址可被认为是一个无符号的整数。
-
数字
计算机中常见的数字有定点数、浮点数和十进制数。
-
字符
普遍采用ASCII码。
-
逻辑数据
计算机除了作算术运算外,有时还需作逻辑运算,此时n个0和1的组合不是被看做算术数字,而是被看做逻辑数。
数据在存储器中的存放方式
边界对准
操作类型
-
数据传送
数据传送包括寄存器与寄存器、寄存器与存储单元、存储单元与存储单元之间的传送。如从源到目的之间的传送、对存储器读(LOAD)和写(STORE)、交换源和目的的内容、置1、清零、进栈、出栈等。
-
算术逻辑操作
这类操作可实现算术运算(加、减、乘、除、增1、减1、取负数即求补)和逻辑运算(与、或、非、异或)。 有些机器还具有位操作功能,如位测试(测试指定位的值)、位清除(清除指定位)、位求反(对指定位求反)等。
-
移位
移位可分为算术移位、逻辑移位和循环移位三种。
-
转移
-
无条件转移
无条件转移不受任何条件约束,可直接把程序转移到下一条需执行指令的地址。
-
条件转移
条件转移是根据当前指令的执行结果来决定是否需要转移。若条件满足,则转移;若条件不满足,则继续按顺序执行。一般机器都能提供一些条件码,这些条件码是某些操作的结果。
-
调用与返回
在编写程序时,有些具有特定功能的程序段会被反复使用。为避免重复编写,可将这些程序段设定为独立子程序,当需要执行某子程序时,只需用子程序调用指令即可。 计算机系统还提供了通用子程序,如申请资源、读写文件、控制外设等。需要时均可由用户直接调用,不必重新编写。 通常调用指令包括过程调用、系统调用和子程序调用。 调用指令(CALL)一般与返回指令(RETURN)配合使用。CALL用于从当前的程序位置转至子程序的入口;RETURN用于子程序执行完后重新返回到源程序的断点。
-
陷阱(Trap)与陷阱指令
陷阱其实是一种意外事故的中断。
-
输入输出
对于I/O单独编址的计算机而言,通常设有输入输出指令,它完成从外设中的寄存器读入一个数据到CPU的寄存器内,或将数据从CPU的寄存器输出至某外设的寄存器中。
-
其他
其他包括等待指令、停机指令、空操作指令、开中断指令、关中断指令、置条件码指令等。
-
寻址方式
指令寻址
-
顺序寻址
顺序寻址可通过程序计数器PC加1,自动形成下一条指令的地址。
-
跳跃寻址
跳跃寻址则通过转移类指令实现。
数据寻址
数据寻址方式种类较多,在指令字中必须设一字段来指明属于哪一种寻址方式。 指令的地址码字段通常都不代表操作数的真实地址,把它称为形式地址,记作A。 操作数的真实地址称为有效地址,记作EA,它是由寻址方式和形式地址共同来确定的。 由此可得指令的格式如下所示。 操作码|寻址特征|形式地址A 为了便于分析研究各类寻址方式,假设指令字长、存储字长、机器字长均相同。
-
立即寻址
立即寻址的特点是操作数本身设在指令字内,即形式地址A不是操作数的地址,而是操作数本身,又称之为立即数。 数据是采用补码形式存放的,“#”表示立即寻址特征标记。 OP|#|A
-
直接寻址
直接寻址的特点是,指令字中的形式地址A就是操作数的真实地址EA,即:EA=A (图片)
-
隐含寻址
隐含寻址是指指令字中不明显地给出操作数的地址,其操作数的地址隐含在操作码或某个寄存器中。 (图片) 由于隐含寻址在指令字中少了一个地址,因此这种寻址方式的指令有利于缩短指令字长。
-
间接寻址
倘若指令字中的形式地址不直接指出操作数的地址,而是指出操作数有效地址所在的存储单元地址,也就是说,有效地址是由形式地址间接提供的,即为间接寻址,即EA=(A)。 (图片) 与直接寻址相比:扩大了操作数的寻址范围,便于编制程序。
-
寄存器寻址
在寄存器寻址的指令字中,地址码字段直接指出了寄存器的编号,即EA= Ri。其操作数在由Ri所指的寄存器内。由于操作数不在主存中,故寄存器寻址在指令执行阶段无须访存,减少了执行时间。由于地址字段只需指明寄存器编号(计算机中寄存器数有限),故指令字较短,节省了存储空间,因此寄存器寻址在计算机中得到广泛应用。
-
寄存器间接寻址
Ri中的内容不是操作数,而是操作数所在主存单元的地址号,即有效地址EA=(Ri)。 与寄存器寻址相比,指令的执行阶段还需访问主存。 因有效地址不是存放在存储单元中,而是存放在寄存器中,故称其为寄存器间接寻址,它比间接寻址少访存一次。
-
基址寻址
基址寻址需设有基址寄存器BR,其操作数的有效地址EA等于指令字中的形式地址与基址寄存器中的内容(称为基地址)相加,即:EA = A + (BR)
-
变址寻址
变址寻址与基址寻址极为相似。其有效地址EA等于指令字中的形式地址A与变址寄存器IX的内容相加之和,即:EA = A + (IX)
-
相对寻址
相对寻址的有效地址是将程序计数器PC的内容(即当前指令的地址)与指令字中的形式地址A相加而成,即:EA=(PC) + A
指令格式举例
设计指令格式应考虑的各种因素
必须考虑新机器的指令系统与同一系列机器指令系统的兼容性,即高档机必须能兼容低档机的程序运行,称之为“向上兼容”。
- 操作类型:包括指令数及操作的难易程度。
- 数据类型:确定哪些数据类型可以参与操作。
- 指令格式:包括指令字长、操作码位数、地址码位数、地址个数、寻址方式类型,以及指令字长和操作码位数是否可变等。
- 寻址方式:包括指令和操作数具体有哪些寻址方式。
- 寄存器个数:寄存器的多少直接影响指令的执行时间。
指令格式举例
-
PDP-8
PDP-8的指令字长统一为12位,CPU内只设一个通用寄存器,即累加器ACC,其主存被划分为若干个容量相等的存储空间(每个相同的空间被称为一页)。该机的指令格式可分为三大类。
-
PDP-11
PDP-11机器字长为16位,CPU内设8个16位通用寄存器,其中两个通用寄存器有特殊作用,一个用做堆栈指针SP,一个用做程序计数器PC。
-
IBM 360
IBM 360属于系列机。所谓系列机,是指其基本指令系统相同,基本体系结构相同的一系列计算机。 IBM 370对IBM 360是完全向上兼容的。所以IBM 370可看做IBM 360的扩展或延伸或改进。
-
Intel 8086/80486
Intel 8086/80486 系列微型计算机的指令字长为1~6个字节,即不定长。
指令格式设计举例
RISC技术
RISC即精简指令系统计算机(Reduced Instruction Set Computer),与其对应的是CISC,即复杂指令系统计算机(Complex Instruction Set Computer)。
RISC的产生和发展
RISC的主要特征
-
RISC的主要特点
选取使用频度较高的一些简单指令以及一些很有用但又不复杂的指令,让复杂指令的功能由频度高的简单指令的组合来实现。 指令长度固定,指令格式种类少,寻址方式种类少。 只有取数/存数(LOAD/STORE)指令访问存储器,其余指令的操作都在寄存器内完成。 CPU 中有多个通用寄存器。 采用流水线技术,大部分指令在一个时钟周期内完成。采用超标量和超流水线技术,可使每条指令的平均执行时间小于一个时钟周期。 控制器采用组合逻辑控制,不用微程序控制。 采用优化的编译程序。
-
RISC Ⅱ指令系统举例