第3章 8086(8088)CPU指令系统_第1页
第3章 8086(8088)CPU指令系统_第2页
第3章 8086(8088)CPU指令系统_第3页
第3章 8086(8088)CPU指令系统_第4页
第3章 8086(8088)CPU指令系统_第5页
已阅读5页,还剩140页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第第3 3章章 8086/8088CPU8086/8088CPU指令系统指令系统13.13.1操作数寻址方式操作数寻址方式3.23.2指令系统指令系统第第3 3章章 8086/8088CPU8086/8088CPU指令系统指令系统2微机工作过程中其内部信息有两类:微机工作过程中其内部信息有两类: 一类是控制信息(指令);一类是控制信息(指令); 一类是被加工处理的信息(数据)。一类是被加工处理的信息(数据)。 指令指令:微机中的控制信息就是使计算机进行某种微机中的控制信息就是使计算机进行某种操作的命令,这些命令就称为指令。操作的命令,这些命令就称为指令。 指令系统指令系统:一台计算机所能执行的

2、全部指令的集合称一台计算机所能执行的全部指令的集合称为指令系统。不同的计算机其指令系统是不同的。为指令系统。不同的计算机其指令系统是不同的。第第3 3章章 8086/8088CPU8086/8088CPU指令系统指令系统3 汇编语言指令汇编语言指令或或符号指令符号指令:用字母和其它一些符:用字母和其它一些符号组成的号组成的“助记符助记符”与与操作数操作数等表示的指令称为汇编等表示的指令称为汇编语言指令或符号指令。语言指令或符号指令。例如:例如: MOV AX, BX ; AXBX; AXBX 而其二进制代码(机器代码)为而其二进制代码(机器代码)为89D8H,就是就是1000 1001 110

3、1 1000 B1000 1001 1101 1000 B 不易理解,不易记忆。助记符是不易理解,不易记忆。助记符是MOV。第第3 3章章 8086/8088CPU8086/8088CPU指令系统指令系统43.13.1操作数寻址方式操作数寻址方式3.1.1 8086CPU3.1.1 8086CPU指令格式指令格式 指令由操作码和操作数两部分构成。操作码表明指令要进行什么样的操作;操作数是参加本指令操作的数据。操作数的表现形式比较复杂,可以是参与操作的数值,也可以是参与操作的数值的“地址”,需要通过寻址方式来体现。操作码操作码操作数操作数第第3 3章章 8086/8088CPU8086/8088

4、CPU指令系统指令系统53.1.1 8086/80883.1.1 8086/8088指令格式指令格式8086/80888086/8088机器指令格式通常1-6个字节组成。典型的指令格式由2个字节组成,如下图所示。操作码MOD REGR/M第一字节操作码字段表明该指令要完成什么操作。(W/D/S)第二字节表明参加操作数据的地址,用来表明参入本次操作的数据及其类型,双操作数不能同为存储器操作数。其中:MOD段(2Bit):表示操作数的类型;11寄存器;0 x 存储器REG段(3Bit):表示其中一个操作数为寄存器操作数,用三位编码表示,如000表示AXR/M段(3Bit):表示另外一个操作数为寄存

5、器或存储器操作数4.14.1操作数寻址方式操作数寻址方式WD第第3 3章章 8086/8088CPU8086/8088CPU指令系统指令系统6 有时用8位不够,因此在指令的第二个字节中还可能占3位。除此以外的其他字节用来表示操作数。 W(字位):本指令是对字(W=1)还是对字节(W=0)操作。 D(方向位):表示参加的寄存器是作为目的操作数寄存器(D=1 )还是作为源操作数寄存器(D=0)。 S(符号扩展位):如果立即数为8位,但要求扩展成16位,则S=1;否则S=0。第第3 3章章 8086/8088CPU8086/8088CPU指令系统指令系统7示例:标准机器代码mov ax,BP+0 ;

6、机器代码是;机器代码是 8B 46 00前一个字节前一个字节8B是操作码(含是操作码(含w1表示字操作)表示字操作) 中间一个字节中间一个字节46(01 000 110)是)是 “mod reg r/m”字节,见书上字节,见书上52页。页。 reg000表示目的操作数为表示目的操作数为AX mod01表示对存储器操作表示对存储器操作 r/m110表示源操作数为表示源操作数为BP+D8 最后一个字节就是最后一个字节就是8位位移量位位移量D8001/2字节0/1字节操作码mod reg r/m第第3 3章章 8086/8088CPU8086/8088CPU指令系统指令系统8介绍操作数之前,首先要清

7、楚计算机中的数据可以存放在哪里呢?介绍操作数之前,首先要清楚计算机中的数据可以存放在哪里呢?在计算机运行过程中大量的数据存储器中(MEM),这部分数据处理时需要给出操作数所在存储单元的地址;少量数据可以放在寄存器中,使用时也需要给出其地址;接口中也有寄存器,对其访问需给出其端口地址( 后面介绍)。第第3 3章章 8086/8088CPU8086/8088CPU指令系统指令系统93.1.2 3.1.2 操作数的类型操作数的类型1.1.存储器操作数存储器操作数存放在代码段中的数据是指令格式编码的一部分,在取指令是就随指令被取到CPU,直接可以参加指令操作,通常称为立即数。存储器分为代码段、数据段、

8、附加段和堆栈段,存放在数据段、附加段和堆栈段中的数据即存储器操作数,其地址表示比较复杂,将在寻址方式中做详细介绍;存放在外设端口中的数据称为端口操作数,CPU使用专用的IN、OUT指令来对端口进行访问。2.2.立即操作数立即操作数3.3.寄存器操作数寄存器操作数存放在寄存器中的数据称为寄存器操作数。4.4.端口操作数端口操作数4.14.1操作数寻址方式操作数寻址方式第第3 3章章 8086/8088CPU8086/8088CPU指令系统指令系统103.1.3 3.1.3 操作数寻址方式操作数寻址方式 所谓操作数的寻址方式,是在指令格式中怎样有效的表示出操所谓操作数的寻址方式,是在指令格式中怎样

9、有效的表示出操作数的存放位置,作数的存放位置,CPUCPU在执行该指令时,按照指令格式中的表示找在执行该指令时,按照指令格式中的表示找到并对数据进行存取。到并对数据进行存取。1.1.立即寻址(立即寻址(Immediate AddressingImmediate Addressing) 立即寻址中的操作数作为指令的一部分存放在代码段中,在取指阶段数据随指令一起被取到CPU,这种数据在指令格式中的直接表现为常数。如:MOV AL,34H代码段代码段1000H:0000H1000H:0000H1000H:0100H1000H:0100H操作码操作码34H34HAHAL注:立即数可理解为常数,在指令中

10、只能作为源操作数4.14.1操作数寻址方式操作数寻址方式第第3 3章章 8086/8088CPU8086/8088CPU指令系统指令系统114.1.4 4.1.4 操作数寻址方式操作数寻址方式2.2.寄存器寻址(寄存器寻址(Register AddressingRegister Addressing)寄存器寻址是指操作数存放在规定的寄存器中。寄存器寻址是指操作数存放在规定的寄存器中。例如:MOV AX,BXAHAL1616位寄存器:位寄存器:AXAX、BXBX、CXCX、DXDX、 SPSP、BPBP、DIDI、SISI;8 8位寄存器:位寄存器:AHAH、BHBH、CHCH、DHDH、 AL

11、AL、BLBL、CLCL、DLDL;1616位段寄存器:位段寄存器:CSCS、DSDS、ESES、SSSS。SSSS、DSDS、ESES既可以作为源操作数,也可既可以作为源操作数,也可以作为目的操作数,但不能互为目的操以作为目的操作数,但不能互为目的操作数。作为目的操作数时,源操作数不作数。作为目的操作数时,源操作数不能是立即数,能是立即数,CSCS只能作为源操作数。只能作为源操作数。 BHBL4.14.1操作数寻址方式操作数寻址方式第第3 3章章 8086/8088CPU8086/8088CPU指令系统指令系统124.1.4 4.1.4 操作数寻址方式操作数寻址方式 存储器操作数的寻址方式中

12、,数据都存放于存储单元中,指令操存储器操作数的寻址方式中,数据都存放于存储单元中,指令操作过程中需要作过程中需要BIUBIU通过一个总线周期的访问,才能获取操作数。存储通过一个总线周期的访问,才能获取操作数。存储器操作数的寻址方式是怎么计算出操作数的器操作数的寻址方式是怎么计算出操作数的有效地址有效地址EAEA(Effective Effective AddressAddress)。有效地址)。有效地址EAEA是三个地址量因子一个以上组合,由是三个地址量因子一个以上组合,由CPUCPU执行执行单元单元EUEU计算出来。计算出来。 3.3.存储器寻址(存储器寻址(Memory Addressin

13、gMemory Addressing)位移量因子(位移量因子(DisplacementDisplacement):位移量是指令中直接给出的一个):位移量是指令中直接给出的一个8/168/16位数;位数;基址量因子(基址量因子(BaseBase):由基址寄存器):由基址寄存器BXBX或或BPBP提供的内容;提供的内容;变址量因子(变址量因子(IndexIndex):由变址寄存器):由变址寄存器SISI或或DIDI提供的内容。提供的内容。注:注:3 3个地址量因子组合有个地址量因子组合有7 7种方式。根据组合后地址量因子的特种方式。根据组合后地址量因子的特点,最终合并成点,最终合并成5 5种寻址方

14、式种寻址方式。4.14.1操作数寻址方式操作数寻址方式第第3 3章章 8086/8088CPU8086/8088CPU指令系统指令系统134.1.4 4.1.4 操作数寻址方式操作数寻址方式存储器寻址之直接寻址存储器寻址之直接寻址(Direct Addressing)(Direct Addressing) 在指令格式中直接给出操作数的有效地址,指令执行时CPU根据给出的有效地址,在相应存储单元存取数据。 有效地址EA=位移量(只取位移量因子) MOV AX,2000H 操作如图所示:数据段数据段3000H:0000H3000H:0000H3000H:2000H3000H:2000H34H12H

15、AHAL注:存储器操作数都是给出其首地址双操作数指令中,两个操作数不能都是存储器操作数存储器操作数无超越前缀时,默认段地址为DS;有BP参入寻址时默认为SS4.14.1操作数寻址方式操作数寻址方式第第3 3章章 8086/8088CPU8086/8088CPU指令系统指令系统14存储器寻址之存储器寻址之寄存器间接寻址(寄存器间接寻址(Register Indirect Addressing) 4.1.4 4.1.4 操作数寻址方式操作数寻址方式有效地址EA存放在基址寄存器(BX或BP)或变址寄存器(DI或SI)中 EA=(BX/BP)或(SI/DI)取一个基地址或变地址因子MOV AX,BX

16、操作如图所示 数据段数据段3000H:0000H3000H:0000H3000H:2000H3000H:2000H34H12HAHAL20H00HBX+注:BX、SI和DI访问默认为数据段BP访问默认为堆栈段4.14.1操作数寻址方式操作数寻址方式第第3 3章章 8086/8088CPU8086/8088CPU指令系统指令系统154.1.4 4.1.4 操作数寻址方式操作数寻址方式存储器寻址之寄存器相对寻址(存储器寻址之寄存器相对寻址(Register Relative AddressingRegister Relative Addressing) 操作数有效地址EA 是8/16位的位移量(D

17、ISP8/16)与基址(变址)寄存器BX、BP、DI、SI之和生成。 EA=(BX或BP或SI或DI)+DISP8/16 MOV AX,BX+10H 操作如图所示数据段数据段3000H:0000H3000H:0000H3000H:2010H3000H:2010H34H12HAHAL20H00HBX+0100H0100H注:BX、SI和DI访问默认为数据段BP访问默认为堆栈段有效地址由两个因子构成4.14.1操作数寻址方式操作数寻址方式第第3 3章章 8086/8088CPU8086/8088CPU指令系统指令系统164.1.4 4.1.4 操作数寻址方式操作数寻址方式存储器寻址之基址加变址寻址

18、(存储器寻址之基址加变址寻址(Base-plus-Index AddressingBase-plus-Index Addressing) 有效地址EA是一个基址量与一个变址量之和构成。EA=(BX/BP)+(SI/DI)MOV AX,BX+SI 操作如图所示 数据段数据段3000H:0000H3000H:0000H3000H:3000H3000H:3000H34H12HAHAL20H00HBX+10H00HSI+注:基址因子BP访问默认为堆栈段不能同时取两个基址因子;也不能同时去两个变址因子4.14.1操作数寻址方式操作数寻址方式第第3 3章章 8086/8088CPU8086/8088CPU

19、指令系统指令系统174.1.4 4.1.4 操作数寻址方式操作数寻址方式存储器寻址之相对基址加变址寻址(存储器寻址之相对基址加变址寻址(Base Relative -plus-Index AddressingBase Relative -plus-Index Addressing) 有效地址是一个8/16位移量和一个基址与变址之和构成 EA=(BX/BP)+(SI/DI)+ DISP8/16 MOV AX,BX+SI+10H 操作如图所示 数据段数据段3000H:0000H3000H:0000H3000H:3000H3000H:3000H34H12HAHAL20H00HBX+10H00HSI+

20、3000H:3000H3000H:3000H+0010H0010H注:基址因子BP访问默认为堆栈段不能同时取两个基址因子;也不能同时去两个变址因子4.14.1操作数寻址方式操作数寻址方式第第3 3章章 8086/8088CPU8086/8088CPU指令系统指令系统184.1.4 4.1.4 操作数寻址方式操作数寻址方式存储器操作数和寄存器操作数寻址方式,怎样在指令格式中体现呢?前节介绍的指令格式中的MOD段,MOD=11时表示两个操作数都为寄存器操作数;MOD11时表示R/M段所表示的操作数为存储器操作数,具体如下表所示。MODMODR/MR/M存储器寻址存储器寻址REGREG寻址寻址逻辑地

21、址的计算公式逻辑地址的计算公式W=0W=0W=1W=1mod=00mod=00mod=01mod=01mod=10mod=10mod=11mod=11000000001001010010011011100100101101110110111111DS:BX+SIDS:BX+SIDS:BX+DIDS:BX+DISS:BP+SISS:BP+SISS:BP+DISS:BP+DIDS:SIDS:SIDS:DIDS:DIDS:direct16DS:direct16DS:BXDS:BXDS:BX+SI+disp8DS:BX+SI+disp8DS:BX+DI+disp8DS:BX+DI+disp8SS:BP

22、+SI+disp8SS:BP+SI+disp8SS:BP+DI+disp8SS:BP+DI+disp8DS:SI+disp8DS:SI+disp8DS:DI+disp8DS:DI+disp8SS:BP+disp8SS:BP+disp8DS:BX+disp8DS:BX+disp8DS:BX+SI+disp16DS:BX+SI+disp16DS:BX+DI+disp16DS:BX+DI+disp16SS:BP+SI+disp16SS:BP+SI+disp16SS:BP+DI+disp16SS:BP+DI+disp16DS:SI+disp16DS:SI+disp16DS:DI+disp16DS:DI

23、+disp16SS:BP+disp16SS:BP+disp16DS:BX+disp16DS:BX+disp16ALALCLCLDLDLBLBLAHAHCHCHDHDHBHBHAXAXCXCXDXDXBXBXSPSPBPBPSISIDIDIR/M字段为寄存器操作数R/M字段为存储器操作数直接寻址寄存器间接寻址基址+变址寻址相对寻址相对的基址+变址寻址没有位移量8位位移量16位位移量4.14.1操作数寻址方式操作数寻址方式第第3 3章章 8086/8088CPU8086/8088CPU指令系统指令系统194.1.4 4.1.4 操作数寻址方式操作数寻址方式4 4端口寻址(端口寻址(Port Add

24、ressingPort Addressing) 80X86系列CPU在访问外设时使用10根地址线A9-A0,其实际访问空间为210=1K。根据通常书写习惯当高2为A9A8=00时,直接书写低8位,可直接出现在指令格式中即端口的直接寻址;当A9A800时,要按照16为的数据书写,不能直接出现在指令格式中,要预先送到DX寄存器中,即端口的间接寻址。A9A8A7A6A5A4A3A2A1A0 0 0 X X X X X X X X 0 1 X X X X X X X X 1 0 X X X X X X X X 1 1 X X X X X X X XIN AL,20HOUT 20H,AL20H为端口地址

25、MOV DX,200HIN AL,DXOUT DX,AL200H为端口地址4.14.1操作数寻址方式操作数寻址方式第第3 3章章 8086/8088CPU8086/8088CPU指令系统指令系统20 微处理器指令分类的方法有很多种。可以按其指令长短、寻址方式以及指令功能等进行分类。 按指令长短可以分为单字节指令、二字节指令及多字节指令。 按寻址方式分类,有访问存储器指令,访问寄存器指令和访问输入输出端口指令等。 按功能分类,有数据传送类指令、数据处理类指令、程序控制类指令、CPU控制类指令以及为提高机器求解专门问题的效率或简化程序而设的其他指令等,目前微型机多采用后一种分类方法。4.2 4.2

26、 指令系统指令系统指令的分类指令的分类:第第3 3章章 8086/8088CPU8086/8088CPU指令系统指令系统214.2 4.2 指令系统指令系统8086/8088的指令系统,按照其功能可以分为以下六个功能组: 数据传送(Data Transfer) 算术运算(Arithmetic) 逻辑运算(Logic) 串操作(String Manipulation) 程序控制(Program Control) 处理器控制(Processor Control) 不同指令其操作数的数量不同,主要有3种格式:(1)无操作数指令;(2)单操作数指令;(3)双操作数指令。 在学习指令过程中要注意在学习指

27、令过程中要注意3 3个方面事项个方面事项: :(1)(1)指令隐含功能;指令隐含功能;(2)(2)指令特殊用途;指令特殊用途;(3)(3)指令对标志位影响。指令对标志位影响。 第第3 3章章 8086/8088CPU8086/8088CPU指令系统指令系统224.2.1 4.2.1 数据传送指令数据传送指令4.2 4.2 指令系统指令系统传送指令是将数据送寄存器或者存储单元中;在寄存器之间、寄存器与存储器之间进行数据传送。其传递遵循如图所示规则:立即数立即数DS、ES、SSCS通用寄存器通用寄存器存储器存储器立即数送寄存器立即数送寄存器立即数送存储器立即数送存储器立即数只能立即数只能做源操作数

28、做源操作数寄存器间可以互寄存器间可以互为目的操作数为目的操作数寄存器与存储其可以寄存器与存储其可以互为目的操作数互为目的操作数DS、ES、SS不能互为目的操作数CSCS只能做源操作数只能做源操作数注:图中没有直接连接箭头指向的,可以用过转跳点过度,如图中没有直接连接箭头指向的,可以用过转跳点过度,如MOV DSMOV DS,1234H1234H可以改为:可以改为: MOV AXMOV AX,1234H1234H和和MOV DSMOV DS,AXAX来实现。来实现。第第3 3章章 8086/8088CPU8086/8088CPU指令系统指令系统234.2.1 4.2.1 数据传送指令数据传送指令

29、1. 1. 通用数据传送指令通用数据传送指令 (1)传送指令MOV:MOV DEST,SRC 功能:将源操作数送入指定目的操作数该类指令不影响状态标志位 MOV AX,BX+SI+10H 操作如图所示 数据段数据段3000H:0000H3000H:0000H3000H:3000H3000H:3000H34H12HAHAL20H00HBX+10H00HSI+3000H:3000H3000H:3000H+0010H0010H注注4.2 4.2 指令系统指令系统第第3 3章章 8086/8088CPU8086/8088CPU指令系统指令系统24使用MOV指令应注意以下几点: 立即数无地址,故只能作为

30、源操作数,不能作为目的操作数。 CS只能作为源操作数,不能作为目的操作数。 CPU中的寄存器除IP外都可通过MOV指令访问。 立即数不能直接传送到段寄存器,但可通过其他寄存器或堆栈传送。 例如: MOV AX,1000 MOV DS,AX MOV ES,AX第第3 3章章 8086/8088CPU8086/8088CPU指令系统指令系统25 段寄存器之间不能直接传送。 两个内存单元之间不能直接传送。因为8086的任何一条指令最多只能有一个内存操作数。以下这些指令是错误的:以下这些指令是错误的: MOV 52,AH ;立即数不能作为目的操作数 MOV CS,AX ;CS不能作为目的操作数 MOV

31、 DI,SI ;内存单元之间不能直接传送 MOV 1000,SI ;同上 MOV IP,BX ;IP不能作为目的操作数 MOV DX,BL ;数据类型不对第第3 3章章 8086/8088CPU8086/8088CPU指令系统指令系统264.2.1 4.2.1 数据传送指令数据传送指令1. 1. 通用数据传送指令通用数据传送指令 (2)交换指令XCHG:XCHG DEST,SRC 功能:将源操作数、目的操作数内容互换两个操作数不能同为存储器操作数。MOV AX,BX操作如图所示 BHBLBX注注AHALAX(3)查表指令XLAT:XLAT 功能:ALDS:BX+AL。把BX的内容作为数据段中数

32、据表的首地址,AL内容为查表的项数,将其对应的字节单元的值再送给AL 3000H:0000H3000H:0000H3000H:2000H3000H:2000H3000H:2005H3000H:2005H数据段数据段+2000BX表首址表首址查表项查表项+AL 05HAL 05H34H34H4.2 4.2 指令系统指令系统第第3 3章章 8086/8088CPU8086/8088CPU指令系统指令系统27 指令通过AL或BX寄存器进行表格查找,其功能是从转换表中查找出一个字节的内容,用其取代AL寄存器中的内容。 转换表最长为256个字节,是由用户设计的。执行查表指令前,BX应指向转换表的起点。

33、操作数是隐含的,操作数地址为基址+索引值。 BX为表格起点,AL为索引值。从BX+AL中取一个字节送给AL。例如:AL0FH,BX0040H,DS2000H,执行指令 XLAT 之后,将存储单元2004FH的内容装入到AL中。第第3 3章章 8086/8088CPU8086/8088CPU指令系统指令系统28 例如,数字09对应的格雷码为:18H,34H,05H,06H,09H,0AH,0CH,11H,12H,14H。 将转换表列于表21中。 如果要查一位十进制数6的格雷码,再输出到60H端口,则应执行以下几条指令:MOV BX,OFFSET TABLE ;取TABLE的偏移地址 送BXMOV

34、 AL,6XLAT ;AL得到表中某值(对应的格雷码)OUT 60H,AL第第3 3章章 8086/8088CPU8086/8088CPU指令系统指令系统294.2.1 4.2.1 数据传送指令数据传送指令1. 1. 通用数据传送指令通用数据传送指令 (4)压栈指令PUSH:PUSH SRC 功能:SPSP-2,SPSRC,将栈顶指针上移两个字节后将源操作数压入堆栈 PUSH AX执行如图所示 SS:0000H12H34HAXSS:0102HSS:0100H01H02HSP01H00HSPSPSP堆栈堆栈12H34H(5)弹栈指令POP:POP DEST 功能: DESTSP、SPSP+2,将

35、栈顶内容弹到目的操作数中,然后堆栈的栈顶指针下移两个字节 POP AX执行如图所示 SS:0000HXXHXXHAXSS:0102HSS:0100H01H00HSP01H02HSPSPSP堆栈堆栈12H34H12H34HAX4.2 4.2 指令系统指令系统堆栈操作指令源操作数必须是字操作数,不能是立即数堆栈操作指令源操作数必须是字操作数,不能是立即数第第3 3章章 8086/8088CPU8086/8088CPU指令系统指令系统30例如:执行指令 PUSH AX 后堆栈内容与SP的值如图所示。若执行前: AX1256H SS = 2F00H SP1000H则指令执行后; SP0FFEH SS2

36、F00H AX1256H 内存2FFFFH单元压入12H,2FFFEH单元中压人56H。第第3 3章章 8086/8088CPU8086/8088CPU指令系统指令系统31堆栈遵从“后进先出”的原则,因此在保存寄存器和恢复寄存器的内容时要按照相反的顺序执行一组压入和弹出指令。例如在子程序的开头保护寄存器时顺序为: PUSH AX PUSH BX PUSH CX PUSH DX则子程序返回前,应按如下顺序恢复寄存器值: POP DX POP CX POP BX POP AX第第3 3章章 8086/8088CPU8086/8088CPU指令系统指令系统322. 2. 地址传送指令地址传送指令 4

37、.2.1 4.2.1 数据传送指令数据传送指令(1)(1)取取EAEA指令指令LEALEA:LEA REGLEA REG,MEMMEM 功能:将源操作数的有效地址送功能:将源操作数的有效地址送指定寄存器指定寄存器 LEA BX,DI指令执行如图所示 :数据段数据段4000H:0000H0100HDIXXXXHBX0100HBX4000H:0100HEA=0100H55H66H(2)(2)取地址指令取地址指令LDSLDS:LDS REGLDS REG,MEMMEM 功能:将MEM所对应的双字存储单元数据的高字送入DS,低字送入指令指定的寄存器 。MEM为双字数据为双字数据。LDS BX,DI指令

38、执行如图所示 :数据段数据段4000H:0000H0100HDIXXXXHBXXXXXHDS4000H:0100H55H66H33H44H双字双字6655HBX4433HDS(3)LES(3)LES的原理与的原理与LDSLDS相似相似4.2 4.2 指令系统指令系统第第3 3章章 8086/8088CPU8086/8088CPU指令系统指令系统33例如1:BX0400H,SI003CH 执行指令 LEA BX,BXSI0F62H之后,BX139EH,它是BX,SI和指定的偏移量之和。例如2:当DS1000H,执行指令 LDS SI,0010H之后,SI0180H, DS2000H。800100

39、20SIMDS10010H10011H10012H10013H例如3: DS1000H,BX080AH,存储单元1080AH的字是05A2H,存储单元1080CH中的字是4000H。执行指令 LES DI, BX 之后,DI05A2H, ES4000H。第第3 3章章 8086/8088CPU8086/8088CPU指令系统指令系统344.2.1 4.2.1 数据传送指令数据传送指令3. 3. 标志传送指令标志传送指令 (1)LAHF(1)LAHF指令:标志寄存器低指令:标志寄存器低8 8位送位送AH AH ,其操作如下:,其操作如下:OF DF IF TF SF ZFAFPFCFFRAHOF

40、 DF IF TF SF ZFAFPFCFFRAH(2)SAHF(2)SAHF指令:指令: AHAH送标志寄存器低送标志寄存器低8 8位位 ,其操作如下:,其操作如下:(3)(3)标志寄存器内容压栈指令标志寄存器内容压栈指令PUSHFPUSHF:将标志寄存器内容压入栈顶:将标志寄存器内容压入栈顶 (4)(4)栈顶内容送标志寄存器指令栈顶内容送标志寄存器指令POPFPOPF:将栈顶内容送标志寄存器:将栈顶内容送标志寄存器 4.2 4.2 指令系统指令系统第第3 3章章 8086/8088CPU8086/8088CPU指令系统指令系统35X表示不确定值例如:假定CFPF1,ZFSFAF0,执行指令

41、 LAHF之后,AH中内容为00X0X1X1。第第3 3章章 8086/8088CPU8086/8088CPU指令系统指令系统364 4、输入指令、输入指令 (1) IN AL,DX 或 IN AX,DX 该指令中DX寄存器的内容就是I/O地址,将此端口地址中的8位或16位数据装入到AL或AX寄存器中。此指令允许访问的口地址为0000HFFFFH。 例如:DX1234H,端口1234H在I/O缓冲器中的低字节是23H,端口1234H在I/O缓冲器的高字节是F4H。执行指令 IN AX,DX之后,AL23H,AHF4H。第第3 3章章 8086/8088CPU8086/8088CPU指令系统指令

42、系统37 (2) IN AL, port 或 IN AX, port port为8位端口地址,该指令由指定的I/O端口中将8位或16位数据传送到AL(8位传送)或AX(16位传送)寄存器中。 例如:端口60H在I/O缓冲器中内容为43H,执行指令 IN AL,60H之后,AL43H。 此指令允许访问的口地址范围是00FFH之间。第第3 3章章 8086/8088CPU8086/8088CPU指令系统指令系统386 6、输出指令、输出指令与输入指令相对应的输出指令也有两种。 (1) OUT DX,AL 或 OUT DX,AX 将AL或AX中的内容输出到由DX指定的I/O端口。端口地址范围0FFF

43、FH。例如: MOV DX,0300H MOV DX,02FEH OUT DX,AL OUT DX,AX (2) OUT port,AL 或 OUT port,AX 将AL或AX中的内容输出到由port所指定的端口中。port为8位口地址,其地址范围为0FFH。例如: MOV AL,0FH MOV AX,0F0FH OUT 80H,AL OUT 81H,AX第第3 3章章 8086/8088CPU8086/8088CPU指令系统指令系统39 8086共有五种算术运算指令,具有很强的算术运算能力。 (1)加法指令:可执行五种类型的加法,包括 ADD、ADC、INC、AAA、DAA。 (2)减法指

44、令:可执行六种类型的减法,包括 SUB、SBB、DEC、AAS、DAS、NEG。 (3)乘法指令:可执行三种类型的乘法,包括 MUL、IMUL、AAM。 (4)除法指令:可执行三种除法操作和两个符号扩展操作,以实现带符号的除法,包括 DIV、IDIV、AAD、CBW、CWD。 (5)比较指令:CMP。4.2.2 4.2.2 算术运算类指令算术运算类指令第第3 3章章 8086/8088CPU8086/8088CPU指令系统指令系统404.2.2 4.2.2 算术运算类指令算术运算类指令4.2 4.2 指令系统指令系统 算术运算参加运算的数据既可以是二进制数据也可以是十进制(BCD码)。二进制数

45、据可以进行加、减、乘、除运算。十进制数据分为压缩BCD码和非压缩BCD码,非压缩BCD码可以进行加、减、乘、除运算,压缩BCD码只能进行加、减运算。要求运算数据与结果相同码制表示;BCD码没有专门指令,先用二进制指令进行运算,将结果进行调整。1. 1. 二进制数据加二进制数据加( (减减) )法指令法指令(1)ADD DEST,SRC实现目的操作数加源操作数,结果存放于目的操作数中 注:结果影响所有标志位 ADD AXADD AX,BXBX执行如图所示:执行如图所示: 12H34HAX56H78HBX+68HACHAXCF=0 PF=0AF=0 ZF=0SF=0 OF=0(A)SUB指令与AD

46、D相似,只是进行减法操作第第3 3章章 8086/8088CPU8086/8088CPU指令系统指令系统411. 1. 二进制数据加二进制数据加( (减减) )法指令法指令(2)ADC DEST,SRC实现目的操作数加源操作数,再加上CF的内容,结果存放于目的操作数中 注:该指令主要实现多字节数据加法;结果影响所有标志位 ADC AXADC AX,BXBX执行如图所示:假设执行如图所示:假设CF=0CF=0 12H34HAX56H78HBX+68HACHAXCF=0 PF=0AF=0 ZF=0SF=0 OF=04.2.2 4.2.2 算术运算类指令算术运算类指令CF(B)SBB指令与ADC相似

47、,只是进行减法操作(3)INC DEST 该指令实现了操作数在自身基础上加1 INC BX INC BX 执行如图所示执行如图所示BX+ 1BX注:指令不影响注:指令不影响CFCF (C)DEC指令与INC相似,只是进行减法操作4.2 4.2 指令系统指令系统 INC指令和指令和DEC指令都是单操作数指令指令都是单操作数指令 主要用于对计数器和地址指针的调整主要用于对计数器和地址指针的调整第第3 3章章 8086/8088CPU8086/8088CPU指令系统指令系统42例如: DS=2800H,BX=0280H,SI=001EH, 内存2829EH64H,执行指令 INC BYTE PTR

48、BX+SI之后,存储单元2829EH的内容为65H。 注意:段寄存器不能用此指令加1, 此指令不改变CF标志,而影响SF、ZF、AF、PF、OF标志位。DEC指令一样。第第3 3章章 8086/8088CPU8086/8088CPU指令系统指令系统43 ADC指令为实现多字节的加法运算提供了方便。例:有两个4字节的无符号数相加,这两个数分别放在2000H和3000H开始的存储单元中,低位在前,高位在后。运算后,得到的和放在2000H开始的内存单元中。可以用如下程序段实现这种多字节的加法: MOV SI,2000H ;取第一个数的首地址 MOV AX,SI ;将第一个数的低16位取到AX MOV

49、 DI,3000H ;取第二个数的首地址 ADD AX,DI ;两个数的低16位相加 MOV SI,AX ;低16位相加的结果送到2000H和 2001H单元 MOV AX,SI+2 ;取第一个数的高16位送到AX中 ADC AX,DI+2 ;两个数的高16位连同CF相加 MOV SI+2,AX ;高16位相加的结果送到 2002H,2003H单元。第第3 3章章 8086/8088CPU8086/8088CPU指令系统指令系统44 设第一个数为10008423H, 第二个数为20007F00H, 那么,上面程序段中,ADD指令执行时,将两数的低16位8423H和7F00H相加,则和AX032

50、3H,CF1。 当执行ADC指令时,将两数的高16位1000H和2000H相加,再加上CF的值。所以,在2000H2003H中最后得到的和应该为30010323H。 其中23H在2000H单元中,30H在2003H单元中。第第3 3章章 8086/8088CPU8086/8088CPU指令系统指令系统454.2.2 4.2.2 算术运算类指令算术运算类指令1. 1. 二进制数据加二进制数据加( (减减) )法指令法指令(4)(4)求补指令求补指令 NEGNEG:NEG DESTNEG DEST NEG指令对操作数执行求补运算:用零减去操作数,然后结果返回操作数求补运算也可以表达成:将操作数按位

51、取反后加1,注:结果影响所有标志位 (5)(5)比较指令比较指令CMP CMP :CMP DESTCMP DEST,SRCSRC该指令执行的两个数相减操作,不送回结果, 只影响标志位。执行比较指令之后,可以根据标志判断两个数是否相等、大小关系等4.2 4.2 指令系统指令系统第第3 3章章 8086/8088CPU8086/8088CPU指令系统指令系统46例:求补运算例:求补运算MOV BX,6780HNEG BX程序段执行后:BX=9880H,CF=1,ZF=0,OF=1,SF=1,PF=0,AF=0 。第第3 3章章 8086/8088CPU8086/8088CPU指令系统指令系统47

52、在比较指令之后,根据ZF标志即可判断两者是否相等;若两者相等,比较后结果为0,ZF1;否则ZF0。若两者不等,则可利用比较指令之后的标志位的状态来确定两者的大小; 两个数进行比较时,要考虑是作为无符导数进行比较还是作为带符号数进行比较,因为两者判断大小的标志 (即标准) 是不同的。 两个无符号数比较时,用借位标志CF来判断:显然大数减去小数,不会产生借位,CF0;而小数减去大数,就会有借位,CF1。 当两个带符号数比较大小时,仅由结果的正或负来确定大小就不够了。因为在比较时要做减法,而减法的结果有可能溢出。第第3 3章章 8086/8088CPU8086/8088CPU指令系统指令系统48 1

53、若A0,B0 若参与比较的两数A和B都是正数,则执行CMP指令后,若SF0,AB;反之,AB。 2若A0,B0 预知结果应是AB,且比较之结果应为正数;但若 A112D (70H),B64D (40H) 执行比较ABA(B)112D64D,在机器中的结果是: 结果的最高位为1,SF1,因此若以SF标志来判断则会得出AB的错误结论。 运算结果176127,超出了其表示范围,即产生了溢出,因而导致了错误的结论。第第3 3章章 8086/8088CPU8086/8088CPU指令系统指令系统49 3、若A0,B0 若A64D,B+112D,则显然AB;且运算结果应为负。但 ABA+ (B)(64)

54、+ (112)在机器中的运行结果为: A64 (补码为C0H) B112 (补码为90H) 结果的bit70,SF0。若单独用SF来判断,也会得出AB的错误结论。 同样原因,出现这种运算结果也是由于176小于8位带符号数所表示的最小值128,产生了溢出。第第3 3章章 8086/8088CPU8086/8088CPU指令系统指令系统50 4、若A0,B0 在运算过程中不会产生溢出。可以用SF判断两个数的大小。 综合上述四种情况概括起来,可以得出以下结论: 在没有溢出情况下,即OF0时,SF0,则AB;SF1,则AB; 在发生溢出情况下,即OF1时,SF1,则AB;SF0,则AB。 所以当两个带

55、符号数比较时,要把标志OF与SF结合起来一起考虑。 8088/8086指令系统中分别提供了判断无符号数比较结果的条件转移指令以及判断有符号数比较结果的条件转移指令。第第3 3章章 8086/8088CPU8086/8088CPU指令系统指令系统51例如: CMP AX,2000H ;将AX的内容和2000H相比较,结果影响标志位。 CMP AL,50H ;将AL中的数和50H比较,结果影响标志位。 CMP AX,BX+DI+100 ;将累加器和两个存储单元的数相比,单元地址由BX+DI+100和BX+DI+101指出。 CMP DX,DI ;将DX和DI的内容相比。 比较指令在执行时,会影响标

56、志位AF、CF、OF、PF、SF和ZF。第第3 3章章 8086/8088CPU8086/8088CPU指令系统指令系统524.2.2 4.2.2 算术运算类指令算术运算类指令2. 2. 二进制数据乘法指令二进制数据乘法指令 乘法运算中的目的操作数是隐含的,字节乘法运算隐含在乘法运算中的目的操作数是隐含的,字节乘法运算隐含在ALAL中,运算结果是中,运算结果是1616位的,存放在位的,存放在AXAX中;字乘法运算隐含在中;字乘法运算隐含在AXAX中,中,运算结果是运算结果是3232位的,存放在位的,存放在DXDX(高(高1616位)和位)和AXAX(低(低1616位)中位)中 。(1)无符号数

57、乘法指令:无符号数乘法指令: MUL SRC操作数为字节数据,则实现操作数为字节数据,则实现AL内容内容与与SRC相乘,结果存放于相乘,结果存放于AX中;如中;如果操作数为字数据,则实现果操作数为字数据,则实现AX内容内容与与SRC相乘,结果存放于相乘,结果存放于DX和和AX中。中。 MUL BLMUL BL执行如图所示 20HAL40HBL00HAX 08H(2)有符号数乘法指令:有符号数乘法指令: IMUL SRC与与MULMUL指令不同的是参入运算的数据指令不同的是参入运算的数据为有符号数据为有符号数据乘法运算对标志位的影响只考虑乘法运算对标志位的影响只考虑OFOF、CFCF位,既不代表

58、进位也不代位,既不代表进位也不代表溢出;运算结果的高半部分有表溢出;运算结果的高半部分有有效数据,则有效数据,则OF=CF=1OF=CF=1,否则为,否则为0 04.2 4.2 指令系统指令系统第第3 3章章 8086/8088CPU8086/8088CPU指令系统指令系统53无符号数乘法指令,若运算结果的高一半是0,则标志OF与CF为0;否则,OFCF1,以表示有效数字是在AH或DX中。带符号数乘法指令,若结果中的高一半是结果中的低一半符号位的扩展,则OFCF0,否则OFCF1。 例如,若是8位数相乘,结果AH中D0D7各位相等,且与AL的D7相等,则OFCF0。OFCF1表示AH或DX的内

59、容是积的有效数字。第第3 3章章 8086/8088CPU8086/8088CPU指令系统指令系统54 例如:AX04E8H,DS0100H,BX0006H,存储单元01006H的字是4E20H,执行指令 IMUL BX 应为 IMUL WORD PTR BX之后, DX017FH ,AX4D00H,OFCF1。例如:执行以下指令 MOV AL,0FBH MOV BH,02H IMUL BH 可得到AX0FFF6H,即10,CF0,OF0。0FBH为5。 补码0FBH=11111011B, 取反:00000100B,加1:00000101B为5。 若将IMUL换成MUL,则得到AX01F6H,

60、即502,CFl,OFl。第第3 3章章 8086/8088CPU8086/8088CPU指令系统指令系统554.2.2 4.2.2 算术运算类指令算术运算类指令3. 3. 二进制数据除法指令二进制数据除法指令除法运算的目的操作数是隐含的,字节(被除数16位、除数8位)除法运算隐含在AX中,运算结果是两个8位数,商存放在AL中,余数存放在AH中;字(被除数32位、除数16位)除法运算隐含在DX和AX中,运算结果是两个16位数,商存放在AX中,余数存放于DX中。 (1)(1)无符号除法指令无符号除法指令 DIV SRCDIV SRC除法运算的操作数可以是通用寄除法运算的操作数可以是通用寄存器操作

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论