8086指令系统及汇编语言.ppt

上传人:牧羊曲112 文档编号:5414198 上传时间:2023-07-05 格式:PPT 页数:305 大小:791KB
返回 下载 相关 举报
8086指令系统及汇编语言.ppt_第1页
第1页 / 共305页
8086指令系统及汇编语言.ppt_第2页
第2页 / 共305页
8086指令系统及汇编语言.ppt_第3页
第3页 / 共305页
8086指令系统及汇编语言.ppt_第4页
第4页 / 共305页
8086指令系统及汇编语言.ppt_第5页
第5页 / 共305页
点击查看更多>>
资源描述

《8086指令系统及汇编语言.ppt》由会员分享,可在线阅读,更多相关《8086指令系统及汇编语言.ppt(305页珍藏版)》请在三一办公上搜索。

1、第三章 8086指令系统及汇编语言,本章节知识点:1)8086微处理器的各种寻址方式2)数据传送指令3)算术运算指令4)逻辑运算与移位指令5)串操作指令6)转移指令7)8086汇编语言程序基本格式8)8086汇编语言程序设计方法,本章学习的主要内容及要求,1、掌握8086汇编语言的各种寻址方式的特点、功能和基本格式;2、掌握8086汇编语言各指令功能,指令执行后对目的操作数和标志位的影响;3、掌握源操作数的物理地址的计算方法;4、掌握8086汇编语言各指令的语法格式;5、掌握汇编语言的程序设计中子程序、中断服务子程序之间的差异;6、掌握段定义中宏指令的使用方法;7、掌握应用汇编语言编写应用程序

2、的基本设计方法;,本章难点:1、段地址与源操作数之间的关系;2、各寻址方式之间的差异;3、指令执行后对标志位的影响;4、指令与控制信号之间的联系;5、汇编语言编写应用程序的基本设计方法;本章的学习方法:课前认真预习,课后请认真复习并请多看课本和参考书中的习题与练习题。,问题的提出:什么是软件?为什么计算机的运行必须依靠软件来完成?软件都有那些形式?什么是汇编语言?软件:能控制计算机完成指定工作任务的二进制代码集,这个代码集称为机器指令或机器语言。软件有很多种形式,如常用的高级语言(C、C+等),所有的高级语言编写的程序最终都必须被解译为机器指令(有序的二进制代码集),因为计算机只能接受二进制代

3、码。,存储器,地址号,汇编语言,二进制机器指令,图3-1机器指令、汇编语言的区别,汇编语言:是一种将机器语言按其特定的功能符号化,使其便于记忆和理解的计算机语言。,还有单字节、3或4字节指令,字节越高,运行机器周期越大。每一条指令都有固定的操作码,计算机就是靠辩识操作码来实现各种不同的运算功能。(请参看实验指导书中的有关程序),指令的组成,操作码:说明计算机要执行哪种操作,如传送、运算、等操作,它是指令中不可缺少的组成部分操作数:是指令执行的参与者,即各种操作的对象有些指令不需要操作数,通常的指令都有一个或两个操作数,也有个别指令有3个甚至4个操作数有些指令隐含操作数。,指令由操作码和操作数两

4、部分组成,例:MOV AX,CX;将CX的内容送入AX中。,目的操作数,源操作数,操作码,双操作数,指令的助记符格式,操作数2,被称为源操作数src,它表示参与指令操作的一个对象.操作数1,被称为目的操作数dst,它不仅可以作为指令操作的一个对象,还可以用来存放指令操作的结果.分号后的内容是对指令的解释,操作码 操作数1,操作数2;注释,指令的操作码和操作数,每种指令的操作码用一个助记符表示(指令功能的英文缩写)对应着机器指令的一个或多个二进制编码指令中的操作数可以是一个具体的数值可以是存放数据的寄存器或指明存放数据的存储器地址,操作码 操作数1,操作数2;注释,寻址与寻址方式,指令系统设计了

5、多种操作数的来源寻找操作数的过程就是操作数的寻址把寻找操作数的方式叫做操作数的寻址方式理解操作数的寻址方式是理解指令功能的前提操作数采取哪一种寻址方式1)会影响处理器执行指令的速度和效率2)对程序设计也很重要,3.1 8086/8088的寻址方式,操作数的来源,指 令,寄 存 器,内 存,I/O设备或端口,操作数,指令中的操作数直接存放在机器代码中,紧跟在操作码之后(操作数作为指令的一部分存放在操作码之后的主存单元中),这种操作数被称为立即数imm。可以是8位数值(00HFFH)也可以是16位数值(0000HFFFFH)立即数寻址方式常用来给寄存器赋值,MOV AX,0102H;AX0102H

6、MOV AL,02H;AL02H,3.1.1 操作数的寻址方式,1、立即寻址 格式:操作码 数字表达式,MOV AX,F58AH;(字操作)F58AH称为立即数 助记符 目的 源(16位操作数)H表示为十六进制数 dst src 完成的操作:AX F58AH MOV AH,F5H(字节操作)F5H称为立即数(8位操作数)MOV AL,8AH(字节操作)8AH称为立即数 完成的操作:AH F5H,AL 8AH,立即寻址操作过程示意如图3-2,指令对立即数格式的要求,8086/8088指令对立即数的格式有三种:1)立即数可以是16进制的数 MOV AL,57H2)立即数可以是10进制的数,但指令运

7、行后CPU自动把10进制数转换为16进制数,然后完成给定功能的操作。MOV AL,57;指令执行后将AL 39H 3)立即数可以是2进制的数 MOV AL,01010111B;指令执行后将AL 57H 为十进制数时,数后不加H,2进制数时,数后加B,CPU以此来辨别是那种类型的数据。,2、直接寻址方式,直接寻址方式的有效地址在指令中直接给出,默认的段地址在DS段寄存器,可使用段超越前缀改变段。中括号包含有效地址,表达存储单元的内容,MOV AX,2000H;AXDS:2000H,MOV AX,ES:2000H;AXES:2000H,MOV AX,BUFFER;BUFFER:符号地址,指令格式:

8、操作码 寄存器(16位),地址表达式,直接寻址方式的操作数的16位偏移地址(有直接地址值和标号两种形式)直接包含在指令中,它与操作码一起存放在代码段中的操作码之后。段地址DS隐含,也可指定其它段,必须需在指令中指明。存储器物理地址地址为:DS:偏移地址 或 ES:偏移地址。例:MOV AX,ES:2000H(读数据,RD线为低电平)将ES:2000H单元内容送入AX。例:MOV AX,LABLE 或 MOV AX,LABEL 将标号为LABLE(存放操作数单元的符号地址),即DS:LABLE中的内容送入AX。LABLE必须在段定义中指明。,例:MOVAX,(2000H);字操作 其过程如图3.

9、3所示。指令中的16位段内偏移地址的低字节在前,高字节在后。MOVAL,(2000H);字节操作 MOVAH,(2001H);字节操作 此两条指令的功能与字操作指令的功能相同!16位段内偏移地址直接包含在指令中,图3-3 直接寻址,3、寄存器寻址方式,操作数存放在CPU的内部寄存器reg中1)8 位寄存器r8:AH、AL、BH、BL、CH、CL、DH、DL2)16 位寄存器r16:AX、BX、CX、DX、SI、DI、BP、SP3)4个段寄存器seg:CS、DS、SS、ES寄存器名表示其内容(操作数),MOV AX,BX;AXBX,格式:操作码 寄存器,寄存器,例如:MOV AX,BX;AX B

10、X MOV BX,AX;BX AX MOV AL,BH;AL BH MOV AH,AL;AH AL MOV DS,AX;DS AX MOV SI,AX;SI AX注意:目的和源寄存器的 位数必须相同,不同 位数寄存器之间不能传送数据处理 如:MOV BX,AH如果要将数据送入段寄存器(CS、DS、ES、SS),必须先将这个数送入一个非段寄存器,然后在送到段寄存器,段寄存器写入方法:MOV CS,3000H;错!MOV AX,3000H;(该指令不影响RD和WR控制线均为高电;平)MOV CS,AX;正确(在使用中不允许随便修改CS的内容!)MOV SS,1000H;处理错!MOV DI,100

11、0H MOV SS,DI;正确,(该指令不影响RD和WR控制线均为高电;平),4、寄存器间接寻址方式,有效地址存放在基址寄存器BX、BP或变址寄存器SI、DI中;对于BX、SI、DI,默认的段地址在DS段寄存器,可使用段超越前缀改变;对于BP,默认的段地址在SS段寄存器,可使用段超越前缀改变,MOV AX,BX;AXDS:BX,MOV AX,ES:BX;AXES:BX,MOV AH,DS:BPMOV ES:DI,AL,格式:操作码 寄存器,(寄存器),注意:寄存器间接寻址要用方括号或圆号括起来,以便与寄存器操作数相区别。例:MOV AX,BX;将由BX决定的存储单元的内容送到AX寄存器,要求对

12、BX事前定义。,间接寻址,操作数在存储器中,指令中寄存器内容作为操作数所在单元的有效地址。(BX)(SI)(DI)(BP),段寄存器为DS,段寄存器为SS,物理地址计算方法:物理地址=(DS)16+(BX)或(SI)或(DI)物理地址=(SS)16+(BP),有效地址=,例:已知:(DS)=2100H,(DI)=2000H 指令:MOV AX,DI;(AX)(DI)物理地址=(DS)16+(DI)=2100H 16+2000H=21000H+2000H=23000H 指令结果:将23000H单元内容送AL中,将23001H单元内容送AH中。指令:MOV AX,DI 为字操作(16位操作),例:

13、已知:(DS)=2100H,(DI)=2000H指令:MOV AL,DI;(AL)(DI)物理地址=(DS)16+(DI)=2100H16+2000H=21000H+2000H=23000H 指令结果:将23000H单元内容送AL中,指令:MOV AL,DI;字节操作(8位操作),例:MOV AX,SI;SI中的内容为要取数的偏移地址,假设在执行本条指令前SI=1000H,DS=2000H其过程如图3-4(a)所示。,图3-4(A)寄存器间接寻址,注意:程序(指令在代码段),要操作的数据在数据段!,图3-4(B)寄存器间接寻址,例:MOV AX,BP;BP中的内容为要取数的偏移地址假设在执行本

14、条指令前BP=2000H,SS=3000H其过程如图3-4(b)所示。注意:是在堆栈段取数据,注意:程序(指令)在代码段,要操作的数据在堆栈段!,5、寄存器相对寻址方式,有效地址是寄存器内容与有符号8位或16位位移量之和,寄存器可以是BX、BP或SI、DI有效地址BX/BP/SI/DI8/16位偏移量段地址对应BX/SI/DI寄存器默认是DS,对应BP寄存器默认是SS;可用段超越前缀改变,MOV AX,SI+06H;AXDS:SI+06H,MOV AX,06HSI;AXDS:SI+06H,格式:操作码 寄存器,相对值DISP+基址或变址寄存器,操作数在存储器内,指令中寄存器内容与指令指定的位移

15、量(相对值DISP)之和作为操作数所在单元的有效地址。,物理地址=(DS)16+(BX)+DISP;(SI)、(DI)相同。物理地址=(SS)16+(BP)+DISPDISP可以是16位,也可以是8位,DISP是一个数值的代号!,例:如果(DS)=3000H,(SI)=2000H,COUNT=3000H 执行指令 MOV AX,CONUTSI,求出此种寻址方式对应的有效地址和物理地址。有效地址=(SI)+(COUNT)=2000H+3000H=5000H物理地址=(DS)*16+5000H=30000H+5000H=35000H 例:MOV AX,DISPSI;DISP为相对地址偏移量或写为:

16、MOV AX,10SI;DISP为地址符号 MOV AX,SI10H;DISP DB 10H MOV AX,SI+10H;DISP可以为有符号的数 其过程如图4.5所示。,图3-5 寄存器相对寻址,例:MOV AX,DISPSI,6、基址变址寻址方式,有效地址由基址寄存器(BX或BP)的内容加上变址寄存器(SI或DI)的内容构成:有效地址BX/BPSI/DI段地址对应BX基址寄存器默认是DS,对应BP基址寄存器默认是SS;可用段超越前缀改变,MOV AX,BX+SI;AXDS:BX+SI,MOV AX,BXSI;AXDS:BX+SI,格式:操作码 寄存器,(基址寄存器)+(变址寄存器),物理地

17、址=(DS)16+(BX)+(SI)或(DI)物理地址=(SS)16+(BP)+(SI)或(DI)例:MOV AX,BX+DI 或 MOV AX,BXDI DS:(BX)+(DI)存储单元内容(字)送AX。例:MOV AX,BP+SI 或 MOV AX,BPSI SS:(BP)+(SI)存储单元内容(字)送AX。,图3-6 基址、变址寻址,例:MOV AX,BXSI 其过程如图所示。,完成的操作:AX=BX+SI+DS*16 AH=BX+SI+DS*16 AL=BX+SI+DS*16+1,例:如果(DS)=2100H,(BX)=0158H,(DI)=10A5H,则执行指令 MOV AL,BXD

18、I有效地址:EA=(BX)+(DI)=0158H+10A5H=11FDH 物理地址:(DS)*16+有效地址=21000H+11FDH=221FDH执行结果:将221FDH单元内容送入寄存器AL中。,7、相对基址变址寻址方式,有效地址是基址寄存器(BX/BP)、变址寄存器(SI/DI)与一个8位或16位位移量之和:有效地址BX/BPSI/DI8/16位偏移量段地址对应BX基址寄存器默认是DS,对应BP基址寄存器默认是SS;可用段超越前缀改变,MOV AX,BX+DI+6;AXDS:BX+DI+6,MOV AX,6BX+DI,MOV AX,6BXDI,格式:操作码 寄存器,DISP+(基址寄存器

19、)+(变址寄存器),相对基址变址寻址方式操作数的地址是由基址、变址方式得到的地址再加上由指令指明的8位或16位的相对偏移量而得到的。,操作数在存储器内,指令将基址寄存器(BX或BP)与变址寄存器(SI或DI)的内容之和再加上位移量(8位或16位),得到操作数所在单元的有效地址。(BX)(SI)DISP8(BP)(DI)DISP16,有效地址=,+,+,例:已知:(DS)=3000H,(BX)=2000H,(SI)=1000H,DISP=0250H 指令:MOV AX,DISP BXSI 或 MOV AX,DISP BX+SI 或 MOV AX,DISP+BX+SI有效地址:DISP+(BX)+

20、(SI)=0250H+2000H+0100H=3250H物理地址:(DS)*16+有效地址=30000H+3250H=33250H执行结果:将33250H单元内容送AL,33251H内容送AH。,MOV AX,DISPBXS1,完成的操作:AX=BX+SI+DS*16+DISP AH=BX+SI+DS*16+DISPAL=BX+SI+DS*16+DISP+1,代码段,数据段,举例,若(BX)0313H,(SI)1123H,(DI)0606H,(DS)2000H,(SS)6800H,(BP)0100H。指出下列指令中画线的操作数的寻址方式,如果为存储器操作数,请计算该操作数的有效地址与物理地址。

21、,MOVAX,1117H MOVBX,SP MOVDX,BX,EA0313H,PA20000H+0313H20313H,:立即寻址,:寄存器寻址,:寄存器间接寻址,举例,若(BX)0313H,(SI)1123H,(DI)0606H,(DS)2000H,(SS)6800H,(BP)0100H。指出下列指令中画线的操作数的寻址方式,如果为存储器操作数,请计算该操作数的有效地址与物理地址。,MOV AX,100HSI,EA0100H+100H0200H,PA68000H+0200H68200H,EA1123H+100H1223H,PA20000H+1223H21223H,MOV AX,BP100H,

22、:寄存器相对寻址,:寄存器相对寻址,举例,若(BX)0313H,(SI)1123H,(DI)0606H,(DS)2000H,(SS)6800H,(BP)0100H。指出下列指令中画线的操作数的寻址方式,如果为存储器操作数,请计算该操作数的有效地址与物理地址。,MOV AX,BP+SI+100H,EA0313H+1123H1436H,PA20000H+1436H21436H,EA0100H+1123H+100H1323H,PA68000H+1323H69323H,MOV AL,BXSI,:基址变址寻址,:相对基址加变址寻址,当操作数在内存单元时,系统根据隐含约定,自动将寄存器DS或SS的值作为段

23、地址。然而,当操作数段地址不在隐含的段寄存器时,可以使用段超越前缀取代其隐含约定。段超越前缀形式为(:)段寄存器名(:)例如:MOV AX,ES:BP;段地址在ESMOV AX,SS:BX SI;段地址在SS注意:不是所有的段都可做段超越前缀,段超越,1段内相对寻址 在段内相对寻址方式中,指令应指明一个8位或16位的相对地址位移量DISP(有正负符号,为负时用补码表示)。此时,转移地址应该是代码段寄存器CS内容加上指令指针IP内容,再加上相对地址位移量DISP。例:JMP DISP 其过程如图3-8所示。,3.1.2 转移地址的寻址方式,JMP DISP 其过程如图3-8所示。,2段内间接寻址

24、 在段内间接寻址方式中,转移地址的段内偏移地址要么存放在一个16位的寄存器中,要么存放在存贮器的两个相邻单元中。存放偏移地址的寄存器和存贮器的地址将按指令码中规定的寻址方式给出。此时,寻址所得到的不是操作数,而是转移地址。例:JMP CX;CX的内容为转移地址的段内偏移量 注意:必须是在段内转移!其过程如图3-9所示。,JMP WORD PTR CXWORD PTR是寻址一个字的标记,指令中必须加上,CX的内容为新的IP值,程序转移到新的入口处,在指令中CX的内容为4000H,CX值不能超出该段的区域,3段间直接寻址 在段间直接寻址方式中,指令码中将直接给出16位的段地址和16位的段内偏移地址

25、。例:JMP FAR PTR ADD1;ADD1为转移地址的标号 FAR表示转移距离大于32K,或是不同段之间转移。PTR用来建立一个符号地址,但它本身并不分配存储器,只是用来对已分配的存储地址赋予另一种属性,使该地址具有另一种类型。在执行段间直接寻址指令时,指令操作码后的第二个字将赋予代码段寄存器CS,第一个字将赋予指令指针寄存器IP。最后CS内容和IP内容相加则得转移地址,如图3-10所示。ADD1的值由计算机自动给出,图3-10 段间直接寻址,4段间间接寻址 段间间接寻址方式和段内间接寻址相似。但是,由于确定转移地址需要32位信息,因此段间间接寻址只适用于存贮器寻址方式。用这种寻址方式可

26、计算出存放转移地址的存贮单元的首地址,与此相邻的4个单元中,前两个单元存放16位的段内偏移地址,而后两单元存放的是16位的段地址,如图3-11所示。例:JMP DWORD PTRBPDI在这里是32位,两个字,所以要加DWORD,如为BP寄存器,要在SS段中取数。,图3-11 段间间接寻址,执行该指令之前:SS=3000HBP=1000HDI=2000H执行该指令之后有了新的CS和IP的值,注意:如无BP,则在DS段内求存放转移地址的存贮单元的首地址,本节小结:1)寻址中的操作数(二、十、十六进制)的形式。2)源操作数与目的操作数的位数必须一致。3)立即数与地址的区别。4)操作数物理地址的计算

27、,如有BP寄存时应在SS段内取数。5)变址寻址和相对寻址时,偏移量的计算方法。6)直接寻址和间接寻址、相对寻址之间的差别。7)各种指令的书写格式和要求。,1、“8086执行了一个总线周期”是指8086做了哪些可能的操作?基本总线周期如何组成?在一个典型的读存储器总线周期中,地址信号、ALE信号、RD信号、数据信号分别在何时产生?(画出时序波形图并给予解释)3、请写出下列指令单独执行后,有关寄存器及存储单元的内容。假设指令执行前(DS)=(ES)=3000H,(AX)=2000H,(BX)=1200H,(SI)=2,(31200H)=2400H,(31202H)=90F7H(1)ADDES:BX

28、,900H(2)MOVAX,BX+SI4、给定一个存放数据的内存单元的偏移地址是20C0H,(DS)=C00EH,求出该内存单元的物理地址。5、8086被复位以后,有关寄存器的状态是什么?微处理器从何处开始执行程序?6、指出下列指令的错误:(1)MOV AH,BX(2)MOV SI,BX(3)MOV AX,SIDI(4)MOV AX,BXBP(5)MOV BX,ES:AX(6)MOV CS,AX(7)MOV DS,2000H,3.2 指令系统,8086/8088的指令系统大致可分为7种类型:1、数据传送指令2、算数运算指令3、逻辑运算和移位指令4、串操作指令5、程序控制指令6、处理器控制指令7

29、、输入/输出指令,数据传送指令是最简单、最常用的一类指令,它是负责把数据、地址、或立即数传送到寄存器或存储单元中。1MOV指令 MOV指令的格式为:MOV DST,SRC功能:将源操作数src的内容复制到目的操作数dest中,结果目的操作数的内容等于源操作数的内容,源操作数src的内容不变。对标志位的影响:无语法格式:MOV reg/mem/seg,reg/mem/seg/immReg:寄存器,mem:存储器,seg:段寄存器,imm立即数,数据传送指令,数据传送是计算机中最基本、最重要的一种操作传送指令也是最常使用的一类指令传送指令把数据从一个位置传送到另一个位置除标志寄存器传送指令外,均不

30、影响标志位,图3-12 MOV指令的数据传送方向,说明:(1)双操作数指令不允许两个操作数同时为段寄存器或存储器操作数。MOV seg,seg;错误 MOV mem,mem;错误(2)立即数不能传送到段寄存器中。MOV seg,imm;错误(3)目的操作数不允许使用CS段寄存器。(4)dest与src必须类型匹配,即同时是字节或字类型。以下几点要注意:寄存器具有明确的类型,例如,AL、AX分别为字节、字类型。,各种数据传送指令例举如下:在CPU各内部寄存器之间传送数据。MOV AL,BL;8位数据传送指令(1个字节)AL BL MOV AX,DX;16位数据传送指令(1个字)AX DX 立即数

31、传送至CPU的通用寄存器(即AX、BX、CX、DX、BP、SP、SI、DI)。MOV CL,4;8位数据传送(1个字节)CL=04 MOV AX,03FFH;16位数据传送(1个字)AX 03FFH注意:立即数如为10进制形式,则8086自动转换为16进制,CPU内部寄存器(除了CS和IP以外)与存贮器(所有寻址方式)之间的数据传送,可以传送一个字节也可以传送一个字。()或 为其内容的地址在CPU通用寄存器与存贮器之间传送数据:MOV DI,CX CPU寄存器与存贮器之间传送数据:MOV AX,D1SIBX MOV BPD1,AX;D1都为数值,使用中需要注意的是:MOV指令不能在两个存贮器单

32、元之间进行数据直接传送。如:MOV(2000H),(3000H)或 MOV(AX),(BX)MOV指令不能在两个段寄存器之间进行数据直接传送。如:MOV DS,SS 立即数不能直接传送给段寄存器。如:MOV DS,2000H 目的操作数不能为CS、IP。如:MOV CS,AX,MOV IP,AX(会改变指令执行的顺序)MOV指令不影响标志位MOV指令的实质是:把SRC的内容复制到DST中,执行操作后 SRC的内容不变!,其中,的传送可用通用寄存器作为中介,用两条传送指令完成。例如,为了将在同一个段内的偏移地址为AREA1的数据传送到偏移地址为AREA2单元中去,可执行以下两条传送指令:MOV

33、AL,AREA1 MOV AREA2,AL 例如,为了将立即数传送给DS,可执行以下两条传送指令:MOV AX,1000H MOV DS,AX在这两个实例中,AREA1和 AREA2在段定义时已经给了明确的定义!,例:错误的MOV 指令如下所示:MOV AX,BL;类型不匹配(数据长度不一致)MOV DS,1000H;不允许立即数送段寄存器MOV BX,SI;不允许内存操作数之间传送MOV ES,CS;不允许段寄存器之间传送MOV CS,AX;指令存在,但不能执行,CS不能作为目的操作数,例如,将以AREA1为首地址的100个字节数据搬移到以AREA2为首地址的内存中,若AREA1和AREA2

34、都在当前数据段中,可以用带有循环控制的数据传送程序来实现。程序如下:MOV SI,OFFSETAREA1;(OFFSET是取地址 MOV DI,OFFSETAREA2;偏移量,必须加上)MOV CX,100 AGAIN:MOV AL,SI;RD为低 MOV DI,AL;WR为低 INC SI INC DI DEC CX JNZ AGAIN,非法指令无法确定是字节还是字操作,当无法通过任一个操作数确定是操作类型时,需要利用汇编语言的操作符显式指明MOV BX+SI,255;非法指令,修正:MOV BYTE PTR BX+SI,255;BYTE PTR说明是字节操作MOV WORD PTR BX+

35、SI,255;WORD PTR说明是字操作,2交换指令 XCHG指令的格式为:XCHG DST,SRC 执行的操作:交换DST与SRC的内容 DST SRC 语法格式为:XCHG reg/mem,reg/mem 交换指令把一个字节或一个字的源操作数与目的操作数相交换。这种交换只能在通用寄存器之间、通用寄存器与存贮器之间进行,存储器与存储器之间不能交换段寄存器不能作为一个操作数。XCHG指令不影响标志位。,例:XCHG BX,BP+SI如指令执行前:(BX)=6F30H,(BP)=0200H,2F246H=54H 2F247H=51H,(SI)=0046H,(SS)=2F00H,(2F00H)=

36、4254H,OPR2的物理地址=2F0016+0200+0046=2F246H则指令执行后:(BX)=5154H,(2F246H)=6F30H。例如:XCHG AL,CL;(8位交换)XCHG AX,DI;(16位交换)XCHG BX,SI;(16位交换)XCHG AX,BUFFER;寄存器与存贮器(定义为)之间交换 XCHG BX,DATASI;相对寻址的交换,3地址传送指令将操作数所在存储器的地址送入目标寄存器。8086/8088有3条地址传送指令。(1)LEA指令(有效地址送寄存器)指令格式:LEA reg16,存储器寻址方式 指令功能:如果源操作数为地址标号,则将该地址标号的地址偏移量

37、传送到目的操作数reg16 中。如果源操作数为一种存储器寻址方式,则将该寻址方式决定的内存操作数的地址偏移量送到目的操作数reg16 中,而不是将内存中的内容送到目的操作数reg16 中。注意:不是存储器的内容,是地址!不影响标志位,LEA指令(有效地址送寄存器)操作示意图,例:LEA BX,BX+SI+0F62H如指令执行前:(BX)=0400H,(SI)=003CH则指令执行后:(BX)=0400H+003CH+0F62H=139EH,139EH是偏移地址!不是DS:139EH中的内容!注意与MOV指令的区别,LEA 指令与MOV 指令的区别:LEA SI,BUFF;将标号BUFF的偏移地

38、址送入寄存器中MOV SI,BUFF;将标号BUFF所指存储单元的内容送入SI,例:如指令执行前(SI)=3000H,(BX)=0400H,MEEM=12000H,DS=1000H,执行LEA BX,MEEM指令后BX的内容为(BX)=12000H10000H=2000H,BX的内容为地址标号MEEM的偏移地址,而执行LEA BX,(SI)指令后BX的内容为(BX)=3000H,不是将由BX与段地址决定的物理地址DS:(SI)的内容送到BX中,在使用中一定要注意地址传送指令中的存储器寻址方式与其它数据传送指令的区别。,指令格式:LDS reg16,存储器寻址方式 语法格式:LDS reg16,

39、reg16/mem/lable;指令功能:从src指定的存储单元开始,由4个连续存储单元中取出前2字节送到reg,取出后2字节送到DS中。例:LDS AX,20(SI)或 LDS AX,(SI+20)假设执行前为(20050H)=1234H,(20052H)=5678H,AX=0000H,DS=2000H,SI=0030H,则物理地址=2000H16+20+0030H=20050H。执行的结果为:AX=1234H(偏移地址!),DS=5678H(地址中的数据)(注意取数据的顺序!),(2)LDS指令(指针送寄存器和DS),例:已知指令执行前(22000H22005H)=12H、34H,56H、

40、78H,9AH、BCH,AX=0000H,DS=2000H,BX=2000H,MEEM=22002H,执行指令LDS AX,MEEM和执行指令LDS AX,(BX)的过程如图所示执行LDS指令是要注意取数据的顺序,前两个字节的内容送指定16位寄存器,后两个字节的内容送数据段寄存器DS中。,指令格式:LES reg16,存储器寻址方式 语法格式:LES reg16,reg16/mem/lable;指令功能:从src指定的存储单元开始,由4个连续存储单元中取出前2字节送到reg,取出后2字节送到ES中。例:LES AX,20(SI)或 LES AX,(SI+20)假设执行前为(20050H)=12

41、34H,(20052H)=5678H,AX=0000H,DS=2000H,SI=0030H,则物理地址=20020+0030H=20050H。执行的结果为:AX=1234H,ES=5678H,(3)LES指令(指针送寄存器和ES),图3-13 LES指令操作示意,注意:LDS或LES指令的区别:LDS:低16位送到一个指定的字寄存器,高16位送到DS中。LES:低16位送到一个指定的字寄存器,高16位送到ES中。,例:(DS)=C000H,(C2480H)=1357H,(C2482H)=2468H,注意:LDS和 LES指令的区别为LDS指令将寻址到的存储器的低16位送到指定的寄存器,高16位

42、送到DS中。LES指令将寻址到的存储器的低16位送到指定的字寄存器,高16位送到ES中。对标志位的影响:上述三种地址传送指令都不影响标志位。,4堆栈操作指令堆栈概念-存储器的一段区域,按“先进后出”的原则进行存取操作。8086/8088系统,堆栈位于堆栈段,其段地址由SS指示,SP寄存器作为指针,SP内容始终指向栈顶所在存储单元。作用:在调用一个过程时,保存返回地址;暂时存放寄存器或存储器单元操作数的内容。指令格式:进栈 PUSH SRC(堆栈压入指令,进栈指令)操作:(SP)(SP)-2,(SP)+1,(SP)SRC功能:将16位寄存器,段寄存器,16位存储单元数据压入堆栈。,指令格式:出栈

43、 POP DST 操作:(DST)(SP)+1,(SP),(SP)(SP)+2功能:将堆栈中的16位数据送入16位寄存器、段寄存器(CS除外)、存储器相邻的两个单元(16位数)中。堆栈操作指令不影响标志位,SP-2,SP+2,MOV AX,8000HMOV SS,AX;设堆栈段地址(SS)=8000HMOV SP,2000H;设堆栈指针MOV DX,3E4AHPUSH DX;(先进)DX内容存入(SS16+1FFEH=(SP-2)PUSH AX;AX内容存入(SS16+1FFCH=(SP-2-2)PUSH(2000H);取数据段(DS16+2000H)内容进栈;存入(SS16+1FFAH=(S

44、P-2-2-2)POP(2000H);(SS16+1FFAH)到(DS16+2000H)POP AX;(SS16+1FFCH)到AX POP DX;(后出)(SS16+1FFEH)到DX,当执行完两条压入堆栈的指令时,堆栈中的内容如图3.13所示。压入堆栈指令PUSHDX的执行过程为:SP2SP;DH(SP);SP1SP;DL(SP)。弹出堆栈指令POPAX的过程与此刚好相反:(SP)AL;SP1SP;(SP)AH;SP1SP。,此过程CPU自动完成,此过程CPU自动完成,8086/8088系统的堆栈具有如下特点:堆栈是在内存的堆栈段中,具有“先进后出”的特点;堆栈只有一个出入口,即当前栈顶为

45、空时,栈顶和栈底指向同一内存单元;堆栈有两个基本操作:PUSH(进栈)和POP(出栈)。PUSH操作使栈顶向低地址方向移动,而POP操作则刚好相反;堆栈操作只能作字操作;SS:SP在任何时候都指向当前的栈顶。,3.2.2 算术运算指令 8086/8088具有加、减、乘、除4种基本算术运算操作指令。这些指令可实现字节或字的运算,也可以用于符号数和无符号数的运算。1加法指令(1)不带进位位加法指令指令格式:ADD DST,SRC;DSTDSTSRC语法格式:ADD reg/mem,reg/mem/imm8/imm16指令功能:完成两个操作数相加,结果送目的操作数DST。该指令要求DST、SRC 不

46、能同时为存储器,DST不能为立即数,运算结果对标志位有影响。该指令完成两个二进制数据的按位相加运算,是否为有符号运算,由程序设计者决定,做有符号运算时,运算的结果的正确与否由程序设计者根据有关标志位的状态判断。,ADD指令可以实现累加器与立即数、累加器与任一通用寄存器、累加器与存贮单元内容相加,其和放回累加器中。例如:ADD AL,30;(AL)=AL+30 ADD AX,3000H;(AX)=(AX)+3000 ADD AX,SI;(AX)=(AX)+(SI)ADD AL,DATABX;(AL)=(AL)+(BX+DATA),也可以实现任一通用寄存器与立即数、累加器或别的寄存器、存贮单元的内

47、容相加,其和放回寄存器中。例如:ADD BX,03FFH ADD SI,AX ADD DI,CX ADD DX,DATABXSI,ADD指令还可以实现存贮器的内容作为操作数与立即数、累加器或别的寄存器的内容相加,其和放回存贮单元中。例如:ADD DATASI,100 ADD DATASI,AX ADD DATASI,DX 这些指令执行时,对标志位CF、OF、PF、SF、ZF和AF都会产生影响。,(2)ADC 带进位位加法指令指令格式:ADC DST,SRC功能:与ADD指令相同,只是相加时要加上进位位的当前值。完成的操作为:(DST)(SRC)+(DST)+CF DST、SRC 不能同时为存储

48、器,SRC可为立即数,运算结果对标志位有影响。操作数正负由程序设计者定义。条件码设置:CF=1 二进制加法中最高有效位向高位有进位。CF=0 二进制加法中最高有效位向高位无进位。ZF=1 加法结果为0;ZF=0 加法结果不为0。OF=1 两同符号数相加(正数+正数、或负数+负数),而结果符号与其相反。OF=0 不同符号数相加。注意:(不同符号数相加不会产生溢出)SF=1 加法结果为负(符号位为1)。SF=0 加法结果为正(符号位为0)。,8位无符号数为:0255,有符号数为:-128+127,16位无符号数为:065535,有符号数为:-32768+32767。无符号数的加减不存在溢出,但有符

49、号的数加减会产生溢出。例:1)4+11=15 无符号 有符号,0000 0100+0000 1011 0000 1111,0000 0111+1111 10111 0000 0010,4+(11)15 CF=0,4+(+11)15 0F=0,例:2)7+251=258 无符号 有符号,7+(251)2 CF=1,7+(-5)2 0F=0,结果正确,结果正确,0000 1001+0111 1100 1000 0101,1000 0111+1111 01011 0111 1100,9+124 133 CF=0,9+(+124)133 0F=1,例:4)135+245=380 无符号 有符号,135

50、+(245)380 CF=1 124,(-121)+(-11)-132 0F=1,例:3)9+124=133 无符号 有符号,同符号数相加,结果符号不同,结果错误,结论:有符号数相加,结果由标志位0F决定,同符号数相加,结果符号不同,结果错误,(3)INC OPR 加1指令功能:对指定的操作数进行加1操作,其操作数OPRD可以是任意一个通用寄存器,也可以在内存单元中。加1操作时,把操作数看作为无符号的二进制数。该指令影响标志位,但不影响CF标志位。完成的操作:OPR OPR+1语法格式:INC reg/mem INC指令常用于在循环程序中修改地址指针和循环次数等。例如:INC AL;ALAL+

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号