欢迎来到三一文库! | 帮助中心 三一文库31doc.com 一个上传文档投稿赚钱的网站
三一文库
全部分类
  • 研究报告>
  • 工作总结>
  • 合同范本>
  • 心得体会>
  • 工作报告>
  • 党团相关>
  • 幼儿/小学教育>
  • 高等教育>
  • 经济/贸易/财会>
  • 建筑/环境>
  • 金融/证券>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 三一文库 > 资源分类 > PPT文档下载
     

    第3章80 x86指令系统和寻址方式.ppt

    • 资源ID:2549324       资源大小:671.01KB        全文页数:148页
    • 资源格式: PPT        下载积分:10
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录   微博登录  
    二维码
    微信扫一扫登录
    下载资源需要10
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    第3章80 x86指令系统和寻址方式.ppt

    1,第3章 80x86指令系统和寻址方式,教学要求: 掌握一般指令系统的基本概念:指令格式、功能和注意事项。 重点掌握8086/8088指令系统中,各指令的格式、寻址方式、指令类型 。 3. 了解其他(奔腾等)的寻址方式和指令类型。,2,3.1 指令系统的基本概念,计算机的指令系统就是指该计算机能够执行的全部指令的集合。 每种计算机都有它支持的指令集合。 16位8086指令系统是整个Intel 80x86 系列微处理器指令系统的基础。,3.1.1 指令系统,3,操作码 说明计算机要执行哪种操作,如传送、运算、移位、跳转等操作,它是指令中不可缺少的组成部分。,指令由操作码和操作数两部分组成。,操作数 是指令执行的参与者,即各种操作的对象。 有些指令不需要操作数,通常的指令都有一个或两个操作数,也有个别指令有3个甚至4个操作数,通常称为一地址指令、二地址指令、三,3.1.2 指令格式,4,指令的功能该指令能够实现何种操作。通常指令助记符就是指令功能的英文单词或其缩写形式。 指令支持的寻址方式该指令中的操作数可以采用何种寻址方式。 指令对标志的影响该指令执行后是否对各个标志位(OV、Z、C、P等)有影响,以及如何影响。,3.1.3 学习指令的注意事项,5,3.2 80x86寻址方式,操作数可以跟随在指令操作码之后,称为立即数;操作数也可以存放在CPU内部的寄存器中,称为寄存器操作数。绝大多数的操作数存放在内存储器中,称为存储器操作数。指令指定操作数的位置,即给出地址信息,在执行时需要根据这个地址信息找到需要的操作数。,3.2.1 寻址、寻址方式的概念,寻址就是寻找操作数的地址。,寻址方式就是寻找操作数的方法。,6,指令助记符体现该指令的功能,它对应一条二进制编码的机器指令。 指令的操作数个数由该指令确定,可以没有操作数,也可以有一个、二个或三个操作数。,3.2.2 80X86的指令格式,指令助记符 操作数1 , 操作数2 , 操作数3 ;注释,7,3.2.3 与数据有关的寻址方式,以 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 ,8,1) 立即寻址方式,图形表示:,定义:操作数作为指令的一部分而直接写在指令中,这种操作数称为立即数,这种寻址方式也就称为立即数寻址方式。,汇编格式:n(n为立即操作数,是用8位或16位二进制补码表示的有符号数),功能:操作数存放在存储器,指令下一单元的内容为立即操作数n。,9,【例3.1】 MOV AX, 4576H 执行后(AX)=?,OP,76H,45H,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和段寄存器等;,注:由于指令所需的操作数已存储在寄存器中,或操作的结果存入寄存器,这样,在指令执行过程中,会减少读/写存储器单元的次数,所以,使用寄存器寻址方式的指令具有较快的执行速度。通常情况下,提倡在编写汇编语言程序时,应尽可能地使用寄存器寻址方式,但也不要把它绝对化。,12,【例3.2】下列程序执行后,(AX)=?,(BX)=? MOV AX,1234H MOV BX,5678H ADD AX,BX,执行:1234HAX,执行后:(AX)=68ACH,(BX)=5678H,5678HBX,(AX)+(BX)AX,13,3) 直接寻址方式,定义:指令所要的操作数存放在内存中,在指令中直接给出该操作数的有效地址,这种寻址方式为直接寻址方式。,汇编格式:含有变量的地址表达式。,功能:指令下一字单元的内容是操作数的偏移地址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,注意:立即寻址方式和直接寻址方式的书写格式不同,直接寻址的地址要写在括号“”,“”内。在程序中,直接地址通常用内存变量名来表示,如: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。问执行指令后,BX的值是什么?,解:寄存器DI的值不是操作数,而是操作数的地址。该操作数的物理地址应由DS和DI的值形成,即: PA=(DS)*16+DI=1000H*16+2345H=12345H。,该指令的执行效果是: 把从物理地址为12345H开始的一个字的值传送给BX。,43,54,19,在不使用段超越前缀的情况下,有下列规定: 若有效地址用SI、DI和BX等之一来指定,则其缺省的段寄存器为DS; 若有效地址用BP来指定,则其缺省的段寄存器为SS(即:堆栈段)。 该寻址方式物理地址的计算方法如下: BX 物理地址PA=16×DS + SI DI 或 物理地址PA=16×SS+ BP,20,作业 教材P107 3.1 3.2 3.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,问该指令执行后,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)=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是操作数的偏移地址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。该规定为系统默认状态。当要否定默认状态,到非约定段寻找操作数时,必须用跨段前缀指明操作数的段寄存器名。 汇编格式:段寄存器名:操作数地址。 功能:冒号“:”之前的段寄存器名指明操作数所在的段。 【例3.8】 MOV AX,DS:BP MOV CX,SS:SI 该例中,DS:,SS:均为跨段前缀,此时默认状态无效,操作数的物理地址PA由段寄存器内容左移4位加偏移EA形成。上述2条指令的源操作数物理地址分别为: PA1 =(DS)左移4位+BP PA2 =(SS)左移4位+ SI,29,3.1.2 与转移地址有关的寻址方式,用来确定转移指令及转子(call)指令的转向地址。转移地址是由各种寻址方式得到的有效地址和段地址相加而成的,有效地址存入IP寄存器中,段地址指定为CS段寄存器内容。 段内寻址 段内直接寻址 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 PTR 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)=2450H JMP BX ; (IP)=1256H JMP WORD PTR TABLEBX ; (IP)=3280H JMP 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,存储单元的地址可用存储器寻址方式得到。,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 程序占有的空间和执行时间,40,3. 80x86的指令系统,80X86指令系统分为以下6组: 数据传送指令 串处理指令 算术指令 控制转移指令 逻辑指令 处理机控制与杂项操作指令 在学习汇编指令时,指令的功能是我们学习和掌握的重点,但要准确、有效地运用这些指令,我们还要熟悉系统对每条指令的一些规定或约束。因此,对指令要掌握以下几个方面内容: 指令操作数的寻址方式; 指令对标志位的影响、标志位对指令的影响; 指令的执行时间,对可完成同样功能的指令,要选用执行时间短的指令 。,41,3. 数据传送指令,数据传送指令负责把数据、地址或立即数传送到寄存器、存储器或端口号寄存器。它相对于高级语言里的赋值语句。 通用数据传送:MOV 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位。 功 能:指令的功能是把源操作数(第二操作数)的值传给目的操作数(第一操作数)。指令执行后,目的操作数的值被改变,而源操作数的值不变。在存储单元是该指令的一个操作数时,该操作数的寻址方式可以是任意一种存储单元寻址方式。,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等; (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进栈指令,指令格式: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,注意:该指令的作用是从端口中读入一个字节或字,并保存在寄存器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输出指令,输出指令用来把累加器的内容送往指定的外设存储器,它有几种形式: 长格式: 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 20H,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)=0040H MOV AL,3 XLAT 指令执行后 (AL)=33H,把BX的值作为内存字节数组首地址、下标为AL的数组元素的值传送给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,10H LES DI,BX,MOV BX,TABLE ; (BX)=0040H MOV BX,OFFSET TABLE ; (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,类型转换指令指令,CBW AL AX 执行操作: 若(AL)的最高有效位为0,则(AH)= 00H 若(AL)的最高有效位为1,则(AH)= FFH CWD AX (DX,AX) 执行操作:若(AX)的最高有效位为0,则(DX)= 0000H 若(AX)的最高有效位为1,则(DX)= FFFFH 例: (AX)= 0BA45H CBW ; (AX)=0045H CWD ; (DX)=0FFFFH (AX)=0BA45H,60,3. 算术指令,算术运算指令是反映CPU计算能力的一组指令,也是编程时常使用的一组指令。它包括:加、减、乘、除及其相关的辅助指令。 该组指令的操作数可以是8位、16位。当存储单元是该类指令的操作数时,该操作数的寻址方式可以是任意一种存储单元寻址方式。 加法指令 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指令: 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,进位标志CF(Carry Flag),当运算结果的最高有效位有进位(加法)或借位(减法)时,进位标志置1,即CF = 1;否则CF = 0。 例如: 3AH + 7CHB6H,没有进位:CF = 0 AAH + 7CH(1)26H,有进位:CF = 1,64,零标志ZF(Zero Flag),若运算结果为0,则ZF = 1,否则ZF = 0。 例如: 3AH + 7CHB6H,结果不是零:ZF = 0 86H + 7CH(1)00H,结果是零:ZF = 1 注意:ZF为1表示的结果是0。,65,符号标志SF(Sign Flag),运算结果最高位为1,则SF = 1;否则SF = 0。 例如: 3AH + 7CHB6H,最高位D71:SF = 1 86H + 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。 例如: 3AH + 7CHB6H,D3有进位:AF = 1 注意:这个标志主要由处理器内部使用,用于十进制算术运算指令中,用户一般不必关心。,68,溢出标志OF(Overflow Flag),若算术运算的结果有溢出,则OF=1;否则 OF0。 例如: 3AH + 7CHB6H,产生溢出:OF = 1 AAH + 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 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 + 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 位表示带符号数相加的溢出。,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=1 ADC DX,BX ;(DX)=0008H,CF=0,71,2.减法指令,减法指令: SUB 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 两个操作数符号相反,而结果的符号与减数相同 0 否则,OF=,73,2.减法指令,求补指令: NEG OPR 功能:将目的操作数的每一位求反(包括符号位)后加1,结果送目的地址。 执行操作:(OPR) - (OPR) 比较指令: CMP OPR1, OPR2 功能:目的操作数减源操作数,结果只影响标志位,不送入目的地址。 执行操作:(OPR1) - (OPR2) 注意: 除DEC指令不影响 CF标志外,均对条件标志位有影响。,74,【例1】求补运算。 MOV DX,6780H NEG DX ;(DX)=9880H 【例2】比较AL的内容数值大小。 CMP AL,50 ;(AL)- 50 JB Bellow ;(AL)=50,( AL)50AL INC AH ;(AH)+1AH Bellow: ,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指令若乘积的高一半(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=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, C SUB AX, 120D ;书写指令“ADD AX, -120D”也可以 CWD MOV CX, DX MOV BX, AX ;(CX, BX)(DX, AX),调度寄存器,为作乘法准备必要的寄存器 MOV AX, A IMUL B ;(DX, AX)A*B ADD AX, BX ;计算32位二进制之和,为作除法作准备 ADC DX, CX IDIV 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,例: 无符号除法: 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,或者在字节除时商超过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 + 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或辅助进位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,减法的十进制调整指令D

    注意事项

    本文(第3章80 x86指令系统和寻址方式.ppt)为本站会员(本田雅阁)主动上传,三一文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    经营许可证编号:宁ICP备18001539号-1

    三一文库
    收起
    展开