当前位置:文档之家› 第三章 80868088的指令系统

第三章 80868088的指令系统

3.1 指令的基本格式一、指令构成微计算机的指令系统通常由几十种或百余种指令组成(可见表2-1)。

每种指令又由两个字段(Field)构成:l.操作码(OP-Code)字段该字段指示计算机所要执行的操作类型,由一组二进制代码表示,在汇编语言中又用助记将(Mnemonic)代表。

8086执行指令时,首先将操作码从指令队列取入执行部件EU中的控制单元,经指令译码器识别后,产生执行本指令操作所需的时序性控制信号,控制计算机完成规定的操作。

2.操作数(Oprand)字段该字段则是指出指令执行的操作所需的操作数。

在操作数字段中,可以是操作数本身,或是操作数地址或是操作数地址的计算方法。

微计算机中此字段通常可有一个或两个,称前者为单操作数指令,称后者为双操作数指令。

而双操作数又分别称为源操作数src (source)和目的操作数dst(destination)。

在指令执行之前,src和dst均为参加运算处理的两个操作数,指令执行之后,在dst中则存放运算处理的结果。

指令的基本格式如下:二、80868086的指令长度可在1~6字节的范围,如图3-1所示。

其中B l和B0为基本字节,B3~B6将根据不同指令作相应的安排。

(1)B1字节各字段定义如下:OP--指令操作码。

D--表示方向。

D=1寄存器为目的,D=0寄存器为源。

W--表示字节或字处理方式。

W=0为字节指令,W=1为字指令。

(2)B2字节各字段定义如下:MOD--给出指令的寻址方式。

8086的一条指令中,最多可使用两个操作数,它们不能同时位于存储器中,最多只能有一个是存储器操作数。

当MOD=11时为存储器方式,即有一个操作数位于存储器中;MOD=00,没有位移量; MOD01,只有低8位位移量,需将符号扩展8位,形成16位; MOD=10有16位位移量。

当MOD=1l时,为寄存器方式,两个操作数均为寄存器。

REG--表示指令中只有一个操作数,这个操作数为寄存器,可见表3-1,表中左部示出寄存器对应的编码。

R/M--R/M受MOD制约。

当 MOD=11(即寄存器方式时),由此字段给出指令中第二个操作数所在的寄存器编码;当MOD≠11时,此字段用来指出应如何计算指令中使用的存储器操作数的有效地址。

MOD和R /M字段表示的有效地址 EA计算方法如表3-1所示,共2 4种。

(3) B3~B6字节这四个字节一般是给出存储器操作数地址的位移量(即偏移量)和/或立即操作数。

位移量可为8位,也可为16位,这由MOD来决定。

8086规定16位的字位移量的低位字节放于低地址单元,高位字节放于高地址单元。

若指令中只有8位位移量, 8086在计算有效地址时,自动用符号将其扩展成一个16位的双字节数,以保证有效地址的计算不产生错误,实现正确的寻址。

指令中的立即操作数位于位移量的后面。

若B3,B4有位移量,立即操作数就位于B5,B6。

若指令中无位移量,立即操作数就位于B3,B4字节。

总之,指令中缺少的项将由后面存在的项向前顶替,以减少指令长度。

3.2 8086的寻址方式8086的操作数可隐含在操作码中,也可以是操作数字段中的操作数本身,还可以是存放操作数的地址,如寄存器,I/0端口及存储器。

对存储器,给出的或是存储器地址,或是产生存储器地址的信息。

从表3-l可见,共有2 4种计算存储器有效地址EA(Effect Address)的方法。

这些有效地址均在除代码段以外的存储段中,它表示的是离段起始地址的距离。

以上所有能寻得操作数来源的方式,称为寻址方式。

8086的寻址方式也是8位的8080/8085的母集,对不同的操作数8086有不同的方法对它们进行存取,特别是对存储器操作数,增加了许多支持数组处理和字符串处理的寻址方式。

这样,可使指令方便灵活地寻址整个存储器空间,同时,对支持高级语言的使用也是必不可少的。

一、固定寻址( Inherent Addressing)8086的单操作数指令,其操作是规定在CPU中某个固定的寄存器中进行,这个寄存器又被隐含在操作码中,因此,这种寻址方式的指令大多为单字节指令,例如,加减法的十进制调整指令,其操作总是固定在AL寄存器中进行;还有为双操作数指令,例如寄存器人栈和出栈指令PUSH REG和POP REG,其中有一个操作数地址也是固定的堆栈栈顶;还有乘、除法指令虽不是单字节指令,但被乘数,被除数总是放在AL 或AX中。

固定寻址指令中,对固定操作数是被隐含了的。

固定寻址的指令,不需要计算EA,执行速度快,加之大多为单字节指令,因此特别适合在微处理机中使用。

二、立即数寻址( Immediate Addressing)这种方式下的操作数直接存放在指令中,是紧跟在操作码之后的DATA,它作为指令的组成部分放在代码段中,随着取指令一起取到指令队列,执行时直接从指令队列中取,而不必执行总线周期。

立即数可以是8位,也可以是16位。

如果是16位数,则低位字节数存放在低地址单元,高位字节数存放在高地址单元。

例如:MOV AL,C3H ;执行后,(AL)=C3HMOV AX,2050H ;执行后,(AX)=2050H,其中:(AH)=20H,(AL)=50H。

这种寻址方式只能用于源操作数,且因操作数是直接从指令中取得,不执行总线周期,所以这种寻址方式的显著特点是执行速度快,主要用来给寄存器赋初值。

三、寄存器寻址(Register Addressing)其操作数来源于CPU的内部寄存器,指令中直接给出寄存器名。

对于16位的操作数,寄存器可以是:AX,BX,CX,DX,SI,DI,SP和BP;对于8位的操作数,寄存器可以是AL,BL,CL,DL及 AH,BH,CH,DH,可见表3-2中MOD=11时的情况。

例如:INC CX ;执行后,(CX)<-(CX)+1MOV DS,AX ;指令执行前,若(AX)=2100H,执行后,(DS)=2100H,并且(AX)不变。

一条指令中,可以对源操作数采用寄存器寻址方式,也可以对目的操作数采用寄存器寻址方式,还可以两者都用寄存器寻址方式。

采用寄存器寻址方式的指令在执行时,操作就在CPU内部进行,不需要执行总线周期,因此,执行速度快。

3.3 指令执行时间通常,计算机一条指令的执行时间是指取指令和执行指令所花时间的总和。

但是,在8086CPU中,执行部件EU和总线接口部件BIU是并行工作的,BIU可以预先把指令取到指令队列缓冲器存放,形成取指和执行的重叠,这样,在计算指令的执行时间时,就不把取指时间计算在内。

执行指令的时间,除了EU中的基本执行时间外,有些指令在执行过程中可能需多次访问内存,包括取操作数和存放操作结果等,这都要执行总线的读/写周期;而在每次访问内存之前,又需要计算有效地址EA,计算有效地址所需的时间又由寻址方式决定。

不同寻址方式下计算有效地址所需的时间如表3-2所示。

不同功能的指令,其基本执行时间也不相同,这里,将一些常用类指令的基本执行时间列举在表3-3中,其余指令的可参见附录一"时钟周期数"一栏中的第一项数据。

就是同一类指令,因寻址方式不同,访问存储器次数不一,因而执行时间也不同,这里,仅列出加法指令( ADD)的情况,如表3-4所示。

表中"时钟周期"一栏中的第二项"EA"为计算有效地址所需的时间。

'以上所有的时间均用时钟周期数来计量。

综上所述:执行一条指令所花的总时间=基本执行时间十计算EA的时间十执行总线读/写周期的时间。

其中后两项对存储器操作数才有。

除上面讨论的这些因素外,在考虑一第指令所需的执行时间时,还应注意到宇操作数在内存或I/O端口的存放格式也是一个影响因素。

8086的数据总线是16位的,因此,CPU和存储器、I/O端口之间传送数据时,在一个总线周期(基本总线周期为4T)中可以传送 16位数据,即一个字。

但要做到这点,是有条件的。

在第二章讨论存储器组织时,若存/取的字操作数是从偶地址开始的规则字,其存/取可在一个总线周期完成;若存/取的字操作数是从奇地址开始的非规则字时,其存/取需在二个总线周期完成。

因此,这种情况下,每访问内存一次,便需多加一个总线周期的时间。

如果,指令执行的是字节操作,而这个字节数是对偶地址单元或偶数端口进行的存/取,那么,在一个总线周期中,只有数据总线的低8位起传输作用,而高8位则处于空闲状态。

相反,若字节数是对奇地址单元或奇数端口进行存/取,则在一个总线周期中,只有数据总线高8位起传输使用,而低8位则处于空闲状态。

请看例题例1 设8086的时钟频率为5MHZ(即时钟周期=0.2uS),试求ADD指令在各种寻址方式下,指令的执行时间t。

解:根据表3-4:l.两操作数为:寄存器,寄存器,结果在寄存器。

这种情况下,对于字操作数或字节操作数均花3个时钟周期,即t=3×0.2=0.6 us2.两操作数为:寄存器,存储器(用相对基址加变址寻址),结果存寄存器,这时需访问一次内存。

在这种情况下,对于字节操作或对规则字操作,所需时间为t=9+EA=9+12=21(T)第一项9为这种寻址方式下指令基本运算和基本操作时间,第二项为计算EA的时间,则t=21×0.2=4.2 us对于非规则字的操作,则应在上面的时间上再加上一个总线周期时间,如 4T,即t=(21+4)T=5.0ns3.两个操作数为:存储器(用基址变址寻址),寄存器,结果存存储器,这时需访问二次内存。

对于字节操作或对规则字操作,指令执行时间为:t=16+EA=16+8=24(T)=4.8us第一项的16为这种寻址方式下指令基本运算和基本操作时间,第二项为计算EA时间。

对于非规则字操作,指令执行时间应在上面的时间上加上两个总统周期,则t=(6+8+4+4)T=32T=6.4us还有其它三种寻址方式下,ADD的执行时间,请读者练习计算。

从这个例子可以看出:对于同一种ADD指令,因寻址方式不同,执行指令的时间相差甚远,这是指令的时间指标概念。

从表3-4还可以看到:同一类指令使用不同的寻址方式,其指令长度也不一样,即占有的内存的字节数相差也很大,这是指令的空间指标的概念,合起来就是指令的时/空指标。

指令是程序的基本组成单元,那么当要求程序有较高的时/空利用率时,就要求程序设计者,不仅要研究程序的算法,数据结构,还要研究指令与寻址方式的选用,才能编制出理想的程序。

3.48086指令系统从本节开始,我们开始具体学习8086每一条指令的功能与格式。

8086指令系统包含133条基本指令,这些指令与寻址方式组合,再加上不同的操作数类型----字或字节,可构成上千种指令。

按功能的不同,可将这些指令分为六类:1.数据传送类 4.串操作类2.算术运算类 5.控制转移类3.逻辑运算与移位类 6.处理器控制类我们也按这种分类,来逐步学习。

相关主题