IBMPC汇编程序设计第3章.ppt

上传人:小飞机 文档编号:5433896 上传时间:2023-07-06 格式:PPT 页数:146 大小:614.50KB
返回 下载 相关 举报
IBMPC汇编程序设计第3章.ppt_第1页
第1页 / 共146页
IBMPC汇编程序设计第3章.ppt_第2页
第2页 / 共146页
IBMPC汇编程序设计第3章.ppt_第3页
第3页 / 共146页
IBMPC汇编程序设计第3章.ppt_第4页
第4页 / 共146页
IBMPC汇编程序设计第3章.ppt_第5页
第5页 / 共146页
点击查看更多>>
资源描述

《IBMPC汇编程序设计第3章.ppt》由会员分享,可在线阅读,更多相关《IBMPC汇编程序设计第3章.ppt(146页珍藏版)》请在三一办公上搜索。

1、第3章 80 x86指令系统和寻址方式,教学要求:1.掌握指令系统的基本概念:指令格式、寻址方式、指令类型;掌握8086/8088指令系统中,各指令的格式、功能和注意事项。2.了解其他的寻址方式和指令类型。,相关概念,一、什么是指令系统?计算机的指令系统就是指该计算机能够执行的全部指令的集合。每种计算机都有它支持的指令集合。16位8086指令系统是整个Intel 80 x86 系列微处理器指令系统的基础。,二、指令格式 指令由操作码和操作数两部分组成。操作码说明计算机要执行哪种操作,如传送、运算、移位、跳转等操作,它是指令中不可缺少的组成部分。操作数是指令执行的参与者,即各种操作的对象。有些指

2、令不需要操作数,通常的指令都有一个或两个操作数,也有个别指令有3个甚至4个操作数,通常成为一地址指令、二地址指令、三,三、学习指令的注意事项 指令的功能该指令能够实现何种操作。通常指令助记符就是指令功能的英文单词或其缩写形式。指令支持的寻址方式该指令中的操作数可以采用何种寻址方式。指令对标志的影响该指令执行后是否对各个标志位有影响,以及如何影响。其他方面该指令其他需要特别注意的地方,如指令执行时的约定设置、必须预置的参数、隐含使用的寄存器等。,3.1 80 x86寻址方式,寻址、寻址方式的概念 指令中操作数字段实质上是指出操作数存放于何处。一般来说,操作数可以跟随在指令操作码之后,称为立即数;

3、操作数也可以存放在CPU内部的寄存器中,称为寄存器操作数。绝大多数的操作数存放在内存储器中,称为存储器操作数。指令指定操作数的位置,即给出地址信息,在执行时需要根据这个地址信息找到需要的操作数。这种寻找操作数的过程称为寻址,而寻找操作数的方法称为寻址方式。,指令的助记符格式:指令助忆符 操作数1,操作数2,操作数3;注释 指令助忆符体现该指令的功能,它对应一条二进制编码的机器指令。指令的操作数个数由该指令确定,可以没有操作数,也可以有一个、二个或三个操作数。绝大多数指令的操作数要显式的写出来,但也有指令的操作数是隐含的,不需要在指令中写出。注:当指令含有操作数,则在书写时必须遵守:指令助记符和

4、操作数之间要有分隔符,分隔符可以是若干个空格或TAB键;如果指令含有多个操作数,那么,操作数之间要用逗号,分开。指令后面还可以书写注释内容,不过,要在注释之前书写分号“;”。,3.1.1 与数据有关的寻址方式,以 MOV 指令为例:立即寻址 MOV AX,3069H寄存器寻址 MOV AL,BH直接寻址 MOV AX,2000H 寄存器间接寻址 MOV AX,BX 寄存器相对寻址 MOV AX,COUNT SI 基址变址寻址 MOV AX,BP DI 相对基址变址寻址 MOV AX,MASK BX SI,1.立即寻址方式,定义:操作数作为指令的一部分而直接写在指令中,这种操作数称为立即数,这种

5、寻址方式也就称为立即数寻址方式。汇编格式:n(n为立即操作数,是用8位或16位二进制补码表示的有符号数)功能:操作数存放在存储器,指令下一单元的内容为立即操作数n。图形表示:,【例3.1】MOV AX,4576H 执行后(AX)=?该例中源操作数为立即寻址方式,立即数为4576H,存放在指令的下一单元。执行:4576HAX 执行后:(AX)=4576H,2.寄存器寻址方式,定义:指令所要的操作数已存储在某寄存器中,或把目标操作数存入寄存器。把在指令中指出所使用寄存器(即:寄存器的助记符)的寻址方式称为寄存器寻址方式。汇编格式:R 其中R表示寄存器名。功能:操作数直接存放在寄存器R中。图形表示:

6、,指令中可以引用的寄存器及其符号名称如下:8位寄存器有:AH、AL、BH、BL、CH、CL、DH和DL等;16位寄存器:AX、BX、CX、DX、SI、DI、SP、BP和段寄存器等;源操作数是寄存器寻址方式 如:ADD VARW,AXMOV VARB,BH等。其中:VARW和VARB是字和字节类型的内存变量。目的操作数是寄存器寻址方式 如:ADD BH,78hADD AX,1234h源和目的操作数都是寄存器寻址方式 如:MOV AX,BX MOV DH,BL等。,注:由于指令所需的操作数已存储在寄存器中,或操作的结果存入寄存器,这样,在指令执行过程中,会减少读/写存储器单元的次数,所以,使用寄存

7、器寻址方式的指令具有较快的执行速度。通常情况下,提倡在编写汇编语言程序时,应尽可能地使用寄存器寻址方式,但也不要把它绝对化。,【例3.2】下列程序执行后,(AX)=?,(BX)=?MOV AX,1234H MOV BX,5678H ADD AX,BX解释:该程序中MOV指令为数据传送指令操作符,ADD指令为加法指令操作符,三条指令皆为双操作数指令。第一、二条指令AX、BX皆为目的操作数地址,为寄存器寻址方式。第三条指令中,AX为目的操作数地址,BX为源操作数地址。源地址和目的地址皆为寄存器寻址方式。执行:1234HAX 5678HBX(AX)+(BX)AX执行后:(AX)=68ACH,(BX)

8、=5678H,3.直接寻址方式,定义:指令所要的操作数存放在内存中,在指令中直接给出该操作数的有效地址,这种寻址方式为直接寻址方式。汇编格式:含有变量的地址表达式。功能:指令下一字单元的内容是操作数的偏移地址EA。图形表示:,【例3.3】执行指令:MOV BX,1234H 设(DS)=2000H。执行后:(AX)=?图示:执行:(21234H)BX执行后:(BX)=5312H,在通常情况下,操作数存放在数据段中,所以,其物理地址将由数据段寄存器DS和指令中给出的有效地址直接形成,但如果使用段超越前缀,那么,操作数可存放在其它段。例如:MOVES:1000H,AX 注意:立即寻址方式和直接寻址方

9、式的书写格式不同,直接寻址的地址要写在括号“”,“”内。在程序中,直接地址通常用内存变量名来表示,如:MOV BX,VARW,其中,VARW是内存字变量。试比较下列指令中源操作数的寻址方式(VARW是内存字变量):,4.寄存器间接寻址方式,定 义:操作数在存储器中,操作数的有效地址用SI、DI、BX和BP等四个寄存器之一来指定,称这种寻址方式为寄存器间接寻址方式。汇编格式:R功 能:操作数存放在存储器,寄存器R存放操作数的偏移地址EA。图形表示:,【例3.4】假设有指令:MOV BX,DI,在执行时,(DS)=1000H,(DI)=2345H,存储单元12345H的内容是4354H。问执行指令

10、后,BX的值是什么?解:寄存器DI的值不是操作数,而是操作数的地址。该操作数的物理地址应由DS和DI的值形成,即:PA=(DS)*16+DI=1000H*16+2345H=12345H。所以,该指令的执行效果是:把从物理地址为12345H开始的一个字的值传送给BX。,在不使用段超越前缀的情况下,有下列规定:若有效地址用SI、DI和BX等之一来指定,则其缺省的段寄存器为DS;若有效地址用BP来指定,则其缺省的段寄存器为SS(即:堆栈段)。该寻址方式物理地址的计算方法如下:BX 物理地址PA=16DS+SI DI或 物理地址PA=16SS+BP,5.寄存器相对寻址方式,定 义:操作数在存储器中,其

11、有效地址是一个基址寄存器(BX、BP)或变址寄存器(SI、DI)的内容和指令中的8位/16位偏移量之和。汇编格式:XR(X表示位移量,是8位或16位二进制补码表示的有符号数)功 能:操作数存放在存储器,寄存器R的内容加位移量X为操作数的偏移地址EA。图形表示如下:,【例3.5】假设指令:MOV BX,SI+100H,在执行它时,(DS)=1000H,(SI)=2345H,内存单元12445H的内容为2715H,问该指令执行后,BX的值是什么?解:EA=(SI)+100H=2345H+100H=2445H PA=(DS)*16+EA=1000H*16+2445H=12445H。所以,该指令的执行

12、效果是:把从物理地址为12445H开始的一个字的值传送给BX。,6.基址变址寻址方式,定 义:操作数在存储器中,其有效地址是一个基址寄存器(BX、BP)和一个变址寄存器(SI、DI)的内容之和。汇编格式:BR+IR功 能:操作数存放在存储器,BR的内容加IR的内容是操作数的偏移地址EA。图形表示:,【例3.6】假设指令:MOV BX,BX+SI,在执行时,(DS)=1000H,(BX)=2100H,(SI)=0011H,内存单元12111H的内容为1234H。问该指令执行后,BX的值是什么?解:操作数的物理地址PA为:PA=(DS)*16+(BX)+(SI)=1000H*16+2100H+00

13、11H=12111H所以,该指令的执行效果是:把从物理地址为12111H开始的一个字的值传送给BX。,7.相对基址变址寻址方式,定 义:操作数在存储器中,其有效地址是一个基址寄存器(BX、BP)的值、一个变址寄存器(SI、DI)的值和指令中的8位/16位偏移量之和。汇编格式:X BR+IR功 能:操作数存放在存储器,BR内容加IR内容加位移量X是操作数的偏移地址EA。图形表示:,存储器,【例3.7】假设指令:MOV AX,BX+SI+200H,在执行时,(DS)=1000H,(BX)=2100H,(SI)=0010H,内存单元12310H的内容为1234H。问该指令执行后,AX的值是什么?解:

14、该操作数的物理地址应由DS和EA的值形成,即:PA=12310H所以,该指令的执行效果是:把从物理地址为12310H开始的一个字的值传送给AX。,跨段越问题,凡是使用寄存器为BX、SI、DI时,其默认段为DS,使用BP时,默认段为SS。该规定为系统默认状态。当要否定默认状态,到非约定段寻找操作数时,必须用跨段前缀指明操作数的段寄存器名。汇编格式:段寄存器名:操作数地址。功能:冒号“:”之前的段寄存器名指明操作数所在的段。【例3.8】MOV AX,DS:BP MOV CX,SS:SI 该例中,DS:,SS:均为跨段前缀,此时默认状态无效,操作数的物理地址PA由段寄存器内容左移4位加偏移EA形成。

15、上述2条指令的源操作数物理地址分别为:PA1=(DS)左移4位+BP PA2=(SS)左移4位+SI,3.1.2 与转移地址有关的寻址方式,用来确定转移指令及转子(call)指令的转向地址。转移地址是由各种寻址方式得到的有效地址和段地址相加而成的,有效地址存入IP寄存器中,段地址指定为CS段寄存器内容。段内寻址 段内直接寻址 JMP NEAR PTR NEXT 段内间接寻址 JMP TABLE BX 段间寻址 段间直接寻址 JMP FAR PTR NEXT 段间间接寻址 JMP DWORD PTR BX,(1)段内直接寻址,转向的有效地址=当前(IP)+位移量(8bit/16bit),【例3.

16、8】(1)JMP SHORT QUEST 其中QUEST表示转移的符号地址,操作符SHORT表示是个8位带符号数,数的范围是80H 7FH,即-128+127。它只能相对于当前IP(转移指令的下一条指令的首地址)所指的位置作-128+127范围内跳转,所以称为短跳转。(2)JMP NEAR PTR PROGA 其中PROGA表示转移的符号地址,操作符NEAR PRT表示是个16位带符号数,数的范围是8000H 7FFFH,即-32768+32767。它只能相对于当前IP所指的位置作-32768+32767范围内跳转,所以称为近跳转。,(2)段内间接寻址,转向的有效地址是一个寄存器或存储单元的内

17、容。可用除立即数以外的任何一种数据寻址方式得到,所得到的转向的有效地址取代IP寄存器的内容。,【例3.9】已知 TABLE=20A2H,(BX)=1256H,(SI)=528EH,(DS)=2000H,(232F8H)=3280H,(264E4H)=2450H JMP BX;(IP)=1256H JMP WORD PTR TABLEBX;(IP)=3280H JMP WORD PTR BXSI;(IP)=2450H,(3)段间直接寻址,用指令中提供的转向段地址和偏移地址取代CS 和 IP。,【例3.9】JMPFAR PTR NEXTROUNT,32,EA,01,00,10,10,CS=0000

18、H,CS,00000,02000,IP,IP=2000H,CS,CS=1000H,NEXTROUNT,IP=0132H,10132,10000,新IP,新CS,(4)段间间接寻址,用存储器中的两个相继字的内容取代CS 和 IP,存储单元的地址可用存储器寻址方式得到。,【例3.10】JMPDWORD PTR INTERS+BX 如DS=3000H,BX=1200H,INTERS=0020H,则存储单元的物理地址PA=30000+0020+1200=31200H 指令执行前,CS=0000H,IP=1000H,(31220H)=40H,(31221)=01H,(31222H)=00H,(31223

19、)=10H。指令执行后,CS=1000H,IP=0140H,(31220H)=40H,(31221)=01H,(31222H)=00H,(31223)=10H。,指令存储和执行情况:,3.2 程序占有的空间和执行时间,3.80 x86的指令系统,80X86指令系统分为以下6组:数据传送指令 串处理指令 算术指令 控制转移指令 逻辑指令 处理机控制与杂项操作指令 在学习汇编指令时,指令的功能是我们学习和掌握的重点,但要准确、有效地运用这些指令,我们还要熟悉系统对每条指令的一些规定或约束。因此,对指令要掌握以下几个方面内容:指令操作数的寻址方式;指令对标志位的影响、标志位对指令的影响;指令的执行时

20、间,对可完成同样功能的指令,要选用执行时间短的指令。,3.数据传送指令,数据传送指令负责把数据、地址或立即数传送到寄存器、存储器或端口号寄存器。它相对于高级语言里的赋值语句。通用数据传送:MOV PUSH POP 累加器专用传送(输入输出):IN OUT XLAT地址传送:LEA LDS LES标志寄存器传送:LAHF SAHF PUSHF POPF类型转换指令:CBW CWD,MOV 传送指令,格 式:MOV Reg/Mem,Reg/Mem/Imm 其中:RegRegister(寄存器),MemMemory(存储器),ImmImmediate(立即数),它们可以是8位、16位。功 能:指令的

21、功能是把源操作数(第二操作数)的值传给目的操作数(第一操作数)。指令执行后,目的操作数的值被改变,而源操作数的值不变。在存储单元是该指令的一个操作数时,该操作数的寻址方式可以是任意一种存储单元寻址方式。,在汇编语言中,主要的数据传送方式如下图所示。虽然一条MOV指令能实现其中大多数的数据传送方式,但也存在MOV指令不能实现的传送方式。,对MOV指令有以下几条具体规定,其中有些规定对其它指令也同样有效。(1)两个操作数的数据类型要相同,要同为8位、16位,如:MOV BL,AX等是不正确的;(2)两个操作数不能同时为段寄存器,如:MOV ES,DS等;(3)代码段寄存器CS不能为目的操作数,但可

22、作为源操作数,如:指令MOV CS,AX等不正确,但指令MOV AX,CS等是正确的;(4)立即数不能直接传给段寄存器,如:MOV DS,100H等;(5)立即数不能作为目的操作数,如:MOV 100H,AX等;(6)指令指针IP,不能作为MOV指令的操作数;(7)两个操作数不能同时为存储单元,如:MOV VARA,VARB等,其中VARA和VARB是同数据类型的内存变量。,PUSH进栈指令,堆栈是一个重要的数据结构,它具有“先进后出”的特点,通常用来保存程序的返回地址。它主要有两大类操作:进栈操作和出栈操作。指令格式:PUSHReg/Mem 一个字进栈,系统自动完成两步操作:SPSP-2,(

23、SP)操作数;功 能:将寄存器、段寄存器或存储器中的一个字数据压入堆栈,堆栈指针减2。,【例】PUSH AX,POP进栈指令,指令格式:POPReg/Mem 弹出一个字,系统自动完成两步操作:操作数(SP),SPSP+2;功 能:将栈顶元素弹出送至某一寄存器、段寄存器(除CS外)或存储器,堆栈指针加2。,【例】POP BX,IN输入指令,输入指令用来从指定的外设寄存器取信息送入累加器。它有几种形式:长格式:IN AL,PORT(字节)IN AX,PORT(字)执行操作:(AL)(PORT)(字节)(AX)(PORT+1,PORT)(字)短格式:IN AL,DX(字节)IN AX,DX(字)执行

24、操作:(AL)(DX)(字节)(AX)(DX)+1,(DX)(字),注意:该指令的作用是从端口中读入一个字节或字,并保存在寄存器AL或AX中。如果某输入设备的端口地址在0255范围之内,那么,可在指令IN中直接给出,否则,要把该端口地址先存入寄存器DX中,然后在指令中由DX来给出其端口地址。,例如:IN AL,60H;从端口60H读入一个字节到AL中IN AX,20H;把端口20H、21H按“高高低低”组成的 字读入AXMOV DX,2F8HIN AL,DX;从端口2F8H读入一个字节到AL中IN AX,DX;把端口2F8H、2F9H按“高高低低”组成 的字读入AX,OUT输出指令,输出指令用

25、来把累加器的内容送往指定的外设存储器,它有几种形式:长格式:OUT PORT,AL(字节)OUT PORT,AX(字)执行操作:(PORT)(AL)(字节)(PORT+1,PORT)(AX)(字)短格式:OUT DX,AL(字节)OUT DX,AX(字)执行操作:(DX)(AL)(字节)(DX)+1,(DX)(AX)(字),注意:该指令的作用是把寄存器AL或AX的内容输出到指定端口。如果某输出设备的端口地址在0255范围之内,那么,可在指令OUT中直接给出,否则,要把该端口地址先存入寄存器DX中,然后在指令中由DX来给出其端口地址。,例如:OUT 61H,AL;把AL的内容输出到端口61H中O

26、UT 20H,AX;把AX的内容输出到端口20H、21H中MOV DX,3C0HOUT DX,AL;把AL的内容输出到端口3C0H中OUT DX,AX;把AX的内容输出到端口3C0H、3C1H中,XLAT 换码指令,转换指令有两个隐含操作数BX和AL。格 式:XLAT OPR 或 XLAT执行操作:(AL)(BX)+(AL)功 能:其功能是把BX的值作为内存字节数组首地址、下标为AL的数组元素的值传送给AL。,例:MOV BX,offset table;(BX)=0040H MOV AL,3 XLAT 指令执行后(AL)=33H,把BX的值作为内存字节数组首地址、下标为AL的数组元素的值传送给

27、AL。,地址传送指令,取有效地址指令LEA:指令LEA是把一个内存变量的有效地址送给指定的寄存器。其指令格式如下:LEAReg,Mem该指令通常用来对指针或变址寄存器BX、DI或SI等置初值之用。取段寄存器指令:该组指令的功能是把内存单元的一个“低字”传送给指令中指定的16位寄存器,把随后的一个“高字”传给相应的段寄存器(DS、ES)。其指令格式如下:LDS/LESReg,Mem,例:LEA BX,BX+SI+0F62H LDS SI,10H LES DI,BX,MOV BX,TABLE;(BX)=0040HMOV BX,OFFSET TABLE;(BX)=1000HLEA BX,TABLE;

28、(BX)=1000HLDS BX,TABLE;(BX)=0040H;(DS)=3000HLES BX,TABLE;(BX)=0040H;(ES)=3000H,标志寄存器传送指令,标志送AH指令:LAHF 执行操作:(AH)(FLAGS的低字节)AH送标志寄存器指令:SAHF执行操作:(FLAGS的低字节)(AH)标志进栈指令:PUSHF 执行操作:(SP)(SP)-2(SP)+1,(SP)(FLAGS)标志出栈指令:POPF执行操作:(FLAGS)(SP)+1,(SP)(SP)(SP)+2,类型转换指令指令,CBW AL AX 执行操作:若(AL)的最高有效位为0,则(AH)=00H 若(AL

29、)的最高有效位为1,则(AH)=FFHCWD AX(DX,AX)执行操作:若(AX)的最高有效位为0,则(DX)=0000H 若(AX)的最高有效位为1,则(DX)=FFFFH 例:(AX)=0BA45H CBW;(AX)=0045H CWD;(DX)=0FFFFH(AX)=0BA45H,3.算术指令,算术运算指令是反映CPU计算能力的一组指令,也是编程时常使用的一组指令。它包括:加、减、乘、除及其相关的辅助指令。该组指令的操作数可以是8位、16位。当存储单元是该类指令的操作数时,该操作数的寻址方式可以是任意一种存储单元寻址方式。加法指令 ADD、ADC、INC 减法指令 SUB、SBB、DE

30、C、NEG、CMP 乘法指令 MUL、IMUL 除法指令 DIV、IDIV 十进制调整指令 DAA、DAS、AAA、AAS、AAM、AAD,1.加法指令,加法指令:ADD DST,SRC功能:将目的操作数与源操作数相加,结果存入目的地址中,源地址的内容不改变。执行操作:(DST)(SRC)+(DST)带进位加法指令:ADC DST,SRC 功能:将目的操作数加源操作数再加低位进位,结果送目的地址。执行操作:(DST)(SRC)+(DST)+CF 加1指令:INC OPR 功能:将目的操作数加1,结果送目的地址。执行操作:(OPR)(OPR)+1注意:除INC指令不影响CF标志外,均对条件标志位

31、有影响。,标志寄存器FLAGS的介绍,指令的执行与标志有很大关系。标志分成两类:状态标志用来记录程序运行结果的状态信息,许多指令的执行都将相应地设置它。它们分别是:CF ZF SF PF OF AF 控制标志可由程序根据需要用指令设置,用于控制处理器执行指令的方式。它们分别是:DF IF TF,15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0,OF DF IF TF SF ZF AF PF CF,进位标志CF(Carry Flag),当运算结果的最高有效位有进位(加法)或借位(减法)时,进位标志置1,即CF=1;否则CF=0。例如:3AH+7CHB6H,没有进位:CF

32、=0 AAH+7CH(1)26H,有进位:CF=1,零标志ZF(Zero Flag),若运算结果为0,则ZF=1,否则ZF=0。例如:3AH+7CHB6H,结果不是零:ZF=0 86H+7CH(1)00H,结果是零:ZF=1注意:ZF为1表示的结果是0。,符号标志SF(Sign Flag),运算结果最高位为1,则SF=1;否则SF=0。例如:3AH+7CHB6H,最高位D71:SF=1 86H+7CH(1)00H,最高位D70:SF=0注意:有符号数据利用最高有效位表示数据的符号。所以,最高有效位就是符号标志的状态。,奇偶标志PF(Parity Flag),当运算结果最低字节中“1”的个数为零

33、或偶数时,PF=1;否则PF=0。例如:3AH+7CHB6H10110110B,结果中有5个1,是奇数:PF=0注意:PF标志仅反映最低8位中“1”的个数是偶或奇,即使是进行16位字操作。,辅助进位标志AF(Auxiliary Carry Flag),运算时D3位(低半字节)有进位或借位时,AF=1;否则AF=0。例如:3AH+7CHB6H,D3有进位:AF=1 注意:这个标志主要由处理器内部使用,用于十进制算术运算指令中,用户一般不必关心。,溢出标志OF(Overflow Flag),若算术运算的结果有溢出,则OF=1;否则 OF0。例如:3AH+7CHB6H,没有溢出:OF=0 AAH+7

34、CH(1)26H,产生溢出:OF=1问题:什么是溢出?溢出和进位有什么区别?如何判断是否溢出?,举例:n=8 bit 带符号数(-128127),无符号数(0255),0 0 0 0 0 1 0 0+0 0 0 0 1 0 1 1 0 0 0 0 1 1 1 1带:(+4)+(+11)=+15 OF=0无:4+11=15 CF=0,带符号数和无符号数都不溢出,0 0 0 0 1 0 0 1+0 1 1 1 1 1 0 0 1 0 0 0 0 1 0 1 带:(+9)+(+124)=-133 OF=1 无:9+124=133 CF=0,带符号数溢出,无符号数溢出,0 0 0 0 0 1 1 1+

35、1 1 1 1 1 0 1 1 1 0 0 0 0 0 0 1 0带:(+7)+(-5)=+2 OF=0无:7+251=258 CF=1,带符号数和无符号数都溢出,1 0 0 0 0 1 1 1+1 1 1 1 0 1 0 1 1 0 1 1 1 1 1 0 0带:(-121)+(-11)=+134 OF=1无:135+245=124 CF=1,CF 位表示无符号数相加的溢出。OF 位表示带符号数相加的溢出。,【例1】加1指令。INC BX;(BX)+1BX。【例2】双字加法运算,设目的操作数存放在DX和AX寄存器中,其中DX放高位字,源操作数存放在BX和CX寄存器中,其中BX放高位字,指令执

36、行前:(DX)=0020H,(AX)=0F365H,(BX)=0005H,(CX)=0E024H。ADDAX,CX;(AX)=0D389H,CF=1 ADCDX,BX;(DX)=0008H,CF=0,2.减法指令,减法指令:SUB DST,SRC 功能:目的操作数减去源操作数,结果存于目的地址,源地址的内容不变。执行操作:(DST)(DST)-(SRC)带借位减法指令:SBB DST,SRC 功能:目的操作数减源操作数再减低位借位CF,结果送目的地址执行操作:(DST)(DST)-(SRC)-CF 减1指令:DEC OPR 功能:将目的操作数减1,结果送目的地址。执行操作:(OPR)(OPR)

37、-1,减法指令对条件标志位的影响:,CF 位表示无符号数减法的溢出。OF 位表示带符号数减法的溢出。,1 被减数的最高有效位有向高位的借位0 否则,CF=,1 两个操作数符号相反,而结果的符号与减数相同0 否则,OF=,2.减法指令,求补指令:NEG OPR 功能:将目的操作数的每一位求反(包括符号位)后加1,结果送目的地址。执行操作:(OPR)-(OPR)比较指令:CMP OPR1,OPR2 功能:目的操作数减源操作数,结果只影响标志位,不送入目的地址。执行操作:(OPR1)-(OPR2)注意:除DEC指令不影响 CF标志外,均对条件标志位有影响。,【例1】求补运算。MOVDX,6780H

38、NEGDX;(DX)=9880H【例2】比较AL的内容数值大小。CMPAL,50;(AL)-50 JBBellow;(AL)=50,(AL)50AL INCAH;(AH)+1AH Bellow:,0 0 0 0H-)6 7 8 0 HCF 1 9 8 8 0 H,3.乘法指令,无符号数乘法指令:MUL SRC 带符号数乘法指令:IMUL SRC 功 能:若是字节数据相乘,(AL)与SRC相乘得到字数据存入AX中;若是字数据相乘,则(AX)与SRC相乘得到双字数据,高字存入DX、低字存入AX中。执行操作:字节操作数(AX)(AL)(SRC)字操作数(DX,AX)(AX)(SRC)注:IMUL指令

39、除计算对象是带符号二进制数外,其他都与MUL一样,但计算结果不同。,乘法指令如下影响OF和CF标志:MUL指令若乘积的高一半(AH或DX)为0,则OF=CF=0;否则OF=CF=1。(用来检查字节相乘的结果是字节还是字,或字相乘的结果是字还是双字)IMUL指令若乘积的高一半是低一半的符号扩展,则OF=CF=0;否则均为1。乘法指令对其他状态标志没有定义:指令执行后这些标志是任意的、不可预测(就是谁也不知道是0还是1)。对标志没有影响是指令的执行不改变标志的状态。,例:无符号乘法:MOV AL,0B4H;AL=B4H=180MOV BL,11H;BL=11H=17MUL BL;AX=OBF4H=

40、3060,;OF=CF=1;AX高8位不为0有符号乘法:MOV AL,0B4H;AL=B4H=76MOV BL,11H;BL=11H=17IMUL BL;AX=FAF4H=1292,;OF=CF=1;AX高8位含有效数字,编写程序段,完成下面计算公式,并把所得的商和余数分别存入X和Y中(其中:A,B,C,X和Y都是有符号的字变量)。(C-120+A*B)/C解:A DW?B DW?C DW?X DW?Y DW?MOV AX,CSUB AX,120D;书写指令“ADD AX,-120D”也可以CWDMOV CX,DXMOVBX,AX;(CX,BX)(DX,AX),调度寄存器,为作乘法准备必要的寄

41、存器MOVAX,AIMULB;(DX,AX)A*BADDAX,BX;计算32位二进制之和,为作除法作准备ADCDX,CXIDIVC;AX是商,DX是余数MOVX,AX;分别保存商和余数到指定的字变量单元里MOVY,DX,4.除法指令,无符号数除法指令:DIV SRC 带符号数除法指令:IDIV SRC执行操作:字节操作(AL)(AX)/(SRC)的商(AH)(AX)/(SRC)的余数 字操作(AX)(DX,AX)/(SRC)的商(DX)(DX,AX)/(SRC)的余数注意:除法指令DIV和IDIV虽然对标志的影响未定义,但可产生溢出。,例:无符号除法:MOV AX,0400H;AX=400H=

42、1024MOV BL,0B4H;BL=B4H=180DIV BL;商AL05H5;余数AH7CH124有符号除法:MOV AX,0400H;AX=400H=1024MOV BL,0B4H;BL=B4H=76IDIV BL;商ALF3H13;余数AH24H36注:带符号除法的余数符号和被除数符号相同。,当被除数远大于除数时,所得的商就有可能超出它所能表达的范围。如果存放商的寄存器AL/AX不能表达,便产生溢出,8086CPU中就产生编号为0的内部中断除法错中断。说明:(1)对DIV指令,除数为0,或者在字节除时商超过8位,或者在字除时商超过16位,则发生除法溢出。(2)对IDIV指令,除数为0,

43、或者在字节除时商不在-128127范围内,或者在字除时商不在-3276832767范围内,则发生除法溢出。,5.十进制调整指令,BCD码(8421码):用二进制编码的十进制数,又称二-十进制数。压缩的BCD码:用 4 位二进制数表示 1 位十进制数。例:(59)10(0101 1001)BCD非压缩的BCD码:用 8 位二进制数表示 1 位十进制数 例:(59)10(0000 0101 0000 1001)BCD,问题的提出:,19 0001 1001,27 0010 0001+110=0010 0111,+08+0000 1000,(0010 0111)BCD,AF=1,12 0001 00

44、10,35 0011 0101,+23+0010 0011,(0011 0101)BCD,思考:51+83=?,5.十进制调整指令,(1)压缩的BCD码调整指令 DAA 加法的十进制调整指令 DAS 减法的十进制调整指令(2)非压缩的BCD码调整指令 AAA 加法的ASCII码调整指令 AAS 减法的ASCII码调整指令 AAM 乘法的ASCII码调整指令 AAD 除法的ASCII码调整指令,加法的十进制调整指令DAA,语句格式:DAA 如果AL寄存器中低4位大于9或辅助进位AF=1,则AL=AL+6且AF=1;如果AL=0A0H或CF=1,则AL=AL+60H且CF=1。同时,SF、ZF、P

45、F均有影响。【例】压缩BCD码的加法运算。MOV AL,68H;(AL)=68H,表示压缩BCD码68MOV BL,28H;(BL)=28H,表示压缩BCD码28ADD AL,BL;二进制加法:(AL)=68H+28H=90HDAA;十进制调整:(AL)=96H;实现压缩BCD码加法:68+28=96注:使用DAA或DAS指令前,应先执行以AL为目的操作数的加法或减法指令。,减法的十进制调整指令DAS,语句格式:DAS具体实现:如果AF=1或AL寄存器中低4位大于9,则AL=AL6且AF=1;如果AL=0A0H或CF=1,则AL=AL60H且CF=1。同时SF、ZF、PF均受影响。【例】压缩B

46、CD码的减法运算。MOVAL,68H;(AL)=68H,表示压缩BCD码68MOVBL,28H;(BL)=28H,表示压缩BCD码28SUBAL,BL;二进制减法:(AL)=68H28H=40HDAS;十进制调整:(AL)=40H;实现压缩BCD码减法:6828=40,加法的ASCII调整指令AAA,语句格式:AAA功能:如果AL的低4位大于9或AF=1,则:AL=AL+6,AH=AH+1,AF=CF=1,且AL高4位清零。否则:CF=AF=0,AL高4位清零。【例】MOV AX,0608H;AX=0608H,非压缩BCD码表示真值68MOV BL,09H;BL=09H,非压缩BCD码表示真值

47、9ADD AL,BL;二进制加法:AL=08H+09H=11HAAA;十进制调整:AX=0707H;实现非压缩BCD码加法:68977,减法的ASCII调整指令AAS,语句格式:AAS功能:如果AL的低4位大于9或AF=1,则:AL=AL6,AH=AH1,AF=CF=1,AL高4位清零。否则:CF=AF=0,AL高4位清零。其他标志位OF、PF、SF、ZF不确定。【例】MOV AX,0608H;AX=0608H,非压缩BCD码表示真值68MOV BL,09H;BL=09H,非压缩BCD码表示真值9SUB AL,BL;二进制减法:AL=08H09H=FFHAAS;十进制调整:AX=0509H;实

48、现非压缩BCD码减法:680959注:使用DAA或DAS指令前,应先执行以AL为目的操作数的加法或减法指令。,3.逻辑指令,逻辑指令包括逻辑运算指令和移位操作指令两大类。其中逻辑运算指令是一组重要的指令,它包括:逻辑与(AND)、逻辑或(OR)、逻辑非(NOT)和异或指令(XOR),逻辑运算指令也是经常使用的指令。移位操作指令是另一组经常使用的指令,它包括算术移位、逻辑移位、双精度移位、循环移位和带进位的循环移位等五大类。,1.逻辑运算指令,逻辑与指令:AND DST,SRC功 能:把源操作数中的每位二进制与目的操作数中的相应二进制进行逻辑“与操作”,操作结果存入目标操作数中。执行操作:(DS

49、T)(DST)(SRC)用途:该指令用于清除目的操作数中与源操作数置0的对应位。【例】已知(BH)=67H,要求把其的第0、1和5位置为0。解:可以构造一个立即数,其第0、1和5位的值为0,其它位的值为1,该立即数即为:0DCH或11011100B,然后用指令“AND BH,0DCH“来实现此功能。,逻辑或指令:OR DST,SRC功 能:把源操作数中的每位二进制与目的操作数中的相应二进制进行逻辑或操作,操作结果存入目标操作数中。执行操作:(DST)(DST)(SRC)用途:该指令用于设置目的操作数中与源操作数置1的对应位。【例】已知(BL)=46H,要求把其的第1、3、4和6位置为1。解:构

50、造一个立即数,使其第1、3、4和6位的值为1,其它位的值为0,该立即数即为:5AH或01011010B,然后用指令“OR BL,5AH 来实现此功能。,逻辑非指令:NOT OPR*OPR不能为立即数功能:将目的地址中的内容逐位取反后送入目的地址。执行操作:(OPR)(OPR)【例】逻辑非运算。MOVAX,878AH;(AX)=878AH NOTAX,;(AX)=7875H,异或指令:XOR DST,SRC功能:把源操作数中的每位二进制与目的操作数中的相应二进制进行逻辑“异或操作”,操作结果存入目标操作数中。执行操作:(DST)(DST)(SRC)【例】已知(AH)=46H,要求把其的第0、2、

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

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


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号