第三章 80868088的指令系统
- 格式:pdf
- 大小:247.99 KB
- 文档页数:16
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将根据不同指令作相应的安排。
表3-1 8086指令格式(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,表中左部示出寄存器对应的编码。
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.处理器控制类我们也按这种分类,来逐步学习。