第三章8086指令系统与汇编语言程序设计-1_第1页
第三章8086指令系统与汇编语言程序设计-1_第2页
第三章8086指令系统与汇编语言程序设计-1_第3页
第三章8086指令系统与汇编语言程序设计-1_第4页
第三章8086指令系统与汇编语言程序设计-1_第5页
已阅读5页,还剩197页未读 继续免费阅读

下载本文档

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

文档简介

1、第三章第三章 80868086微处理器的指令微处理器的指令系统系统3-1 3-1 寻址方式寻址方式3-2 3-2 指令系统指令系统 指令系统概念和指令组成指令系统概念和指令组成 (1 1)、指令系统概念)、指令系统概念 计算机通过执行指令序列来解决问题计算机通过执行指令序列来解决问题, , 每种计算机都有一组指令集提供用户使用每种计算机都有一组指令集提供用户使用, , 这组这组指令集就称为计算机的指令系统。指令集就称为计算机的指令系统。 (2 2)、指令组成)、指令组成 计算机中指令由计算机中指令由操作码字段和操作数字段操作码字段和操作数字段两部分组成。两部分组成。一条可以由一条可以由1616

2、个字节组成。个字节组成。 操作码字段操作码字段-指示计算机要指示计算机要执行的操作执行的操作, 操作数字段操作数字段-指出在指令执行操作过程中所需要的操作数;指出在指令执行操作过程中所需要的操作数; 可以是可以是操作数本身操作数本身; 可以是可以是操作数地址或是地址的一部分;操作数地址或是地址的一部分; 可以是指向操作数可以是指向操作数地址的指针地址的指针或或其他有关其他有关 操作数的信息。操作数的信息。8086/80888086/8088的寻址方式的寻址方式4 4指令格式指令格式操作码操作码 操作数操作数 , 操作数操作数 执行何种操作执行何种操作目标操作数目标操作数源操作数源操作数参加操作

3、的数据或数据存放的地址参加操作的数据或数据存放的地址5 5指令格式:指令格式: 零操作数指令:零操作数指令: 操作码操作码 单操作数指令:单操作数指令: 操作码操作码 操作数操作数双操作数指令:双操作数指令: 操作码操作码 操作数,操作数操作数,操作数多操作数指令:多操作数指令: 三操作数及以上三操作数及以上(3 3)、操作数的存放)、操作数的存放操作数的存放不外乎三种情况:操作数的存放不外乎三种情况:操作数包含在指令中操作数包含在指令中 即指令的操作数字段包含操作数本身。这种操作数为即指令的操作数字段包含操作数本身。这种操作数为立即数立即数。例:例:MOV AL , 08HMOV AL ,

4、08H操作数包含在的一个内部寄存器中操作数包含在的一个内部寄存器中例:例:INC CXINC CX指令中的操作数字段是指令中的操作数字段是CC内部寄存器的一个内部寄存器的一个编码编码。这种寻址方式称为这种寻址方式称为寄存器寻址寄存器寻址。8086/80888086/8088的寻址方式的寻址方式操作数在内存数据区操作数在内存数据区 操作数在内存数据区,操作数字段包含着此操作数地址。操作数在内存数据区,操作数字段包含着此操作数地址。 在在6 6中,任何中,任何内存地址是由两部分组成:内存地址是由两部分组成: 段的基地址段的基地址:单元所在段的基地址:单元所在段的基地址(大部分情况是数据段寄存器中)

5、;(大部分情况是数据段寄存器中); 段内偏移量段内偏移量:此单元与段基地址的距离。:此单元与段基地址的距离。 有效地址(有效地址(Effective AddressEffective Address) : 段内偏移量为适应各种数据结构的需要,可以有几个部分组段内偏移量为适应各种数据结构的需要,可以有几个部分组成,所以也把它称为成,所以也把它称为有效地址有效地址。8086/80888086/8088的寻址方式的寻址方式寻址方式不同寻址方式不同EAEA的构成不同。的构成不同。归纳归纳EAEA可有多种情况构成:可有多种情况构成: 直接寻址,寄存器间接寻址,寄存器相对寻址,直接寻址,寄存器间接寻址,寄

6、存器相对寻址, 基址加变址寻址,相对基址加变址寻址。基址加变址寻址,相对基址加变址寻址。 寻址方式寻址方式如何寻找操作数。如何寻找操作数。不同寻址方式实质上是构成它不同寻址方式实质上是构成它段内的偏移量的方法段内的偏移量的方法不同不同。8086/80888086/8088的寻址方式的寻址方式1 1、80868086、80888088寻址方式寻址方式(一)立即寻址(一)立即寻址 (Immediate addressingImmediate addressing)(二)寄存器寻址方式(二)寄存器寻址方式 (Register addressing)(Register addressing)(三)直接

7、寻址(三)直接寻址 (Direct addressingDirect addressing)(四)寄存器间接寻址方式(四)寄存器间接寻址方式(Register indirect addressingRegister indirect addressing)(五)寄存器相对寻址方式(五)寄存器相对寻址方式(Register relative addressingRegister relative addressing) 或变址寻址(或变址寻址(Index AddressingIndex Addressing)(六)基址加变址寻址方式(六)基址加变址寻址方式(Based indexed addre

8、ssingBased indexed addressing)(七)相对基址加变址寻址方式(七)相对基址加变址寻址方式(Relative based indexed Relative based indexed addressingaddressing)8086/80888086/8088的寻址方式的寻址方式(一)(一)立即寻址立即寻址(Immediate addressing) 操作数直接存放在指令中,紧跟在操作码之后操作数直接存放在指令中,紧跟在操作码之后,作为指,作为指令的一部分,存放在代码段里,这种操作数称为立即数。令的一部分,存放在代码段里,这种操作数称为立即数。 立即数可以是位或立即

9、数可以是位或16位的。位的。 例:例: MOV AL,05H 指令执行后指令执行后: (AL)=05H.操作码操作码05H05H代代码码段段05H05H.ALAL指指令令8086/80888086/8088的寻址方式的寻址方式( (二二) )、寄存器寻址方式、寄存器寻址方式 (Register addressing)(Register addressing)操作数在寄存器中,指令指定寄存器号。操作数在寄存器中,指令指定寄存器号。 这种寻址方式因为操作数在寄存器中,不需要访问存储这种寻址方式因为操作数在寄存器中,不需要访问存储 器,器,运算速度较高运算速度较高。例:例:指令执行前指令执行前: (

10、AX)3064 (SS)1234 MOV SS,AX指令执行后指令执行后:(SS)3064H (AX)保持不变)保持不变 指令执行前:指令执行前:指令执行后指令执行后:SSSSAXAX3064H3064H3064H3064H1234H1234H3064H3064H8086/80888086/8088的寻址方式的寻址方式(三)直接寻址(三)直接寻址(Direct addressingDirect addressing) 操作数操作数地址的位偏移量地址的位偏移量,直接包含在指令中直接包含在指令中, 存放在代码段中指令操作码之后,存放在代码段中指令操作码之后, 但但操作数一般存放在数据段中操作数一般

11、存放在数据段中, 必须先必须先求出操作数的物理地址求出操作数的物理地址, 然后再访问存储器才能取得操作数。然后再访问存储器才能取得操作数。或(或(10H10H)物理地址物理地址 : PA: PA16d16d(DS)+EA(DS)+EAIBMPCIBMPC机允许数据存放在数据段以外的其它段中。机允许数据存放在数据段以外的其它段中。此时应在指令中此时应在指令中指定段跨越(可以是指定段跨越(可以是CSCS,SSSS,ESES)。)。8086/80888086/8088的寻址方式的寻址方式 例:例: MOV ES:3100H,BX 例:例:MOV AX,3100H(DS)=6000H , (63100

12、H)=3050H 则则:(AX)=3050H直接寻址方式直接寻址方式6000H6000H.操作码操作码00003131.50H50H30H30H.6 0 0 0 06 0 0 0 03 1 0 03 1 0 0+ +6 3 1 0 06 3 1 0 063100H63100H30H30H50H50HAHAHALAL代代码码段段数数据据段段DSDS8086/80888086/8088的寻址方式的寻址方式(四四)寄存器间接寻址方式寄存器间接寻址方式(Register indirect addressing) 操作数在存储器中操作数在存储器中, ,操作数地址的操作数地址的1616位偏移量包含在:位偏

13、移量包含在:BPBP、BXBX、SI SI、DIDI寄存器寄存器中。中。 1 1、若选择、若选择SI SI、DIDI、BXBX作为间接寻址作为间接寻址操作数一般在现行数据段区域中,用操作数一般在现行数据段区域中,用(DS)(DS)作为段地址。作为段地址。即操作数物理地址为:即操作数物理地址为: 物理地址物理地址PA=16 d PA=16 d (DSDS)+ +(BXBX) 物理地址物理地址PA=16 d PA=16 d (DSDS)+ +(SI SI) 物理地址物理地址PA=16 d PA=16 d (DSDS)+ +(DIDI)8086/80888086/8088的寻址方式的寻址方式例:例:

14、MOV BX,DI (DS)=6000H (DI)=2000H PA=62000H (62000H)=50A0H (BX)=50A0H6000H6000H2000H2000HDSDSDIDI6 0 0 0 06 0 0 0 02 20 00 00 0+ +6 2 0 0 06 2 0 0 0.AOHAOH50H50H.62000H62000H50H50HA0HA0HBLBLBHBH数数据据段段寄存器间接寻址方式寄存器间接寻址方式 MOV BX,DI8086/80888086/8088的寻址方式的寻址方式2 2 、若选择、若选择BPBP寄存器作为间接寻址寄存器作为间接寻址 操作数在堆栈段区域中,

15、用操作数在堆栈段区域中,用SS寄存器的内容作为段地址。寄存器的内容作为段地址。 操作数物理地址操作数物理地址: PA=16d (SS)+(BP)例:例: MOV BP, AX执行前:执行前: (SS)=1000H , (BP)=3000H , (AX)=1234H执行后:执行后:PA=13000H (13000H)=1234H1000H1000H3000H3000HSSSSBPBP1 0 0 0 01 0 0 0 03 30 00 00 0+ +1 3 0 0 01 3 0 0 0.34H34H12H12H.13000H13000H12H12H34H34HALALAHAH堆堆栈栈段段寄存器间接

16、寻址方式寄存器间接寻址方式 MOV BP, AX8086/80888086/8088的寻址方式的寻址方式( (五五) ) 寄存器相对寻址方式寄存器相对寻址方式(Register relative addressing) 或变址寻址或变址寻址 (Index Addressing) 操作数的操作数的有效地址是一个基址或变址寄存器的内容有效地址是一个基址或变址寄存器的内容 与指令中指定的与指令中指定的8位或位或16位位移量(位位移量(displacement)之和。)之和。 EAEA= =(BX)(BX)(SI)(SI)(DI)(DI)+ +8位位移量8位位移量16位位移量16位位移量(BP)(BP

17、)8086/80888086/8088的寻址方式的寻址方式8086/8088 CPU 中有中有两个变址寄存器两个变址寄存器 : 源变址寄存器源变址寄存器 SI ; 目的变址寄存器目的变址寄存器 DI 。 操作数一般在内存的数据段中,但允许段跨越。操作数一般在内存的数据段中,但允许段跨越。除有段跨越前缀之外,形成物理地址有二种方式:除有段跨越前缀之外,形成物理地址有二种方式:PA=16d (SS)+PA=16d (SS)+ (BP)(BP)+ +8位位移量8位位移量16位位移量16位位移量PA=16d (DS)+PA=16d (DS)+(BX)(BX)(SI)(SI)(DI)(DI)+ +8位位

18、移量8位位移量16位位移量16位位移量8086/80888086/8088的寻址方式的寻址方式例:例: MOV AX, COUNT BP或或MOV AX, COUNT+BP或或MOV AX, COUNT+BP COUNT为为16位位移量。位位移量。指令执行前指令执行前: (SS)=5000H, (BP)=3000H,COUNT=2040H,(AX)=1234H指令执行后指令执行后:EA=5040HPA=55040H(55040H)=5548H(AX)=5548H 寄存器相对寻址方式寄存器相对寻址方式MOV AX,COUNTBPOPOPOPOP40H40H20H20H.48H48H55H55H.

19、55H55H48H48H存储器存储器操操作作码码位移量位移量COUNTCOUNT代代码码段段堆堆栈栈段段55040H55040H50000H50000HAHAHALAL8086/80888086/8088的寻址方式的寻址方式( (六六) ) 基址加变址寻址方式基址加变址寻址方式(Based indexed addressing) 操作数的操作数的有效地址是一个基址寄存器和一个变址寄存器的有效地址是一个基址寄存器和一个变址寄存器的内容之和内容之和,基址寄存器名和变址寄存器名均有指令指定。,基址寄存器名和变址寄存器名均有指令指定。(BP)(BP)+ +(DI)(DI)(SI)(SI)EA=EA=(

20、BX)(BX)+ +(DI)(DI)(SI)(SI)EA=EA=8086/80888086/8088的寻址方式的寻址方式除有段跨越前缀之外,形成物理地址有二种方式:除有段跨越前缀之外,形成物理地址有二种方式:PA=16d(DSPA=16d(DS)+)+ (BX)(BX)+ +(DI)(DI)(SI)(SI)PA=16d(SPA=16d(SS S)+)+ (BP)(BP) + +(DI)(DI)(SI)(SI)8086/80888086/8088的寻址方式的寻址方式例:例: MOV AX, BXSI或或 MOV AX, BX+SI执行指令前执行指令前: (DS)=3200H, (BX)=0456

21、H, (SI) =1094H (334EAH)=4567H执行指令后执行指令后: EA=14EAH PA=334EAH (AX)=4567H基址加变址寻址方式基址加变址寻址方式 MOV AX,BX+SI.67H67H45H45H存储器存储器32000H32000H334EAH334EAH45H45H67H67HALALAHAH数数据据段段.8086/80888086/8088的寻址方式的寻址方式(七)相对基址加变址寻址方式(七)相对基址加变址寻址方式(Relative based indexed addressing)操作数操作数有效地址是一个基址寄存器和一个变址寄存器的内容有效地址是一个基址

22、寄存器和一个变址寄存器的内容和和8位或位或16位位移量之和位位移量之和 。(BP)(BP) + +(DI)(DI)(SI)(SI)+ +8位位移量8位位移量16位位移量16位位移量EA=EA=8086/80888086/8088的寻址方式的寻址方式除有段跨越前缀之外,形成物理地址有二种方式:除有段跨越前缀之外,形成物理地址有二种方式:(DI)(DI)PA=16d(SSPA=16d(SS)+)+ (BP)(BP) + +(SI)(SI)+ +8位位移量8位位移量16位位移量16位位移量(DI)(DI)PA=16d(DSPA=16d(DS)+)+ (BX)(BX) + +(SI)(SI)+ +8位

23、位移量8位位移量16位位移量16位位移量8086/80888086/8088的寻址方式的寻址方式例:例:MOV AX, MASKBXDIMOV AX, MASK BX+DIMOV AX,MASX+BX+DI执行指令前执行指令前:(DS)=3000H(BX)=1346H(DI)=0500HMASK=1234H(32A7AH)=4050H执行指令后执行指令后:EA=2A7AHPA=32A7AH(AX)=4050H 相对基址加变址相对基址加变址MOV AX, MASK+BX+DIOPOPOPOP34H34H12H12H.50H50H40H40H存储器存储器30000H30000H32A7AH32A7

24、AH40H40H50H50HALALAHAH数数据据段段操操作作码码位移位移量量MASKMASK代代码码段段8086/80888086/8088的寻址方式的寻址方式思考题思考题1、设、设DS=2000H,SS=3000H,BP=0200H,SI=4000H,BUF=1000H,BX=2000H。确定下列每条指令访问内存的物理地址,并且指出源操作数确定下列每条指令访问内存的物理地址,并且指出源操作数及目的操作数的寻址方式。及目的操作数的寻址方式。 (1) MOV AL, 1234H (2)MOV CL, BX+100H (3) MOV AH, BUFBX+SI (4)MOV DX, BX (5)

25、 MOV SI,BX (6)MOV AX, BP+1234H2、已知:、已知:DS=1000H,BX=0200H,SI=02H,内存内存10200H10205H单元的内容分别为单元的内容分别为10H,2AH,3CH,46H,59H,6BH。下列每条指令执行。下列每条指令执行 完后完后AX寄存器的内容各是什么?寄存器的内容各是什么? (1) MOV AX, 0200H (2) MOV AX, 200H (3) MOV AX, BX (4) MOV AX, 3BX (5) MOV AX, BX+SI (6) MOV AX, 2BX+SI 8086/80888086/8088的寻址方式的寻址方式80

26、86/80888086/8088的指令系统中共有的指令系统中共有9292种基本指令。种基本指令。可以分成可以分成6 6个功能组个功能组:1数据传送数据传送(Data transfer)2算术运算(算术运算(Arithmetic)3逻辑运算和移位指令逻辑运算和移位指令(Logic& Shift)4串操作串操作(String manipulation)5控制转移(控制转移(Control Transfer)6处理器控制(处理器控制(Processor Control)8086/80888086/8088指令系统指令系统功能:功能: 负责把数据、地址或立即负责把数据、地址或立即数数传传 送到送到寄存

27、器或存储单元寄存器或存储单元。特点:特点: 它是计算机最基本、最重要的一种操作,使用比例最高。它是计算机最基本、最重要的一种操作,使用比例最高。种类种类(分四种分四种): 除除 SAHF和和POPF指令外,对标志位没有影响。指令外,对标志位没有影响。数据传送指令数据传送指令(General Purpose TransferGeneral Purpose Transfer)8086提供方便灵活的通用的传送操作,适用于大多数操作数。提供方便灵活的通用的传送操作,适用于大多数操作数。通用传送指令包括:通用传送指令包括:1、MOV (Movement)2、PUSH (Push word onto st

28、ack) POP (Pop word off stack)3、XCHG (Exchange)4、XLAT (Translate)数据传送指令数据传送指令1MOV dest, src ; (dest) (src) 目的目的源源 目的目的 源源 把一个字节把一个字节(B)或一个字(或一个字(W)操作数由源传送至目的。)操作数由源传送至目的。 实现实现:寄存器寄存器 寄存器寄存器/存储器之间;存储器之间;立即数立即数寄存器寄存器/存储器存储器寄存器寄存器/存储器存储器段寄存器之间的数据传送。段寄存器之间的数据传送。数据传送指令数据传送指令 MOV DS, AX ;DS AX MOV CH, 20 ;

29、CH 20 MOV BL, AH ;BLAH MOV AX, BX ;AXBX MOV BX, AX ;BXAX MOV AX, BX+0060H例:例:数据传送指令数据传送指令 j MOV MEM2 , MEM1 错。错。MOV AX , MEM1MOV MEM2 , AX 对。对。 例例 : MOV DS,2000H 错。错。 M OV AX, 2000H MOV DS , AX 对。对。 数据传送指令数据传送指令l MOV ES , DS ; 错错MOV AX , DSMOV ES , AX ; 对对 。 例:例:MOV CS,AX ; 错错 MOV AX,CS ;对对 。 MOV IP

30、, AX ;错错 MOV AX, IP ; 对。对。数据传送指令数据传送指令BX、SI、DI间址间址默认段地址为默认段地址为DS,BP间址间址默认段地址默认段地址SS。这样做为了允许程序员连续用两条指令分别对这样做为了允许程序员连续用两条指令分别对SS和和SP寄寄存器赋值,同时又防止堆栈空间变动过程出现中断。存器赋值,同时又防止堆栈空间变动过程出现中断。*在修改在修改SS和和SP的指令之间不要插入其他指令。的指令之间不要插入其他指令。(除(除SAHF、POPF以外)。以外)。数据传送指令数据传送指令l应用举例:将应用举例:将1000H开始的开始的100个存储单元全部个存储单元全部填充为填充为A

31、SCII码码2AH(*)。程序段如下:程序段如下: MOV DI,1000H MOV CX,64H MOV AL,2AHAGAIN:MOV DI,AL INC DI DEC CX JNZ AGAIN HLT数据传送指令数据传送指令上程序段存放在上程序段存放在代码段代码段中中,設設(CS)=109EH,则各条指令存放地址如下:则各条指令存放地址如下: CS : IP 指令指令109E : 0100 MOV DI,1000H109E : 0103 MOV CX,64H109E : 0106 MOV AL,2AH109E : 0108 MOV DI,AL109E : 010A INC DI109E

32、: 010B DEC CX109E : 010C JNZ 0108109E : 010E HLT109E : 0110数据传送指令数据传送指令 写入写入2AH(2AH(* *) )后,数据段中相应存储单元的内容改后,数据段中相应存储单元的内容改变如下:变如下:DS:1000 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2ADS:1010 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2ADS:1020 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2ADS:10

33、30 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2ADS:1040 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2ADS:1050 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2ADS:1060 2A 2A 2A 2A数据传送指令数据传送指令3939一般数据传送指令例一般数据传送指令例判断下列指令的正确性:判断下列指令的正确性:lMOV AL,BXlMOV AX,SI05HlMOV BXBP,BXlMOV DS,1000HlMOV DX,09HlMOV 1

34、200,SI什么是堆栈?什么是堆栈? 按按“后进先出后进先出(LIFO)”(LIFO)”方式工作的存储区方式工作的存储区域。堆栈域。堆栈以字为单位以字为单位进行压入弹出操作。进行压入弹出操作。为什么要设置堆栈?为什么要设置堆栈?为什么要按为什么要按 “ “后进先出后进先出”方式工作?方式工作?2 2 堆栈操作指令堆栈操作指令数据传送指令数据传送指令q 调用子程序(或过程)或发生中断时要调用子程序(或过程)或发生中断时要保护断点的地址保护断点的地址, 子程序或中断返回时恢复断点。子程序或中断返回时恢复断点。数据传送指令数据传送指令q 调用子程序(或过程)或发生中断时要保护断点的地址,调用子程序(

35、或过程)或发生中断时要保护断点的地址, 子程序或中断返回时恢复断点。子程序或中断返回时恢复断点。子程序嵌套子程序嵌套.断点2(L)断点2(L)断点2(H)断点2(H)断点1(L)断点1(L)断点1(H)断点1(H).(SP)(SP)先先压压入入后后压压入入先先弹弹出出后后弹弹出出堆堆栈栈段段断点地址压入和弹出情况断点地址压入和弹出情况主主程程序序子子程程序序1 1子子程程序序2 2断点1断点1断点2断点2弹出弹出断点2断点2弹出弹出断点1断点1数据传送指令数据传送指令堆栈在内存中的情况:堆栈在内存中的情况: 可以可以用一条立即数传送指令给用一条立即数传送指令给SP赋值赋值,确定,确定SP在在S

36、S段段中的初始位置。中的初始位置。例:例:设:设: (SS)=9000H , 堆栈段为堆栈段为64KB MOV SP,0E200H ;(SP)=0E200H则:则: 整个堆栈段的物理地址范围为:整个堆栈段的物理地址范围为: 堆栈在内存中的情况如右图所示:堆栈在内存中的情况如右图所示:.偏移地址偏移地址物理地址物理地址00000H(低地址)00000H(低地址)90000H90000H9E200H9E200H9FFFFH9FFFFHFFFFHFFFFH(SP)=E200H(SP)=E200H0000H0000H堆堆栈栈段段数据传送指令数据传送指令 压栈指令压栈指令 PUSH src ; src为

37、为16位操作数位操作数 例:例:PUSHAX;将;将AX内容压栈内容压栈 执行操作:(执行操作:(SP)-1高字节高字节AH (SP)-2低字节低字节AL (SP)(SP)- 2数据传送指令数据传送指令设(设(AXAX)=1020H=1020H,执行示意图如下图,执行示意图如下图低地址低地址存储区存储区(SS段)段)执行前执行前(AX)=1020(SP)存储区存储区(SS段)段)进栈方向进栈方向执行后执行后2010(AL)(AH)PUSH AX指令执行示意图指令执行示意图(SP)-2(SP)高地址高地址低地址低地址高地址高地址(SP)- -1数据传送指令数据传送指令注意进栈方向是注意进栈方向是

38、高地址高地址向向低地址低地址发展。发展。压栈指令的格式为:压栈指令的格式为: PUSH reg PUSH mem/reg PUSH segreg例如:例如: PUSH AX PUSH BX PUSH DS 数据传送指令数据传送指令 弹出指令弹出指令 POPdest例:例:POPBX;将栈顶内容弹至;将栈顶内容弹至BX 执行操作:(执行操作:(BL)(SP) (BH)(SP)+1 (SP)(SP)+2数据传送指令数据传送指令POP BX POP BX 的执行示意图如下图所示的执行示意图如下图所示低地址低地址存储区存储区(SS段)段)出栈方向出栈方向执行前执行前2010POP BX指令执行示意图指

39、令执行示意图(SP)存储区存储区(SS段)段)执行后执行后(BX)=1020(SP)(SP)+1(SP)+2BX20201010高地址高地址低地址低地址高地址高地址数据传送指令数据传送指令 堆栈操作都按字操作。堆栈操作都按字操作。 PUSH , POP 指令的操作数可能有三种:指令的操作数可能有三种:寄存器(通用寄存器,地址指针,变址寄存器)寄存器(通用寄存器,地址指针,变址寄存器),段寄存器段寄存器(CS除外,除外,PUSH CS 合法,合法,POP CS 非法)非法),存储器。存储器。 执行执行PUSH 指令指令, (SP)-2 (SP),低字节放在低地址,高字节放在高地址。低字节放在低地

40、址,高字节放在高地址。随着推入堆栈内容增加,堆栈就扩展,随着推入堆栈内容增加,堆栈就扩展,SP的值减少,的值减少, 但但SP总是指向栈顶,总是指向栈顶, 堆栈工作原则堆栈工作原则后进先出。后进先出。 堆栈最大容量即为堆栈最大容量即为SP的初值与的初值与SS之间的差。之间的差。数据传送指令数据传送指令(Exchange)Exchange)格式:格式:XCHG dest , src;(dest) (src)执行操作:执行操作: 可以可以 实现:实现: 注意:注意: 存储器之间不能交换,存储器之间不能交换,两个操作数中必须有一个在寄存器中;两个操作数中必须有一个在寄存器中; 段寄存器不能作为一个操作

41、数;段寄存器不能作为一个操作数; 允许字或字节操作,不影响标志位。允许字或字节操作,不影响标志位。数据传送指令数据传送指令应用举例:应用举例:XCHG BL,DLXCHG AX,SIXCHG COUNTDI, AXXCHG BX,DI(错)错)XCHG DS, AX (错)错)数据传送指令数据传送指令该指令不影响标志位该指令不影响标志位格式:格式: XLAT str_table;(;(AL)(BX )+(AL) 或或 XLAT str_table表格符号地址(首地址),表格符号地址(首地址), 只是为了提高可读性而设置,汇编时仍用只是为了提高可读性而设置,汇编时仍用BX。数据传送指令数据传送指

42、令XLAT指令使用方法指令使用方法: 先建立一个字节表格;先建立一个字节表格; (相对与表格首地址位移量)(相对与表格首地址位移量); (表中第一个元素的序号为(表中第一个元素的序号为0) 。 (AL)为转换的代码。为转换的代码。数据传送指令数据传送指令 若把字符的若把字符的扫描码扫描码转换成转换成ASCII码码; 或或数字数字09转换成转换成7段数码所需要的相应代码(段数码所需要的相应代码(字形码字形码)等)等就要用就要用XLAT指令。指令。例:内存的数据段中有一张十六进制数字的例:内存的数据段中有一张十六进制数字的ASCII码表。码表。 首地址为:首地址为:Hex_table ,欲查出表中

43、第欲查出表中第10个元素(个元素(A)数据传送指令数据传送指令执行指令序列:执行指令序列:MOV BX,OFFSET Hex_tableMOV AL,0AH XLAT Hex_table假设:假设:(DS)=F000H, Hex_table=0040H(AL)=0AH执行执行XLAT以后:以后: (AL)=41H=(F004AH),),即即“A”的的ASCII码。码。30H30H31H31H32H32H.39H39H41H41H42H42H.46H46H.Hex_tableHex_tableHex_table+1Hex_table+1Hex_table+2Hex_table+2Hex_tabl

44、e+0AHHex_table+0AHHex_table+0BHHex_table+0BHHex_table+0FHHex_table+0FHFFBBAA9911220016进制数的进制数的ASCII码表码表数据传送指令数据传送指令MOV BX,OFFSET Hex_tableMOV AL,BX+0AH(Input and Output)输入输出指令共两条:输入输出指令共两条: (Input byte or word) (Output byte or word) 输入指令输入指令用于用于CPU从外设端口接受数据从外设端口接受数据, 输出指令输出指令用于用于CPU向外设端口发送数据。向外设端口发送

45、数据。 无论接受还是发送数据,必须通过累加器无论接受还是发送数据,必须通过累加器AX(字)或字)或AL(字节),字节),又称累加器专用传送指令又称累加器专用传送指令 。 数据传送指令数据传送指令每个外设要占几个端口:数据口,状态口和控制口。每个外设要占几个端口:数据口,状态口和控制口。CPUCPUI/OI/O设备设备译译码码数据端口数据端口DBDBABABCBCBI/O接口I/O接口状态端口状态端口控制端口控制端口数据传送指令数据传送指令格式:格式:IN acc, port ;(acc) (port)具体形式有四种:具体形式有四种:IN AL, data8 ; 端口地址端口地址8位,输入一个字

46、节位,输入一个字节IN AX, data8 ;端口地址;端口地址8位,输入一个字位,输入一个字IN AL, DX ;端口地址;端口地址16位,输入一个字节位,输入一个字节IN AX, DX ;端口地址;端口地址16位,输入一个字位,输入一个字 必须通过累加器必须通过累加器AX(字)或字)或AL(节)节)输入输入数据。数据。数据传送指令数据传送指令(Output byte or word) 格式:格式: OUT port, acc ;(port) (acc)具体形式有四种:具体形式有四种: OUT data8 , AL ; 端口地址端口地址8位,输出一个字节位,输出一个字节 OUT data8,

47、 AX ;端口地址;端口地址8位,输出一个字位,输出一个字 OUT DX , AL ;端口地址;端口地址16位,输出一个字节位,输出一个字节 OUT DX , AX ;端口地址;端口地址16位,输出一个字位,输出一个字 必须通过累加器必须通过累加器AX(字)或字)或AL(节)节)输出输出数据。数据。数据传送指令数据传送指令例例1:实现:实现(29H)(28H)(DATA_WORD) IN AX,28H MOV DATA_WORD,AX例例2:从端口:从端口3FCH 送一个字到送一个字到AX寄存器寄存器MOV DX,3FCH IN AX,DX ; (AL)(3FCH),), (AH)(3FDH)

48、 例例3:实现将(实现将(AL) (05H) OUT 05H,AL;(;(05H)(AL)数据传送指令数据传送指令(Address-object transfer) 8086 /8088 提供三条提供三条:地址指针写入指定寄存器或寄存器对指令地址指针写入指定寄存器或寄存器对指令。1、LEA(Load Effective Address)2、LDS (Load pointer using DS)3、LES (Load pointer using ES)数据传送指令数据传送指令(Load Effective Address)格式:格式: LEA reg16 , mem16 ;EA(reg16)功能

49、:加载有效地址,用于写近地址指针。功能:加载有效地址,用于写近地址指针。 。例:设(例:设(BX)=0400H,(,(SI)=003CHLEA BX,BX+SI+0F62H执行指令后:执行指令后: EA=(BX)+(SI)+0F62H=0400H+003CH+0F62H=139EH(BX)=139EH数据传送指令数据传送指令注意:设注意:设 (DS)=3000HBUFFER=1000H(31000H)=0040H(1) LEA 指令与指令与MOV 的区别的区别LEA BX , BUFFER ;(;(BX)=1000HMOV BX , BUFFER ; (BX)=0040H LEA 指令与指令与

50、MOV等价等价LEA BX , BUFFER ; (BX)=1000HMOV BX , OFFSET BUFFER ; (BX)=1000H40H40H00H00H.3000H:1000H3000H:1000H(DS)(DS) BUFFERBUFFER31001H31001H.存储器存储器数据传送指令数据传送指令(2),。(3)请思考下列指令的正、误)请思考下列指令的正、误LEA DX ,BETABXSILEA DX , AX数据传送指令数据传送指令6565LEALEA指令在程序中的应用指令在程序中的应用将数据段中首地址为将数据段中首地址为MEM1 MEM1 的的5050个字节的个字节的数据传

51、送到同一逻辑段首地址为数据传送到同一逻辑段首地址为MEM2MEM2的区的区域存放。编写相应的程序段域存放。编写相应的程序段 。 6666LEALEA指令在程序中的应用指令在程序中的应用 开开 始始取源地取源地址址取目标地取目标地址址送数据块长度送数据块长度到到CLCL传送一个字传送一个字节节修改地址指修改地址指针针修改计数值修改计数值计数值计数值=0=0? 结结 束束N NY Y67LEA指令在程序中的应用指令在程序中的应用 LEA SI,MEM1 LEA DI,MEM2 MOV CL,50NEXT: MOV AL,SI MOV DI,AL INC SI INC DI DEC CL JNZ N

52、EXT HLT MEM112H34HMEM2 (Load pointer using DS)格式:格式:LDS reg16, mem32 ;(;(reg16)(EA) (DS)(EA)+2)功能:功能:。将指令指定将指令指定mem32单元的前两个单元内容单元的前两个单元内容(16位偏移量位偏移量)装入装入指定通用寄存器,把后两个单元内容指定通用寄存器,把后两个单元内容(段地址段地址) 装入到装入到DS段寄段寄存器。存器。用于写远地址指针。用于写远地址指针。数据传送指令数据传送指令例例: 假设:假设: (DS)=C000H指令指令: LDS SI, 0010H执行指令后执行指令后: (SI)=0

53、180H (DS)=2000H 80H80H01H01H00H00H20H20HC000H:0010HC000H:0010H(DS)(DS)C0011HC0011HC0012HC0012HC0013HC0013H.存储器存储器数据传送指令数据传送指令格式:格式:LES reg16, mem32 ;(;(reg16)(EA) (ES)(EA)+2)功能:功能: 此指令常常指定此指令常常指定DI寄存器。寄存器。将指令指定将指令指定mem32单元的前两个单元内容单元的前两个单元内容(16位偏移量位偏移量)装装入指定通用寄存器,把后两个单元内容入指定通用寄存器,把后两个单元内容(段地址段地址) 装入到

54、装入到ES段寄存器。段寄存器。用于写远地址指针。用于写远地址指针。数据传送指令数据传送指令例例: 假设:假设: (DS)=B 000H (BX)=080AH指令指令: LES DI, BX执行指令后执行指令后: (DI)=05A2H (ES)=4000HA2HA2H05H05H00H00H40H40HB000H:080AHB000H:080AH(DS)(DS)B080BHB080BHB080CHB080CHB080DHB080DH.存储器存储器(BX)(BX)数据传送指令数据传送指令综合举例:综合举例:设:设: (DS)=5000H TABLE=1000H分析下列指令执行结果:分析下列指令执行

55、结果: MOV BX,TABLE ;(;(BX)=0040H MOV BX,OFFSET TABLE ;(;(BX)=1000H LEA BX,TABLE ;(;(BX)=1000H LES BX,TABLE ;(;(BX)=0040H,(,(ES)=3000H LDS BX,TABLE ;(;(BX)=0040H,(,(DS)=3000H40H40H00H00H00H00H5000H:1000H5000H:1000H(DS)(DS) TABLETABLE51001H51001H.存储器存储器30H30H.51002H51002H51003H51003H(Flag register trans

56、fer)采用了隐含寄存器(采用了隐含寄存器(AH、Flags)操作数方式。操作数方式。 8086有四条标志传送操作指令:有四条标志传送操作指令:1LAHF(Load AH from flags)2SAHF(Store AH into flags) 3PUSH F(Push flags onto stack)4POP F(Pop flags off stack) 数据传送指令数据传送指令(Load AH flags flags)格式:格式:LAHF ;(;(AH)(PSW的低字节)的低字节)功能:功能:。SFSFZFZFAFAFPFPFCFCF0 01 12 23 34 45 56 67 7TF

57、TFIFIFDFDFOFOF8 89 91010111112121313141415150 01 12 23 34 45 56 67 7FLAGSFLAGSAHAHLAHF指令操作图示意指令操作图示意数据传送指令数据传送指令2SAHF(Store AH into flags)格式:格式:SAHF ;(;(PSW的低字节)的低字节)(AH)功能:(功能:(AH)送标志寄存器低八位。)送标志寄存器低八位。3PUSH F(Push flags onto stack)格式:格式:PUSH F;(;(SP)(SP)-2 (SP)+1,(,(SP)(PSW)功能功能 : 标志进栈。标志进栈。4POP F(

58、Pop flags off stack) 格式:格式:POP F;(;(PSW)(SP)+1,(,(SP) (SP)(SP)+2 功能功能 :标志出栈。:标志出栈。数据传送指令数据传送指令注意:注意:(1) 标志位的影响标志位的影响LAHF、PUSHF不影响标志位不影响标志位,SAHF、POPF由装入的值确定标志位的值,由装入的值确定标志位的值, 即影响标志位。即影响标志位。(2)PUSH F、POPF用于保护调用过程前(用于保护调用过程前(PSW),过程返回过程返回后恢复。后恢复。例:例:PUSHAXPUSH CXPUSH FCALL TRANS数据传送指令数据传送指令2算术运算指令算术运算

59、指令(Arithmetic)内容:内容: 8086/8088提供加、减、乘、除、转换五种基本算术操作提供加、减、乘、除、转换五种基本算术操作; 利用十进制调整指令和利用十进制调整指令和ASCII调整指令对调整指令对BCD码表示的码表示的 十进制数进行算术运算;十进制数进行算术运算; 对带符号数与无符号数进行乘、除运算。对带符号数与无符号数进行乘、除运算。(一)加法指令(一)加法指令(Arithmetic)(二)减法指令(二)减法指令(Subtraction)(三)乘法指令(三)乘法指令(Multiplication)(四)除法指令(四)除法指令(Division)(五)(五) BCD码运算(十

60、进制调整)指令码运算(十进制调整)指令(一)加法指令(一)加法指令(Arithmetic) 8086具有具有5种加法操作指令种加法操作指令: 1、 ADD(Addition)加法指令加法指令 2、 ADC(Add with carry)带进位加法指令带进位加法指令 3、 INC(Increment by 1)加加 1指令指令 4、AAA(ASCII adjust for addition)加法加法ASCII调整指令调整指令 5、DAA(Decimal adjust for addition)加法十进制调整指令加法十进制调整指令 算术运算指令算术运算指令1、 ADD(Addition)加法指令加

温馨提示

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

评论

0/150

提交评论