【计组】指令系统

指令系统的发展与性能要求

指令系统的发展

计算机的程序是由一系列的指令组成的,指令就是要计算机执行某种操作的命令
从计算机组成的层次结构来说,计算机的指令有微指令机器指令宏指令之分。
微指令:微程序级的命令,它属于硬件
宏指令:由若干条机器指令组成的软件指令,它属于软件
机器指令(指令):介于微指令与宏指令之间,每条指令可完成一个独立的算术运算或逻辑运算。

指令系统一台计算机中所有机器指令的集合
它是表征一台计算机性能的重要因素,其格式与功能不仅直接影响到机器的硬件结构,也直接影响到系统软件,影响到机器的适用范围。

指令系统的性能

指令系统的性能决定了计算机的基本功能,它的设计直接关系到计算机的硬件结构和用户的需要。
一个完善的指令系统应满足如下四方面的要求:
完备性
有效性
规整性
兼容性

完备性

用汇编语言编写各种程序时,指令系统直接提供的指令足够使用,而不必用软件来实现。完备性要求指令系统丰富、功能齐全、使用方便。

有效性

利用该指令系统所编写的程序能够高效率的运行。高效率主要表现在程序占据存储空间小、执行速度快。一般来说,一个功能更强、更完善的指令系统,必定有更好的有效性。

规整性

包括指令系统的对称性、匀齐性、指令格式和数据格式的一致性。
对称性指在指令系统中所有的寄存器和存储器单元都可同等对待,所有的指令都可使用各种寻址方式;
匀齐性是指一种操作性质的指令可以支持各种数据类型;
指令格式和数据格式的一致性是指指令长度和数据长度有一定的关系,以方便处理和存取

兼容性

系列机各机种之间具有相同的基本结构和共同的基本指令集,因而指令系统是兼容的,即各机种上基本软件可以通用。

计算机语言与硬件结构的关系

计算机语言具有高级语言和低级语言之分。
高级语言如C,FORTRAN等,其语句和用法与具体机器的指令系统无关。
低级语言分机器语言(二进制语言)和汇编语言(符号语言),这两种语言都是面向机器的语言,和具体机器的指令系统密切相关。
机器语言用指令代码编写程序,
符号语言用指令助记符来编写程序。
高级语言和低级语言
计算机能够直接识别和执行的唯一语言是一种用二进制码表示的、由一系列指令组成的机器语言。
但人们采用符号语言或高级语言编写程序。为此,必须借助汇编程序或编译程序,把符号语言或高级语言翻译成二进制码组成的机器语言。
汇编语言依赖于计算机的硬件结构和指令系统。不同的机器有不同的指令,所以用汇编语言编写的程序不能在其他类型的机器上运行。
高级语言与计算机的硬件结构及指令系统无关,在编写程序方面比汇编语言优越。
一些高级语言提供了与汇编语言之间的调用接口。用汇编语言编写的程序,可作为高级语言的一个外部过程或函数,利用堆栈来传递参数或参数的地址。

指令格式

指令操作码与地址码

指令字(简称指令)即表示一条指令的机器字
指令格式则是指令字用二进制代码表示的结构形式,由操作码字段和地址码字段组成。
操作码字段:表征指令的操作特性与功能
地址码字段:通常指定参与操作的操作数的地址

指令格式如下:
在这里插入图片描述
不同的指令用操作码字段的不同编码来表示,每一种编码代表一种指令。

1.操作码

组成操作码字段的位数一般取决于计算机指令系统的规模
例如,一个指令系统只有8条指令,则有3位操作码就够了。
对于一个机器的指令系统,在指令字中操作码字段和地址码字段长度通常是固定的。
目前,在小型和微型计算机中,由于指令字较短,为了充分利用指令字长度,指令字的操作码字段和地址码字段是不固定的,即不同类型的指令有不同的划分,以便尽可能用较短的指令字长来表示越来越多的操作种类,并在越来越大的存储空间中寻址。

2.地址码

根据一条指令中有几个操作数地址,可将该指令称为几操作数指令或几地址指令。
一般的操作数有被操作数、操作数及操作结果这三种数,因而就形成了三地址指令格式。后来又发展成二地址格式、一地址格式和零地址格式。
各种地址指令格式:
在这里插入图片描述
(1) 四地址指令格式
在这里插入图片描述
OPCODE——操作码,
A1——表示第一操作数地址;
A2——表示第二操作数地址;
A3 ——表示操作结果存放地址;
A4——下一条将要执行指令的地址。
(A1) OP (A2)→A3
A4=下一条将要执行指令的地址
(2) 三地址指令格式
在这里插入图片描述
OPCODE——操作码,
A1——第一个源操作数存储器地址或寄存器地址,
A2——第二个源操作数存储器地址或寄存器地址,
A3——操作结果的存储器地址或寄存器地址。

其数学形式描述为:(A1) OP (A2)→A3
(PC)+1→PC(隐含)
用一个程序计数器(Program Counter,PC)来存放指令地址
(3) 二地址指令格式
在这里插入图片描述
OPCODE——操作码,
A1——第一个源操作数存储器地址或寄存器地址,
A2——第二个源操作数和存放操作结果的存储器地址或寄存器地址。
其数学形式描述为: (A1) OP (A2)→A1 或者 (A1) OP (A2)→A2
(4) 一地址指令格式
在这里插入图片描述
OPCODE——操作码,
A——操作数的存储器地址或寄存器地址。
其数学形式描述为: OP (A)→A
或者 (AC) OP (A)→AC
(AC)表示累加寄存器AC中的数
(5) 零地址指令格式
在这里插入图片描述

OPCODE——操作码。
不涉及操作数:如NOP、HLT指令;
操作数隐含:如PUSH、POP指令
(6) 多地址指令格式
性能较好的大、中型计算机甚至高档小型计算机中,往往设置一些功能很强的,用于处理成批数据的指令,例如,字符串处理指令,向量、矩阵运算等指令。为了描述一批数据,指令中往往需要用多个地址来指出数据存放的首地址、长度和下标等信息。

从存放操作数的物理位置来划分,指令格式主要有三种类型:

第一种为存储器—存储器(SS)型指令,即参与操作的数据都放在内存里。机器执行这种指令需要多次访问内存。
第二种为
寄存器—寄存器(RR)型指令,执行这类指令过程中,需要多个通用寄存器或专用寄存器,从寄存器中取操作数,把操作结果存放到另一寄存器中。机器执行该类型指令的速度很快

第三种为**寄存器—存储器(RS)**型指令,执行此类指令时,既要访问内存单元,又要访问寄存器。
目前在计算机系统结构中,通常一个指令系统中指令字的长度和指令中的地址结构并不是单一的,往往采用多种格式混合使用,这样可以增强指令的功能。

指令字长度与扩展方法

指令字长度:一个指令字中包含二进制代码的位数
机器字长:计算机能直接处理的二进制数据的位数,它决定了计算机的运算精度。
在这里插入图片描述
使用多字长指令,目的在于提供足够的地址位来解决访问内存任何单元的寻址问题
其主要缺点是必须两次或多次访问内存以取出一整条指令,降低了CPU的运算速度,又占用了更多的存储空间
等长指令字结构:各种指令字长度是相等的。这种指令字结构简单,且指令字长度是不变的。
变长指令字结构:各种指令字长度随指令功能而异。结构灵活,能充分利用指令长度,但指令的控制较复杂。

指令操作码扩展方法

指令操作码通常有两种编码格式:
一种是固定格式,即操作码的长度固定,且集中放在指令字的一个字段中
这种格式可以简化硬件设计减少指令译码时间,一般用在字长较长的大、中型机和超级小型机以及 RISC机上,如IBM 370和VAX 11系列机,其操作码长度均为8b,可表示256种指令。
另一种是可变格式,即操作码的长度可变,且分散地放在指令字的不同字段中
这种格式能够有效地压缩程序中操作码的平均长度,在字长较短的微型机上广泛采用。如 Z80、Intel 8086等,操作码的长度都是可变的。
操作码不固定将增加指令译码和分析的难度,使控制器的设计复杂。
通常在指令字中用一个固定长度的字段来表示基本操作码,而对于一部分不需要某个地址码的指令,则把它们的操作码的长度扩充到该地址字段。
这样既能充分利用指令字的各个字段,又能在不增加指令长度的情况下扩展操作码的长度,使它能表示更多的指令。

例如:某机器的指令字长度为16b,包括4b基本操作码字段和三个4b地址字段,其指令格式为:
在这里插入图片描述
4b基本操作码有16种组合,若全部用于表示三地址指令,则只有16条。但是,如果三地址指令仅需15条,两地址指令需15条,一地址指令需15条,零地址指令需16条,共61条指令,应该如何安排操作码?显然,只有4b基本操作码是不够的,必须将操作码的长度向地址码字段扩展才行。这可采用如下操作码扩展方法:
(1) 三地址指令仅需15条,由4b基本操作码的0000~1110组合给出,剩下的一个组合1111用于把操作码长度扩展到 A1,即4b扩展到8b;
(2) 二地址指令需15条,由8b操作码的11110000~11111110组合给出,剩下一个11111111用于把操作码长度扩展到 A2,即从8b扩展到12b;
(3) 一地址指令需15条,由12b操作码的111111110000~111111111110组合给出,剩下一个组合111111111111用于把操作码长度扩展到A3,即从12b扩展到16b;
(4) 零地址指令需16条,由16位操作码的1111111111110000~1111111111111111组合给出。
采用上述指令操作码扩展方法后,三地址指令、二地址指令和一地址指令各15条,零地址指令16条,共计61条指令。

指令和数据的寻址方式

指令的寻址方式

操作数或指令在存储器中的地址:某个操作数或某条指令存放在某个存储单元时,其存储单元的编号。
在存储器中,操作数或指令字写入或读出的方式,有:地址指定方式、相联存储方式和堆栈存取方式。
寻址方式:当采用地址指定方式时,形成操作数或指令地址的方式。
寻址方式分为两类,即指令寻址方式数据寻址方式,前者比较简单,后者比较复杂。
指令寻址方式:确定下一条将要执行的指令地址的方法。
指令的寻址方式有两种:
一种是顺序寻址方式,
另一种是跳跃寻址方式。

1.顺序寻址方式

指令地址在内存中按顺序安排,当执行一段程序时,通常是一条指令接一条指令的顺序执行。
即从存储器取出第一条指令,然后执行这条指令;接着从存储器取出第二条指令,在执行第二条指令;接着再取出第三条指令……这种程序顺序执行的过程,我们称为指令的顺序寻址方式。
为此,必须使用程序计数器指令指针寄存器)PC来计数指令的顺序号,该顺序号就是指令在内存中的地址。
在这里插入图片描述

2.跳跃寻址方式

当程序要转移执行的顺序时,指令的寻址就采取跳跃寻址方式。
跳跃(跳转):下条指令的地址码不是由程序计数器给出,而是由本条指令给出
注意:程序跳跃后,按新的指令地址开始顺序执行。指令计数器的内容也必须相应改变,以便及时跟踪新的指令地址。
采用指令跳跃寻址方式,可以实现程序转移或构成循环程序,从而能缩短程序长度,或将某些程序作为公共程序引用。
指令系统中的各种条件转移或无条件转移指令,就是为了实现指令的跳跃寻址而设置的。
在这里插入图片描述

操作数寻址方式

操作数寻址方式:形成操作数的有效地址(EA)的方法。
指令字中的地址码字段,通常是由形式地址寻址方式特征位组成的,并不是操作数的有效地址。其表示形式为:
在这里插入图片描述
形式地址A,是指令字结构中给定的地址量。
寻址方式特征位,通常由间址位(I)和变址位(X)组成。
若指令无间址和变址要求,则形式地址就是操作数的有效地址;
若指令中指明要进行变址或间址变换,则形式地址就不是操作数的有效地址,而必须按指定方式进行变换,才能形成有效地址。
常见的操作数寻址方式
1、隐含寻址方式
2、立即寻址(Immediate Addressing)
3、寄存器寻址方式 ( Register Addressing )
4、直接寻址(Direct Addressing)
5、间接寻址( Indirect Addressing )
6、相对寻址 ( Relative Addressing )
7、基址寻址 ( Based Addressing )
8、变址寻址(Indexed Addressing)
9、堆栈寻址 ( Stack Addressing )

1.隐含寻址

在指令中不明显的给出而是隐含着操作数的地址。
例如:单地址的指令格式,没有在地址字段中指明第二操作数地址,而是规定累加寄存器AC作为第二操作数地址,AC对单地址指令格式来说是隐含地址。

2.立即寻址

指令的地址字段指出的不是操作数的地址,而是操作数本身
这种方式的特点是指令执行时间很短,不需要访问内存取数(操作数在地址码字段中)。
在这里插入图片描述

3.寄存器寻址

操作数放在CPU的通用寄存器中,操作数所在的寄存器编号存放在指令的地址字段A中,即:
DATA=(Ri)
MOV AX, BX
MOV AL, BH
在这里插入图片描述

4.直接寻址

操作数位于存储器中,操作数所在的存储器单元的地址存放在指令的地址字段A中,即:
DATA=(EA)
指令字中的形式地址A就是操作数的有效地址E
EA=A,该类指令中的形式地址A又称为直接地址
在这里插入图片描述
直接寻址方式又可分为寄存器直接寻址和存储器直接寻址两种。
(1)寄存器直接寻址方式
指令地址码字段直接给出所需操作数在通用寄存器中地址编号。其表示形式为:
在这里插入图片描述
有效地址EA数学形式为:EA=Ri
(2)存储器直接寻址方式
一般简称直接寻址方式,其指令地址码字段直接给出存放在存储器中操作数的存储地址。其表示形式见前面。

5.间接寻址

间接寻址的情况下,指令地址字段中的形式地址A不是操作数的真正地址,而是操作数地址的指示器,A单元的内容是操作数的有效地址。即
DATA=(EA)
EA=(A)
即:A为操作数地址的地址
在这里插入图片描述
按寻址特征间址位X的要求,根据地址码指的是寄存器地址还是存储器地址,间接寻址又可分为寄存器间接寻址和存储器间接寻址两种方式。
(1)寄存器间接寻址方式
寄存器间接寻址时,需先访问寄存器,从寄存器读出操作数地址后,再访问存储器才能取得操作数。

在这里插入图片描述
有效地址EA数学形式为:EA=®,即Data=(EA)=(®)
2)存储器间接寻址方式
存储器间接寻址时,需访问两次存储器才能取得数据,第一次先从存储器读出操作数地址,第二次才能根据读出的操作数地址再取出真正的操作数。
在这里插入图片描述
有效地址EA数学形式为:EA=(A),即Data=(EA)=((A))
在这里插入图片描述

6.相对寻址方式

所谓相对寻址方式,是指根据一个基准地址及其相对量来寻找操作数地址的方式。
根据基准地址的来源不同,它又分为基址方式变址方式、以及PC相对寻址方式,这里主要指后者。
PC相对寻址方式,一般简称相对寻址方式,是指将程序计数器 PC的内容(即当前执行指令的地址)与地址码部分给出的位移量(Disp) 通过加法器相加,所得之和作为操作数的有效地址的方式。
在这里插入图片描述
有效地址EA数学形式为:
EA=(PC) + Disp

7.基址寻址方式

计算机设置一个寄存器,专门用来存放基准地址,该寄存器就是基址寄存器(RB)。RB既可在CPU中专设,也可由指令指定某个通用寄存器担任。
基址寻址方式是将CPU中基址寄存器RB的内容加上指令格式中的形式地址A而形成操作数的有效地址。
优点是可以扩大寻址能力。同形式地址相比,基址寄存器的位数可以设置得很长,从而可以在较大的存储空间中寻址。
在这里插入图片描述
有效地址EA数学形式为:EA=(RB) + Disp
地址码 A在这种方式下通常被称为位移量(Disp)。

8.变址寻址方式

变址寻址方式与基址寻址方式计算有效地址的方法很相似,它把CPU中某个变址寄存器的内容与偏移量D相加来形成操作数有效地址。
使用变址寻址方式的目的不在于扩大寻址空间,而在于实现程序块的规律性变化
在这里插入图片描述
XRI指出变址寻址方式的特征
有效地址EA数学形式为:
EA=(RI) +Disp

9.堆栈寻址

操作数位于存储器中,操作数所在的存储器地址EA由堆栈指针寄存器SP隐含指出,通常用于堆栈指令。
堆栈是由若干个连续主存单元组成的先进后出(first in last out,即FILO)存储区,第一个放入堆栈的数据存放在栈底,最近放入的数据存放在栈顶。栈底是固定不变的,而栈顶是随着数据的入栈和出栈在时刻变化。栈顶的地址由堆栈指针SP指明。
一般计算机中,堆栈从高地址向低地址扩展,即栈底的地址总是≥栈顶的地址,称为上推堆栈;也有少数计算机相反,称为下推堆栈。
堆栈寻址主要用来暂存中断和子程序调用时现场数据及返回地址。

堆栈的操作:压入(PUSH)和弹出(POP),对应PUSH和POP指令,假设数据字长为1B
压入指令 PUSH Ri:将Ri寄存器内容压入堆栈。其操作是:
(SP)-1→SP,(Ri) →(SP)
弹出指令POP Ri:从堆栈中弹出1个数据送Ri寄存器,其操作是:
((SP)) → Ri ,(SP)+1→SP
其中(SP)表示堆栈指针SP的内容;((SP))表示SP所指的栈顶的内容。

注意:存储器堆栈中,
进栈时先存入数据,后修改堆栈指示器;
出栈时,先修改堆栈指示器,然后取出数据。
10.复合型寻址方式
(1) 相对间接寻址
这种寻址方式先把程序计数器PC的内容和形式地址(通常为位移量)Disp相加得(PC) + Disp,然后再间接寻址求得操作数的有效地址,即先相对寻址再间接寻址。
操作数的有效地址EA数学形式为:EA=( (PC) + Disp)

(2) 间接相对寻址

这种寻址方式先将形式地址Disp作间接变换( Disp ),然后将间接变换值和程序计数器PC的内容相加得到操作数的有效地址,即先间接寻址再相对寻址。
操作数的有效地址EA数学形式为:EA=(PC) + ( Disp)
(3) 变址间接寻址
这种寻址方式先把变址寄存器RI的内容和形式地址Disp相加得(RI) + Disp,然后再间接寻址求得操作数的有效地址,即先变址再间址。
操作数的有效地址EA数学形式为:EA=( (RI) + Disp)

(4) 间接变址寻址
这种寻址方式先将形式地址Disp作间接变换( Disp ),然后将间接变换值和变址寄存器RI的内容相加得到操作数的有效地址,即先间址再变址。
操作数的有效地址EA数学形式为:EA=(RI) + ( Disp)

指令系统的要求与指令分类

指令的分类

1.数据传送指令

这类指令主要用来实现主存和寄存器之间,或寄存器和寄存器之间,或主存和主存之间的数据传送。
主要包括取数指令、存数指令、传送指令、成组传送指令、字节交换指令、清累加器指令、堆栈操作指令等等。
传送数据时,数据从源地址传送到目的地址,而源地址中的数据保持不变,因此,实际上是数据拷贝。

2.算术/逻辑运算指令

这类指令主要用于定点或浮点的算术运算,大型机中有向量运算指令,直接对整个向量或矩阵进行求和、求积运算。
(1)算数运算指令
这类指令包括二进制定点加、减、乘、除指令,浮点加、减、乘、除指令,求反、求补指令,算术移位指令,算术比较指令,十进制加、减运算指令等。
(2)逻辑运算指令
这类指令用以实现对两个数的逻辑运算和位操作功能,主要包括逻辑与(逻辑乘)、或(逻辑加)、非(求反)、异或(按位加)等逻辑操作指令,以及位测试、位清除、位求反等位操作指令。

3.移位操作指令

移位操作指令用以实现将操作数向左移动或向右移动若干位的功能,包括算术移位、逻辑移位和循环移位三种指令。
算术移位
左移时,若寄存器中的数为算术操作数,则符号位不动,其它位左移,最低位补零。
右移时,其它位右移,最高位补符号位。
逻辑移位
移位时,若寄存器中的操作数为逻辑数,则左移或右移时,所有位一起移位,最低位或最高位补零。
循环移位
按是否与“进位”位C一起循环分为小循环(即自身循环)和大循环(即和进位位 C一起循环)两种。
用于实现循环式控制、高低字节互换或与算术、逻辑移位指令一起实现双倍字长或多倍字长的移位。

4.程序控制指令

(1) 无条件转移指令与条件转移指令
无条件转移指令不受任何条件限制,直接把程序转移到指令所规定的目的地,从那里开始继续执行程序。
条件转移指令则根据计算机处理结果来控制程序的执行方向,实现程序的分支。首先测试根据处理结果设置的条件码,然后判断所测试的条件是否满足,从而决定是否转移。
(2) 调用指令与返回指令
编写程序时,常常需要编写一些能够独立完成某一特定功能且经常使用的程序段,在需要时能随时调用,而不必多次重复编写,以便节省存储器空间和简化程序设计。这种程序段就称为子程序或过程。
调用(Call)与返回(Return)是一对配合使用的指令,返回指令从堆栈中取出返回地址,然后继续执行调用指令的下一条指令。
(3) 陷阱(Trap)与陷阱指令
在计算机运行过程中,有时可能会出现电源电压不稳、存储器校验出错、输入输出设备出现故障、用户使用了未定义的指令或特权指令等种种意外情况,使计算机不能正常工作,这时若不及时采取措施处理这些故障,将影响到整个系统的正常运行。
因此,一旦出现故障,计算机就发出陷阱信号,并暂停当前程序的执行(称为中断),转入故障处理程序进行相应的故障处理。陷阱实际上是一种意外事故中断。

5.输入输出指令

输入输出指令主要用来启动外围设备,检查测试外围设备的工作状态,并实现外部设备和CPU之间,或外围设备与外围设备之间的信息传送。

6.字符串处理指令

字符串处理指令是一种非数值处理指令,一般包括字符串传送、字符串转换(把一种编码的字符串转换成另一种编码的字符串)、字符串替换(把某一字符串用另一字符串替换)等。
这类指令在文字编辑中对大量字符串进行处理。

7.堆栈操作指令

堆栈操作指令通常有两条:一条是入栈指令,另一条是出栈指令。
入栈指令(PUSH)执行两个动作:①将数据从CPU取出并压入堆栈栈顶;②修改堆栈指示器。
出栈指令(POP)也执行两个动作:①修改堆栈指示器;②从栈顶取出数据到CPU。这两条指令总是成对出现的,在程序的中断嵌套、子程序调用嵌套过程中非常实用和方便。

8.特权指令

特权指令是指具有特殊权限的指令。这类指令只用于操作系统或其他系统软件,一般不直接提供给用户使用。
在多用户、多任务的计算机系统中特权指令必不可少。
它主要用于系统资源的分配和管理。

小结

一台计算机中所有机器指令的集合,称为这台计算机的指令系统。
指令系统是表征一台计算机性能的重要因素,它的格式与功能不仅直接影响到机器的硬件结构,而且也影响到系统软件。
指令格式是指令字用二进制代码表示的结构形式,通常由操作码字段和地址码字段组成。操作码字段表征指令的操作特性与功能,而地址码字段指示操作数的地址。
目前多采用二地址、单地址、零地址混合方式的指令格式。
指令字长度分为:单字长、半字长、双字长三种形式。高档微型机中目前多采用32位长度的单字长形式。
形成指令地址的方式,称为指令寻址方式。
有顺序寻址和跳跃寻址两种,由指令计数器来跟踪。形成操作数地址的方式,称为数据寻址方式。
操作数可放在专用寄存器、通用寄存器、内存和指令中。
数据寻址方式有隐含寻址、立即寻址、直接寻址、间接寻址、寄存器寻址、寄存器间接寻址、相对寻址、基址寻址、变址寻址等多种。
按操作数的物理位置不同,有RR型和RS型。前者比后者执行的速度快。
堆栈是一种特殊的数据寻址方式,采用“先进后出”原理。按结构不同,分为寄存器堆栈和存储器堆栈。
不同机器有不同的指令系统。一个较完善的指令系统应当包含数据传送类指令、算术运算类指令、逻辑运算类指令、程序控制类指令、I/O类指令、字符串类指令、系统控制类指令。

  • 2
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值