收藏 分享(赏)

IBM-PC汇编语言(③80x86指令系统和寻址方式).ppt

上传人:wspkg9802 文档编号:5957370 上传时间:2019-03-22 格式:PPT 页数:148 大小:517.50KB
下载 相关 举报
IBM-PC汇编语言(③80x86指令系统和寻址方式).ppt_第1页
第1页 / 共148页
IBM-PC汇编语言(③80x86指令系统和寻址方式).ppt_第2页
第2页 / 共148页
IBM-PC汇编语言(③80x86指令系统和寻址方式).ppt_第3页
第3页 / 共148页
IBM-PC汇编语言(③80x86指令系统和寻址方式).ppt_第4页
第4页 / 共148页
IBM-PC汇编语言(③80x86指令系统和寻址方式).ppt_第5页
第5页 / 共148页
点击查看更多>>
资源描述

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

2、作数 是指令执行的参与者,即各种操作的对象。有些指令不需要操作数,通常的指令都有一个或两个操作数,也有个别指令有3个甚至4个操作数,通常称为一地址指令、二地址指令、三,3.1.2 指令格式,4,指令的功能该指令能够实现何种操作。通常指令助记符就是指令功能的英文单词或其缩写形式。 指令支持的寻址方式该指令中的操作数可以采用何种寻址方式。 指令对标志的影响该指令执行后是否对各个标志位(OV、Z、C、P等)有影响,以及如何影响。,3.1.3 学习指令的注意事项,5,3.2 80x86寻址方式,操作数可以跟随在指令操作码之后,称为立即数;操作数也可以存放在CPU内部的寄存器中,称为寄存器操作数。绝大多

3、数的操作数存放在内存储器中,称为存储器操作数。指令指定操作数的位置,即给出地址信息,在执行时需要根据这个地址信息找到需要的操作数。,3.2.1 寻址、寻址方式的概念,寻址就是寻找操作数的地址。,寻址方式就是寻找操作数的方法。,6,指令助记符体现该指令的功能,它对应一条二进制编码的机器指令。指令的操作数个数由该指令确定,可以没有操作数,也可以有一个、二个或三个操作数。,3.2.2 80X86的指令格式,指令助记符 操作数1 , 操作数2 , 操作数3 ;注释,7,3.2.3 与数据有关的寻址方式,以 MOV 指令为例: 立即寻址 MOV AX , 3069H 寄存器寻址 MOV AL , BH

4、直接寻址 MOV AX , 2000H 寄存器间接寻址 MOV AX , BX 寄存器相对寻址 MOV AX , COUNT SI 基址变址寻址 MOV AX , BP DI 相对基址变址寻址 MOV AX , MASK BX SI ,8,1) 立即寻址方式,图形表示:,定义:操作数作为指令的一部分而直接写在指令中,这种操作数称为立即数,这种寻址方式也就称为立即数寻址方式。,汇编格式:n(n为立即操作数,是用8位或16位二进制补码表示的有符号数),功能:操作数存放在存储器,指令下一单元的内容为立即操作数n。,9,【例3.1】 MOV AX, 4576H 执行后(AX)=?,OP,76H,45H

5、,76,45,该例中源操作数为立即寻址方式,立即数为4576H,存放在指令的下一单元。,执行:4576HAX,执行后:(AX)=4576H,10,2) 寄存器寻址方式,定义:指令所要的操作数已存储在某寄存器中,或把目标操作数存入寄存器。把在指令中指出所使用寄存器(即:寄存器的助记符)的寻址方式称为寄存器寻址方式。,汇编格式:R (其中R表示寄存器名,如AX、BX等。),功能:操作数直接存放在寄存器R中。,图形表示:,11,指令中可以引用的寄存器及其符号名称如下: 8位寄存器有:AH、AL、BH、BL、CH、CL、DH和DL等;16位寄存器:AX、BX、CX、DX、SI、DI、SP、BP和段寄存

6、器等;,注:由于指令所需的操作数已存储在寄存器中,或操作的结果存入寄存器,这样,在指令执行过程中,会减少读/写存储器单元的次数,所以,使用寄存器寻址方式的指令具有较快的执行速度。通常情况下,提倡在编写汇编语言程序时,应尽可能地使用寄存器寻址方式,但也不要把它绝对化。,12,【例3.2】下列程序执行后,(AX)=?,(BX)=?MOV AX,1234HMOV BX,5678HADD AX,BX,执行:1234HAX,执行后:(AX)=68ACH,(BX)=5678H,5678HBX,(AX)+(BX)AX,13,3) 直接寻址方式,定义:指令所要的操作数存放在内存中,在指令中直接给出该操作数的有

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

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

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

10、13.23.4 1) 2) 3),21,5. 寄存器相对寻址方式,定 义:操作数在存储器中,其有效地址是一个基址寄存器(BX、BP)或变址寄存器(SI、DI)的内容和指令中的8位/16位偏移量之和。 汇编格式:XR(X表示位移量,是8位或16位二进制补码表示的有符号数) 功 能:操作数存放在存储器,寄存器R的内容加位移量X为操作数的偏移地址EA。 图形表示如下:,22, ,10000H,12345H,DS,CS,10000H,12345H,23,【例3.5】假设指令:MOV BX, SI+100H,在执行它时,(DS)=1000H,(SI)=2345H,内存单元12445H的内容为2715H,

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

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

13、EA。 图形表示:,存储器,27,【例3.7】假设指令:MOV AX, BX+SI+200H,在执行时,(DS)=1000H,(BX)=2100H,(SI)=0010H,内存单元12310H的内容为1234H。问该指令执行后,AX的值是什么? 解:该操作数的物理地址应由DS和EA的值形成,即: PA=12310H所以,该指令的执行效果是: 把从物理地址为12310H开始 的一个字的值传送给AX。,28,跨段越问题,凡是使用寄存器为BX、SI、DI时,其默认段为DS,使用BP时,默认段为SS。该规定为系统默认状态。当要否定默认状态,到非约定段寻找操作数时,必须用跨段前缀指明操作数的段寄存器名。

14、汇编格式:段寄存器名:操作数地址。 功能:冒号“:”之前的段寄存器名指明操作数所在的段。【例3.8】 MOV AX,DS:BP MOV CX,SS:SI 该例中,DS:,SS:均为跨段前缀,此时默认状态无效,操作数的物理地址PA由段寄存器内容左移4位加偏移EA形成。上述2条指令的源操作数物理地址分别为:PA1 =(DS)左移4位+BPPA2 =(SS)左移4位+ SI,29,3.1.2 与转移地址有关的寻址方式,用来确定转移指令及转子(call)指令的转向地址。转移地址是由各种寻址方式得到的有效地址和段地址相加而成的,有效地址存入IP寄存器中,段地址指定为CS段寄存器内容。段内寻址段内直接寻址

15、 JMP NEAR PTR NEXT 段内间接寻址 JMP TABLE BX 段间寻址段间直接寻址 JMP FAR PTR NEXT 段间间接寻址 JMP DWORD PTR BX ,30,(1) 段内直接寻址,转向的有效地址 = 当前(IP) + 位移量(8bit/16bit),31,【例3.8】 (1)JMP SHORT QUEST 其中QUEST表示转移的符号地址,操作符SHORT表示是个8位带符号数,数的范围是80H 7FH,即 -128 +127。它只能相对于当前IP(转移指令的下一条指令的首地址)所指的位置作-128 +127范围内跳转,所以称为短跳转。(2)JMP NEAR PT

16、R PROGA其中PROGA表示转移的符号地址,操作符NEAR PRT表示是个16位带符号数,数的范围是8000H 7FFFH,即 -32768 +32767。它只能相对于当前IP所指的位置作-32768 +32767范围内跳转,所以称为近跳转。,32,(2) 段内间接寻址,转向的有效地址是一个寄存器或存储单元的内容。可用除立即数以外的任何一种数据寻址方式得到,所得到的转向的有效地址取代IP寄存器的内容。,33,【例3.9】已知 TABLE=20A2H ,(BX)=1256H ,(SI)=528EH, (DS)=2000H ,(232F8H)= 3280H ,(264E4H)=2450HJMP

17、 BX ; (IP)=1256HJMP WORD PTR TABLEBX ; (IP)=3280HJMP WORD PTR BXSI ; (IP)=2450H,34,(3) 段间直接寻址,用指令中提供的转向段地址和偏移地址取代CS 和 IP。,35,【例3.9】 JMP FAR PTR NEXTROUNT,32,EA,01,00,10, , ,10,CS=0000H,CS,00000,02000,IP,IP=2000H,CS,CS=1000H,NEXTROUNT,IP=0132H,10132,10000,新IP,新CS,36,(4) 段间间接寻址,用存储器中的两个相继字的内容取代CS 和 IP

18、,存储单元的地址可用存储器寻址方式得到。,37,【例3.10】 JMP DWORD 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)=10H。指令执行后,CS=1000H,IP=0140H,(31220H)=40H,(31221)=01H,(31222H)=00H,(31223)=10H。,38,指令存储和执行情况:,39,3.2 程序占有的空间和

19、执行时间,40,3. 80x86的指令系统,80X86指令系统分为以下6组:数据传送指令 串处理指令算术指令 控制转移指令逻辑指令 处理机控制与杂项操作指令在学习汇编指令时,指令的功能是我们学习和掌握的重点,但要准确、有效地运用这些指令,我们还要熟悉系统对每条指令的一些规定或约束。因此,对指令要掌握以下几个方面内容: 指令操作数的寻址方式; 指令对标志位的影响、标志位对指令的影响; 指令的执行时间,对可完成同样功能的指令,要选用执行时间短的指令 。,41,3. 数据传送指令,数据传送指令负责把数据、地址或立即数传送到寄存器、存储器或端口号寄存器。它相对于高级语言里的赋值语句。 通用数据传送:M

20、OV PUSH POP 累加器专用传送(输入输出): IN OUT XLAT 地址传送: LEA LDS LES 标志寄存器传送: LAHF SAHF PUSHF POPF 类型转换指令:CBW CWD,42,MOV 传送指令,格 式: MOV Reg/Mem, Reg/Mem/Imm其中:RegRegister(寄存器),MemMemory(存储器),ImmImmediate(立即数),它们可以是8位、16位。 功 能:指令的功能是把源操作数(第二操作数)的值传给目的操作数(第一操作数)。指令执行后,目的操作数的值被改变,而源操作数的值不变。在存储单元是该指令的一个操作数时,该操作数的寻址方

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

22、; (5)立即数不能作为目的操作数,如:MOV 100H,AX等; (6)指令指针IP,不能作为MOV指令的操作数; (7)两个操作数不能同时为存储单元,如:MOV VARA,VARB等,其中VARA和VARB是同数据类型的内存变量。,45,PUSH进栈指令,堆栈是一个重要的数据结构,它具有“先进后出”的特点,通常用来保存程序的返回地址。它主要有两大类操作:进栈操作和出栈操作。 指令格式:PUSH Reg/Mem 一个字进栈,系统自动完成两步操作:SPSP-2,(SP)操作数;功 能:将寄存器、段寄存器或存储器中的一个字数据压入堆栈,堆栈指针减2。,46,【例】PUSH AX,47,POP进栈

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

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

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

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

28、 (BX)=1000H LEA BX,TABLE ; (BX)=1000H LDS BX, TABLE ; (BX)=0040H; (DS)=3000H LES BX,TABLE ; (BX)=0040H; (ES)=3000H,58,标志寄存器传送指令,标志送AH指令: LAHF执行操作:(AH)(FLAGS的低字节)AH送标志寄存器指令:SAHF 执行操作: (FLAGS的低字节)(AH)标志进栈指令:PUSHF执行操作: (SP)(SP) - 2(SP)+1, (SP)(FLAGS)标志出栈指令:POPF 执行操作: (FLAGS)(SP)+1,(SP)(SP)(SP)+ 2,59,类型

29、转换指令指令,CBW AL AX执行操作: 若(AL)的最高有效位为0,则(AH)= 00H若(AL)的最高有效位为1,则(AH)= FFHCWD AX (DX,AX) 执行操作:若(AX)的最高有效位为0,则(DX)= 0000H若(AX)的最高有效位为1,则(DX)= FFFFH例: (AX)= 0BA45HCBW ; (AX)=0045HCWD ; (DX)=0FFFFH (AX)=0BA45H,60,3. 算术指令,算术运算指令是反映CPU计算能力的一组指令,也是编程时常使用的一组指令。它包括:加、减、乘、除及其相关的辅助指令。该组指令的操作数可以是8位、16位。当存储单元是该类指令的

30、操作数时,该操作数的寻址方式可以是任意一种存储单元寻址方式。加法指令 ADD、ADC、INC减法指令 SUB、SBB、DEC、NEG、CMP乘法指令 MUL、IMUL 除法指令 DIV、IDIV十进制调整指令 DAA、DAS、 AAA、AAS、AAM、AAD,61,1.加法指令,加法指令: ADD DST,SRC 功能:将目的操作数与源操作数相加,结果存入目的地址中,源地址的内容不改变。 执行操作:(DST) (SRC)+(DST)带进位加法指令: ADC DST,SRC 功能:将目的操作数加源操作数再加低位进位,结果送目的地址。执行操作:(DST) (SRC)+(DST)+ CF加1指令:

31、INC OPR 功能:将目的操作数加1,结果送目的地址。 执行操作: (OPR) (OPR)+ 1 注意: 除INC指令不影响CF标志外,均对条件标志位有影响。,62,标志寄存器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,63,进位标志C

32、F(Carry Flag),当运算结果的最高有效位有进位(加法)或借位(减法)时,进位标志置1,即CF = 1;否则CF = 0。例如:3AH + 7CHB6H,没有进位:CF = 0AAH + 7CH(1)26H,有进位:CF = 1,64,零标志ZF(Zero Flag),若运算结果为0,则ZF = 1,否则ZF = 0。 例如:3AH + 7CHB6H,结果不是零:ZF = 086H + 7CH(1)00H,结果是零:ZF = 1 注意:ZF为1表示的结果是0。,65,符号标志SF(Sign Flag),运算结果最高位为1,则SF = 1;否则SF = 0。 例如:3AH + 7CHB6

33、H,最高位D71:SF = 186H + 7CH(1)00H,最高位D70:SF = 0注意:有符号数据利用最高有效位表示数据的符号。所以,最高有效位就是符号标志的状态。,66,奇偶标志PF(Parity Flag),当运算结果最低字节中“1”的个数为零或偶数时,PF = 1;否则PF = 0。 例如:3AH + 7CHB6H10110110B,结果中有5个1,是奇数:PF = 0注意:PF标志仅反映最低8位中“1”的个数是偶或奇,即使是进行16位字操作。,67,辅助进位标志AF(Auxiliary Carry Flag),运算时D3位(低半字节)有进位或借位时,AF = 1;否则AF = 0

34、。例如:3AH + 7CHB6H,D3有进位:AF = 1注意:这个标志主要由处理器内部使用,用于十进制算术运算指令中,用户一般不必关心。,68,溢出标志OF(Overflow Flag),若算术运算的结果有溢出,则OF=1;否则 OF0。 例如:3AH + 7CHB6H,产生溢出:OF = 1AAH + 7CH(1)26H,没有溢出:OF = 0 问题: 什么是溢出? 溢出和进位有什么区别? 如何判断是否溢出?,69,举例: n=8 bit 带符号数(-128127) , 无符号数(0255),0 0 0 0 0 1 0 0+ 0 0 0 0 1 0 1 10 0 0 0 1 1 1 1 带

35、:(+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 01 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+ 1 1 1 1 1 0 1 11 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 11 0 1 1 1 1 1

36、0 0 带:(-121)+(-11)=+134 OF=1 无:135+245=124 CF=1,CF 位表示无符号数相加的溢出。 OF 位表示带符号数相加的溢出。,70,【例1】加1指令。INC BX ;(BX)+1BX。【例2】双字加法运算,设目的操作数存放在DX和AX寄存器中,其中DX放高位字,源操作数存放在BX和CX寄存器中,其中BX放高位字,指令执行前:(DX)=0020H,(AX)=0F365H,(BX)=0005H,(CX)=0E024H。ADD AX,CX ;(AX)=0D389H,CF=1ADC DX,BX ;(DX)=0008H,CF=0,71,2.减法指令,减法指令: SU

37、B DST,SRC 功能:目的操作数减去源操作数,结果存于目的地址,源地址的内容不变。 执行操作: (DST)(DST)- (SRC)带借位减法指令: SBB DST,SRC 功能:目的操作数减源操作数再减低位借位CF,结果送目的地址 执行操作: (DST)(DST) - (SRC)- CF减1指令: DEC OPR 功能:将目的操作数减1,结果送目的地址。 执行操作: (OPR) (OPR) - 1,72,减法指令对条件标志位的影响:,CF 位表示无符号数减法的溢出。 OF 位表示带符号数减法的溢出。,1 被减数的最高有效位有向高位的借位 0 否则,CF=,1 两个操作数符号相反,而结果的符

38、号与减数相同 0 否则,OF=,73,2.减法指令,求补指令: NEG OPR 功能:将目的操作数的每一位求反(包括符号位)后加1,结果送目的地址。 执行操作:(OPR) - (OPR)比较指令: CMP OPR1, OPR2 功能:目的操作数减源操作数,结果只影响标志位,不送入目的地址。 执行操作:(OPR1) - (OPR2)注意: 除DEC指令不影响 CF标志外,均对条件标志位有影响。,74,【例1】求补运算。MOV DX,6780HNEG DX ;(DX)=9880H【例2】比较AL的内容数值大小。CMP AL,50 ;(AL)- 50JB Bellow ;(AL)=50,( AL)5

39、0ALINC AH ;(AH)+1AHBellow: ,0 0 0 0H- ) 6 7 8 0 H CF 1 9 8 8 0 H,75,3.乘法指令,无符号数乘法指令: MUL SRC带符号数乘法指令: IMUL SRC功 能: 若是字节数据相乘,(AL)与SRC相乘得到字数据存入AX中;若是字数据相乘,则(AX)与SRC相乘得到双字数据,高字存入DX、低字存入AX中。执行操作:字节操作数 (AX)(AL) (SRC)字操作数 (DX,AX)(AX) (SRC)注:IMUL指令除计算对象是带符号二进制数外,其他都与MUL一样,但计算结果不同。,76,乘法指令如下影响OF和CF标志:MUL指令若

40、乘积的高一半(AH或DX)为0,则OF=CF=0;否则OF=CF=1。(用来检查字节相乘的结果是字节还是字,或字相乘的结果是字还是双字)IMUL指令若乘积的高一半是低一半的符号扩展,则OF=CF=0;否则均为1。乘法指令对其他状态标志没有定义:指令执行后这些标志是任意的、不可预测(就是谁也不知道是0还是1)。对标志没有影响是指令的执行不改变标志的状态。,77,例: 无符号乘法: MOV AL,0B4H ;AL=B4H=180 MOV BL,11H ;BL=11H=17 MUL BL ; AX=OBF4H=3060,;OF=CF=1;AX高8位不为0 有符号乘法: MOV AL,0B4H ;AL

41、=B4H=76 MOV BL,11H ;BL=11H=17 IMUL BL ;AX=FAF4H=1292,;OF=CF=1;AX高8位含有效数字,78,编写程序段,完成下面计算公式,并把所得的商和余数分别存入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, DXMOV BX, AX ;(CX, BX)(DX, AX),调度寄存器,为作乘法准备必要的寄存器MOV A

42、X, AIMUL B ;(DX, AX)A*BADD AX, BX ;计算32位二进制之和,为作除法作准备ADC DX, CXIDIV C ;AX是商,DX是余数MOV X, AX ;分别保存商和余数到指定的字变量单元里MOV Y, DX,79,4.除法指令,无符号数除法指令: DIV SRC带符号数除法指令: IDIV SRC 执行操作: 字节操作 (AL)(AX)/(SRC)的商(AH)(AX)/(SRC) 的余数字操作 (AX)(DX,AX)/(SRC)的商(DX) (DX,AX)/(SRC) 的余数 注意:除法指令DIV和IDIV虽然对标志的影响未定义,但可产生溢出。,80,例: 无符

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

44、商超过8位,或者在字除时商超过16位,则发生除法溢出。 (2)对IDIV指令,除数为0,或者在字节除时商不在-128127范围内,或者在字除时商不在-3276832767范围内,则发生除法溢出。,82,5.十进制调整指令,BCD码(8421码):用二进制编码的十进制数,又称二-十进制数。压缩的BCD码:用 4 位二进制数表示 1 位十进制数。 例: (59)10 (0101 1001)BCD非压缩的BCD码:用 8 位二进制数表示 1 位十进制数例:( 59 )10 (0000 0101 0000 1001 )BCD,83,问题的提出:,19 0001 1001,27 0010 0001 +

45、110=0010 0111,+ 08 + 0000 1000,(0010 0111)BCD,AF=1,12 0001 0010,35 0011 0101,+ 23 + 0010 0011,(0011 0101)BCD,思考:51+83=?,84,5.十进制调整指令,(1)压缩的BCD码调整指令DAA 加法的十进制调整指令 DAS 减法的十进制调整指令 (2)非压缩的BCD码调整指令AAA 加法的ASCII码调整指令AAS 减法的ASCII码调整指令AAM 乘法的ASCII码调整指令AAD 除法的ASCII码调整指令,85,加法的十进制调整指令DAA,语句格式:DAA如果AL寄存器中低4位大于9

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

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

当前位置:首页 > 网络科技 > 开发文档

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报