指令(又称机器指令)是指示计算机执行某种操作的命令,是计算机运行的最小功能单位。
一台计算机的所有指令的集合构成该机的指令系统/指令集。
指令系统是计算机的主要属性,位于硬件和软件的交界面上。也可以说指令系统是计算机硬/软件的界面。
指令系统是计算机硬件的语言系统,和机器语言有关。
指令的地址数和指令的长度是否固定没有一定的关系。
指令长度与机器字长没有一定的关系。
因为主存一般是按字节编址的,所以指令字长多为字节的整数倍。为了便于取指,指令长度也可能是存储字长的整数倍。
在一个指令系统中,若所有指令的长度都是相等的,则称为定长指令字结构。定字长指令的执行速度快,控制简单。若各种指令的长度随指令功能而异,则称为变长指令字结构。
适用情况:
①不需要操作数的指令。
②操作数从栈顶和次栈顶弹出。
适用情况:
①单操作数指令,OP(A1)——>A1。
②有两个操作数,但另一个操作数由累加器ACC提供,结果也放在ACC中,(ACC)OP(A1)——>ACC。
A1是目的操作数,保存运算结果。
(A1)OP(A2)——>A1。
(A1)OP(A2)——>A3。
(A1)OP(A2)——>A3,A4是下一条指令的地址。
为了在指令字长有限的前提下仍保持比较丰富的指令种类,可采取可变长度操作码,即全部指令的操作码字段的位数不固定,且分散地放在指令字的不同位置上。显然,这将增加指令译码和分析的难度,使控制器的设计复杂化。
①不允许短码是长码的前缀,即短操作码不能与长操作码的前面部分的代码相同。
②各指令的操作码一定不能重复。
通常情况下,对使用频率较高的指令分配较短的操作码,对使用频率较低的指令分配较长的操作码,从而尽可能减少指令译码和分析的时间。
地址码也分两种:
形式地址:指令中的地址码字段并不代表操作数的真实地址,表示为(A)。
有效地址:形式地址结合寻址方式,可以计算出操作数在存储器中的真实地址,也就是有效地址,表示为(EA)。
指令系统中采用不同的寻址方式的目的:缩短指令字长、扩大寻址空间、提高编程灵活性。
但同时指令译码难度择增加了。
指令寻址:寻找下一条将要执行的指令地址。都通过PC给出。
顺序寻址:程序计数器PC+1自动形成下一条指令的地址。
跳跃寻址:通过转移类指令实现,由本条指令给出下一条指令的地址的计算方式,得到地址偏移量/相对地址或绝对地址。跳跃的结果是当前指令修改PC值。可以实现程序的无条件转移和条件转移。
数据寻址:寻找操作数的地址。由寻址特征指出寻址方式,结合形式地址A,得出操作数有效地址EA。
(1)隐含寻址
优点:有利于缩短指令字长,简化地址结构。
缺点:需增加存储操作数或隐含地址的硬件。
(2)立即(数)寻址
地址字段指出的不是操作数的地址,而是操作数本身,又称立即数。
优点:指令在执行阶段不访问主存,指令执行时间最短。
缺点:A的位数限制了立即数的范围。
(3)直接寻址
指令字中的形式地址A是操作数的真实地址EA,即EA=A。
优点:简单,指令在执行阶段仅访问一次主存,不需要专门计算操作数的地址。
缺点:A的位数决定了该指令操作数的寻址范围,操作数的地址不易修改。
(4)间接寻址
指令的地址字段给出的形式地址不是操作数的真正地址,而是操作数有效地址所在的存储单元的地址,也就是操作数地址的地址,即EA=(A)。
优点:可扩大寻址范围(有效地址 EA的位数大于形式地址A的位数),便于编制程序(用间接寻址可方便地完成子程序返回)。
缺点:指令在执行阶段要多次访存,速度过慢,一般问到扩大寻址范围时,通常指的是这种方式。
(5)寄存器寻址
寄存器寻址是指在指令字中直接给出操作数所在的寄存器编号,即 EA=Ri,其操作数在由Ri所指的寄存器内。
优点:指令在执行阶段不访问主存,只访问寄存器,因寄存器数量较少,对应地址码长度较小(可有效缩短指令中某个地址段的位数),使得指令字短且因不用访存,所以执行速度快。
缺点:寄存器价格昂贵,计算机中的寄存器个数有限。
(6)寄存器间接寻址
寄存器间接寻址是指在寄存器 Ri中给出的不是一个操作数,而是操作数所在主存单元的地址,即EA=(Ri)。
特点:与一般间接寻址相比速度更快。
(7)相对寻址
把程序计数器的内容加上指令格式中的形式地址A而形成操作数的有效地址,EA=(PC)+A。
优点:操作数的地址不是固定的,它随PC值的变化而变化,且与指令地址之间总是相差一个固定值,因此便于程序浮动。相对寻址广泛应用于转移指令。对于多道程序设计来说最重要。
(8)基址寻址(面向系统)
基址寻址是指将CPU中基址寄存器的内容加上指令格式中的形式地址A而形成操作数的有效地址,即EA=(BR)+A。其中基址寄存器既可采用专用寄存器,又可采用通用寄存器。
优点:可扩大寻址范围(基址寄存器的位数大于形式地址A的位数),有利于多道程序设计,并可用于编制浮动程序,但偏移量(形式地址A)的位数较短。
(9)变址寻址(面向用户)
变址寻址是指有效地址EA等于指令字中的形式地址A与变址寄存器IX的内容之和,即 EA=(IX)+A,其中IX为变址寄存器(专用),也可用通用寄存器作为变址寄存器。
优点:可扩大寻址范围;有利于数组处理,特别适合编制循环程序。
(10)堆栈寻址
寄存器堆栈又称硬堆栈。寄存器堆栈的成本较高,不适合做大容量的堆栈;而从主存中划出一段区域来做堆栈是最合算且最常用的方法,这种堆栈称为软堆栈。
在采用堆栈结构的计算机系统中,大部分指令表面上都表现为无操作数指令的形式,因为操作数地址都隐含使用了SP。通常情况下,在读/写堆栈中的一个单元的前后都伴有自动完成对SP内容的增量或减量操作。
CISC复杂指令系统计算机,功能更强大,指令更复杂;RISC精简指令系统计算机,指令简单,执行速度快。
RISC精简指令系统计算机,要求指令系统简化,尽量使用寄存器-寄存器操作指令。指令格式一致,指令长度固定、种类少,寻址方式种类少,指令功能没那么强。
RISC采用指令流水线技术,使大部分指令在一个时钟周期内完成。适合流水线的指令系统的特征有∶ ①指令长度应尽量一致;② 指令格式应尽量规整;③ 保证除Load/Store指令外的其他指令都不访问存储器; ④数据和指令在存储器中"对齐"存放。
1.程序控制类的指令
功能是改变程序执行的顺序,包括:无条件转移、有条件转移、子程序调用、返回指令、循环指令。
2.某计算机按字节编址,指令字长固定且只有两种指令格式,其中三地址指令29条、二地址指令107条,每个地址字段为6位,则指令字长至少应该是(24位)。
计算出来是23,但由于按字节编址,所以应当是8的倍数,取24。
3.运算型指令的寻址和转移性指令的寻址不同点在于:
前者取操作数,后者决定程序转移地址。
4.某指令系统有200条指令,对操作码采用固定长度二进制编码,最少需要用(8)位。
5.一个计算机系统采用32位单字长指令,地址码为12位,若定义了250条二地址指令,则还可以有(24K)条单地址指令。
地址码为12位,二地址指令的操作码长度为32-12-12=8位,已定义了250条二地址指令,28-250=6,即可以设计出单地址指令6×212=24K条。