目录
计算机组成原理
指令在计算机中的地位
一、机器指令
每一条机器语言的语句称为机器指令,而又将全部机器指令的集合称为机器的指令系统。
指令的一般格式
1、操作码
操作码用来指明该指令索要完成的操作,如加法、减法、传送、移位、转移等。通常,其位数反映了机器的操作种类,也即机器允许的指令条数。
操作码的长度可以是固定的,也可以是变化的。
操作码长度固定的指令,将操作码集中放在指令字的一个字段内,这种格式便于硬件设计,指令译码时间段,广泛用于字长较长的、大中型计算机和超级小型计算机以及RISC中。
操作码长度不固定的指令,其操作码分散在指令字的不同字段中。这种格式可有效地压缩操作码的平均长度,在字长较短的微型计算机中被广泛采用。
通常采用扩展操作码技术,使操作码的长度随地址数的减少而增加,不同地址数的指令可以具有不同长度的操作码,从而在满足需要的前提下,有效地缩短指令字长。
在设计操作码不固定的指令系统时,应尽量考虑安排指令使用频度(即指令在程序中出现的概率)高的指令占用短的操作码,对使用频度低的指令可使用较长的操作码,这样可以缩短经常使用的指令的译码时间。
2、地址码
地址码用来指出该指令的源操作数的地址(一个或两个)、结果的地址以及下一条指令的地址。这里的“地址”可以是主存的地址,也可以是寄存器的地址,甚至可以是I/O设备的地址。
(1)四地址指令
其中,OP为操作码;A1为第一操作数地址;A2为第二操作数地址;A3为结果地址;A4为下一条指令的地址。
如果地址字段均指示主存的地址,则完成一条四地址指令,共需访问4次存储器(取指令一次,取两个操作数两次,存放结果一次)。
(2)三地址指令
因为程序中大多数指令是按顺序执行的,而程序计数器PC既能存放当前欲执行指令的地址,又有计数功能,因此它能自动形成下一条指令的地址。这样,指令字中的第四地址字段A4便可省去,即得三地址指令格式。
它可完成(A1)OP(A2)→A3的操作后,后续指令的地址隐含在程序计数器PC之中。三地址指令操作数的直接寻址范围可达2^8=256。同理,若地址字段均为主存地址,则完成一条三地址指令也需访问4次存储器。
(3)二地址指令
机器在运行过程中,没有必要将每次运算结果都存入主存,中间结果可以暂存在CPU的寄存器(如ACC)中,这样又可省去一个地址字段A3,从而得出二地址指令。
它可完成(A1)OP(A2)→A1的操作,即A1字段既代表源操作数的地址,又代表存放本次运算结果的地址。有的机器也可以表示(A1)OP(A2)→A2的操作,此时A2除了代表源操作数的地址外,还代表中间结果的存放地址。
这两种情况完成一条指令仍需访问4次存储器。如果使其完成(A1)OP(A2)→ACC,此时,它完成一条指令只需3次访存,它的含义是中间结果暂存于累加器ACC中。二地址指令操作数的直接寻址范围为2^12=4K。
(4)一地址指令
如果将一个操作数的地址隐含在运算器的ACC中,则指令字中只需给出一个地址码,构成一地址指令。
它可完成(ACC)OP(A1)→ACC的操作,ACC既存放参与运算的操作数,又存放运算的中间结果,这样完成一条一地址指令只需两次访存。一地址指令操作数的直接寻址范围达2^24,即16M。
(5)零地址指令
零地址指令在指令字中无地址码,例如,空操作(NOP)、停机(HLT)这类指令只有操作码。而子程序返回(RET)、中断返回(IRET)这类指令没有地址码,其操作数的地址隐含在堆栈指针SP中。
用一些硬件资源(如PC、ACC)承担指令字中需指明的地址码,可在不改变指令字长的前提下,扩大指令操作数的直接寻址范围。
此外,用PC、ACC等硬件代替指令字中的某些地址字段,还可缩短指令字长,并可减少访存次数。
地址字段表示寄存器时,也可有三地址、二地址、一地址之分。它们的共同点是,在指令的执行阶段都不必访问存储器,直接访问寄存器,使机器运行速度得到提高(因为寄存器类型的指令只需在取值阶段访问一次存储器)。
3、指令字长
指令字长取决于操作码的长度、操作数地址的长度和操作数地址的个数。
为了提高指令的运行速度和节省存储空间,通常尽可能把常用的指令(如数据传送指令、算逻运算指令等)设计成单字长或短字长格式的指令。
通常指令字长取8的整数倍。
二、操作数类型和操作类型
1、操作数类型
机器中常见的操作数类型有地址、数字、字符、逻辑数据等。
2、数据在存储器中的存放方式
(1)从任意位置开始存储
(2)从一个存储字的起始位置开始访问
(3)边界对准方式——从地址的整数倍位置开始访问
2、操作类型
(1)数据传送
数据传送包括寄存器与寄存器、寄存器与存储单元、存储单元与存储单元之间的传送。
(2)算术逻辑操作
加、减、乘、除、增 1、减 1、求补、浮点运算、十进制运算、与、或、非、异或、位操作、位测试、位清除、位求反
这类操作可实现算术运算和逻辑运算。有些机器还具有位操作功能,如位测试(测试指定位的值)、位清除(清除指定位)、位求反(对指定位求反)等。
如:8086ADD SUB MUL DIV INC DEC CMP NEGAAA AAS AAM AADAND OR NOT XOR TEST
(3)移位
移位可分为算数移位、逻辑移位、循环移位三种。
(4)转移
转移指令按其转移特征又可分为无条件转移、条件转移、跳转、过程调用与返回、陷阱等几种。
A\ 无条件转移
无条件转移不受任何条件约束,可直接把程序转移到下一条需执行指令的地址。
B\ 条件转移
条件转移是根据当前指令的执行结果来决定是否需要转移。
若条件满足,则转移;若条件不满足,则继续按顺序执行。
还有一种条件转移指令,SKP,它暗示其下一条指令将被跳过,从而隐含恶劣转移地址是SKP后的第二条指令。
需注意以下三点:
- 子程序可在多处被调用
- 子程序调用可出现在子程序中,即允许子程序嵌套。
- 每个CALL指令都对应一条RETURN指令。
返回地址可存放在以下三处:
- 寄存器内。机器内设有专用寄存器,专门用于存放返回地址。
- 子程序的入口地址内。
- 栈顶内。现代计算机都设有堆栈,执行RETURN指令后,便可自动从栈顶内取出应返回的地址。
通常设有输入输出指令,它完成从外设中的寄存器读入一个数据到CPU的寄存器内,或将数据从CPU的寄存器输出至某外设的寄存器中。