第三章 80868088的指令系统

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

3.1 指令的基本格式

一、指令构成

微计算机的指令系统通常由几十种或百余种指令组成(可见表2-1)。每种指令又由两个字段(Field)构成:

l.操作码(OP-Code)字段

该字段指示计算机所要执行的操作类型,由一组二进制代码表示,在汇编语言中又用助记将(Mnemonic)代表。8086执行指令时,首先将操作码从指令队列取入执行部件EU中的控制单元,经指令译码器识别后,产生执行本指令操作所需的时序性控制信号,控制计算机完成规定的操作。

2.操作数(Oprand)字段

该字段则是指出指令执行的操作所需的操作数。在操作数字段中,可以是操作数本身,或是操作数地址或是操作数地址的计算方法。微计算机中此字段通常可有一个或两个,称前者为单操作数指令,称后者为双操作数指令。而双操作数又分别称为源操作数src (source)和目的操作数dst(destination)。在指令执行之前,src和dst均为参加运算处理的两个操作数,指令执行之后,在dst中则存放运算处理的结果。

指令的基本格式如下:

二、8086

8086的指令长度可在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,表中左部示出寄存器对应的编码。

R/M--R/M受MOD制约。当MOD=11(即寄存器方式时),由此字段给出指令中第二个操作数所在的寄存器编码;当MOD≠11时,此字段用来指出应如何计算指令中使用的存储器操作数的有效地址。MOD和R/M字段表示的有效地址EA计算方法如表3-1所示,共2 4种。

表3-2 R/M(寄存器/存储器)字段编码及有效地址计算方法

(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)=C3H

MOV 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)+1

MOV DS,AX ;指令执行前,若(AX)=2100H,执行后,(DS)=2100H,并且(AX)不变。

一条指令中,可以对源操作数采用寄存器寻址方式,也可以对目的操作数采用寄存器寻址方式,还可以两者都用寄存器寻址方式。采用寄存器寻址方式的指令在执行时,操作就在CPU内部进行,不需要执行总线周期,因此,执行速度快。

3.3 指令执行时间

通常,计算机一条指令的执行时间是指取指令和执行指令所花时间的总和。但是,在8086CPU中,执行部件EU和总线接口部件BIU是并行工作的,BIU

相关文档
最新文档