欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    数据传送与算术运算指令.ppt

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

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

    数据传送与算术运算指令.ppt

    第二章、指令系统,全面而准确地理解每条指令的功能和应用,是编写汇编语言程序的关键,逐个展开指令,高级程序到机器指令的转换,汇编语言指令格式,由4部分组成:标号:指令助记符 目的操作数,源操作数;注释,标号表示该指令在主存中的逻辑地址,每个指令助记符就代表一种指令,目的和源操作数表示参与操作的对象,注释是对该指令或程序段功能的说明,指令操作数的表达(1),r8任意一个8位通用寄存器AH AL BH BL CH CL DH DLr16任意一个16位通用寄存器AX BX CX DX SI DI BP SPreg代表r8或r16seg段寄存器 CS/DS/ES/SS,指令操作数的表达(2),m8一个8位存储器操作数单元(所有主存寻址方式)m16一个16位存储器操作数单元(所有主存寻址方式)mem代表m8或m16,指令操作数的表达(3),i8一个8位立即数i16一个16位立即数imm代表i8或i16dest目的操作数src源操作数,8086指令系统概述,Intel 8086指令系统共有133条基本指令,可分成6个功能组 数据传送类指令 算术运算类指令 位操作类指令 串操作类指令 控制转移类指令 处理机控制类指令,学习指令的注意事项,指令的功能该指令能够实现何种操作。通常指令助记符就是指令功能的英文单词或其缩写形式指令支持的寻址方式该指令中的操作数可以采用何种寻址方式指令对标志的影响该指令执行后是否对各个标志位有影响,以及如何影响其他方面该指令其他需要特别注意的地方,如指令执行时的约定设置、必须预置的参数、隐含使用的寄存器等,一、数据传送类指令,数据传送是计算机中最基本、最重要的一种操作传送指令也是最常使用的一类指令传送指令把数据从一个位置传送到另一个位置除标志寄存器传送指令外,均不影响标志位指令如下(14条):MOV XCHG XLAT PUSH POP LEAPUSHF POPF LDS LES IN OUTSAHF LAHF,1.通用数据传送指令,提供方便灵活的通用传送操作有3条指令MOVXCHGXLAT,MOV,XCHG,XLAT,MOV dest,src;dest src B/W,传送指令MOV(move),把一个字节或字的操作数从源地址传送至目的地址,MOV reg/mem,imm;立即数送寄存器或主存,MOV,例题1.1,MOV reg/mem/seg,reg;寄存器送(段)寄存器或主存,例题1.2,MOV reg/seg,mem;主存送(段)寄存器,例题1.3,MOV reg/mem,seg;段寄存器送寄存器或主存,例题1.4,例1.1:立即数传送,mov al,4;al4,字节传送mov cx,0ffh;cx00ffh,字传送mov si,200h;si0200h,字传送mov byte ptr si,0ah;byte ptr 说明是字节操作mov word ptr si+2,0bh;word ptr 说明是字操作,注意立即数是字节量还是字量 明确指令是字节操作还是字操作,MOV,例1.2:寄存器传送,mov ax,bx;axbx,字传送mov ah,al;ahal,字节传送mov ds,ax;dsax,字传送mov si,al;sial,字节传送,MOV,例1.3:存储器传送,mov al,bxmov dx,bp;dxss:bpmov es,si;esds:si,不存在存储器向存储器的传送指令,MOV,例1.4:段寄存器传送,mov si,dsmov ax,es;axes,对段寄存器的操作有一些限制,MOV,mov ds,ax;dsaxes,MOV指令传送功能,说 明:源操作数和目的操作数不允许同时为存储器 两个操作数之间类型要一致 操作数类型不能出现二意性,立即数送给存储器时一定 要指明数据类型(用强制类型说明ptr)CS不能做目的操作数 立即数不能直接送段寄存器,非法传送情况,两个操作数的类型不一致例如源操作数是字节,而目的操作数是字;或相反两个操作数不能都是存储器传送指令很灵活,但主存之间的直接传送却不允许段寄存器的操作有一些限制段寄存器属专用寄存器,对他们的操作能力有限,示例,示例,示例,两个操作数的类型要一致,绝大多数双操作数指令,除非特别说明,目的操作数与源操作数必须类型一致,否则为非法指令MOV AL,050AH;非法指令:050Ah为字,而AL为字节寄存器有明确的字节或字类型,有寄存器参与的指令其操作数类型就是寄存器的类型对于存储器单元与立即数同时作为操作数的情况,必须显式指明;byte ptr指示字节类型,word ptr指示字类型,两个操作数不能都是存储器,8086指令系统不允许两个操作数都是存储单元(除串操作指令),要实现这种传送,可通过寄存器间接实现mov ax,buffer1;axbuffer1(将buffer1内容送ax)mov buffer2,ax;buffer2ax;这里buffer1和buffer2是两个字变量;实际表示直接寻址方式,注意对段寄存器的操作,不允许立即数传送给段寄存器MOV DS,100H;非法指令:立即数不能传送段寄存器不允许直接改变CS值MOV CS,SI;不允许使用的指令不允许段寄存器之间的直接数据传送MOV DS,ES;非法指令:不允许段寄存器间传送,例:判断正误,并指出错误,MOV AX,BL MOV CS,AX MOV SI,BX MOV AH,2589H MOV ES,DS MOV DS,3542H MOV 5,AH MOV BX,12H,源操作数与目的操作数不匹配,CS寄存器不能作为目的操作数,源操作数与目的操作数均为MEM单元,源操作数与目的操作数不匹配,段寄存器之间不能直接传送信息,不能直接将立即数送入段寄存器,立即数不能作为目的操作数,操作数类型不确定,交换指令XCHG(exchange),把两个地方的数据进行互换,寄存器与寄存器之间对换数据寄存器与存储器之间对换数据不能在存储器与存储器之间对换数据,XCHG,XCHG reg,reg/mem;reg reg/mem,例题1.7,例题1.6,或:XCHG reg/mem,reg,例1.6:寄存器间交换,mov ax,1234h;ax=1234hmov bx,5678h;bx=5678hxchg ax,bx;ax=5678h,bx=1234hxchg ah,al;ax=7856h,XCHG,例1.7:寄存器与存储器交换,xchg ax,2000h;字交换;xchg 2000h,axxchg al,2000h;字节交换;xchg 2000h,al,XCHG,换码指令执行前:在主存建立一个字节量表格,内含要转换成的目的代码表格首地址存放于BX,AL存放相对表格首地址的位移量换码指令执行后:将AL寄存器的内容转换为目标代码,换码指令XLAT(translate),将BX指定的缓冲区中、AL指定的位移处的一个字节数据取出赋给AL,XLAT,XLAT;alds:bx+al,例题1.8,例1.8:代码转换,mov bx,100hmov al,03hxlat,换码指令没有显式的操作数,但使用了BX和AL;因为换码指令使用了隐含寻址方式采用默认操作数,XLAT,2、堆栈操作指令,堆栈是一个“后进先出FILO”(或说“先进后出FILO”)的主存区域,位于堆栈段中;SS段寄存器记录其段地址堆栈只有一个出口,即当前栈顶;用堆栈指针寄存器SP指定栈顶是地址较小的一端(低端),栈底不变,堆栈和队列,堆栈:按照后进先出(LIFO)的原则组织的存储器空间(栈)队列:按照先进先出(FIFO)的原则组织的存储器空间,堆栈的操作,堆栈只有两种基本操作:进栈和出栈,对应两条指令PUSH和POP,PUSH src;W 进栈指令先使堆栈指针SP减2,然后把一个字操作数存入堆栈顶部,POP dest;W 出栈指令把栈顶的一个字传送至指定的目的操作数,然后堆栈指针SP加2,堆栈的特点,堆栈操作的单位是字,进栈和出栈只对字量字量数据从栈顶压入和弹出时,都是低地址字节送低字节,高地址字节送高字节堆栈操作遵循先进后出原则,但可用存储器寻址方式随机存取堆栈中的数据堆栈常用来临时存放数据传递参数保存和恢复寄存器,例1.9:现场保护恢复,push ax;进入子程序后push bxpush ds.pop ds;返回主程序前pop bxpop ax,例1.10:push ax 其中:ax=2107h,高(栈底),(AX)=?,pop ax,例 mov ax,1000h mov bx,2000h mov cx,3000h push ax push bx push cx pop bx pop ax pop cx,例1.11:进栈与出栈,例1.12:寄存器间接寻址堆栈,例:mov ax,1000h mov bx,2000h mov cx,3000h push ax push bx push cx;mov bp,sp mov word ptr 2bp,1122h mov word ptr 4bp,3344h;pop cx pop bx pop ax;mov ax,1000h push ax;,3.标志寄存器传送指令,标志寄存器传送指令用来传送标志寄存器FLAGS的内容,方便进行对各个标志位的直接操作有2对4条指令低8位传送:LAHF和SAHF16位传送:PUSHF和POPF,标志低字节进出AH指令,LAHF;AHFLAGS的低字节LAHF指令将标志寄存器的低字节送寄存器AHSF/ZF/AF/PF/CF状态标志位分别送入AH的第7/6/4/2/0位,而AH的第5/3/1位任意,SAHF;FLAGS的低字节AHSAHF将AH寄存器内容送FLAGS的低字节用AH的第7/6/4/2/0位相应设置SF/ZF/AF/PF/CF标志,标志寄存器进出堆栈指令,PUSHF;SPSP2;SS:SPFLAGSPUSHF指令将标志寄存器的内容压入堆栈,同时栈顶指针SP减2,POPF;FLAGSSS:SP;SPSP2POPF指令将栈顶字单元内容送标志寄存器,同时栈顶指针SP加2,例题1.13,例1.13:置位单步标志,pushf;保存全部标志到堆栈pop ax;从堆栈中取出全部标志or ax,0100h;设置D8=TF=1,;ax其他位不变push ax;将ax压入堆栈popf;FLAGSAX;将堆栈内容取到标志寄存器,CLC STC CMC CLD STD CLI STI,4.地址传送指令,地址传送指令将存储器单元的逻辑地址送至指定的寄存器有效地址传送指令 LEA指针传送指令 LDS和LES注意不是获取存储器单元的内容,有效地址传送指令LEA(load EA),将存储器操作数的有效地址传送至指定的16位寄存器中,例题1.14,LEA r16,mem;r16mem的有效地址EA,LEA,例1.14:获取有效地址,mov bx,0400hmov si,3chlea bx,bx+si+0f62h;BX0400h003ch0f62h139EH,获得主存单元的有效地址;不是物理地址,也不是该单元的内容,LEA,例1.15:获取有效地址,LEA BX,BX+SI+0F62H 执行前:(BX)=400H,(SI)=3CH 执行后:(BX)=(400+3C+0F62)=139EH,例:,A DW“1,2,3,4”LEA BX,A 等效为:(MOV BX,OFFSET A),取操作数的偏移地址,指针传送指令,LDS r16,mem;r16mem,;DSmem+2LDS指令将主存中mem指定的字送至r16,并将mem的下一字送DS寄存器,LES r16,mem;r16mem,;ESmem+2LES指令将主存中mem指定的字送至r16,并将mem的下一字送ES寄存器,例题1.16,注:将mem中的数作为指针,例1.16:地址指针传送,mov word ptr 3060h,0100hmov word ptr 3062h,1450hles di,3060h;es=1450h,di=0100hlds si,3060h;ds=1450h,si=0100h,mem指定主存的连续4个字节作为逻辑地址(32位的地址指针),送入DS:r16或ES:r16,例1.17:地址指针传送,(SI)=1000H(DS)=2000H(DI)=3000H(ES)=4000H,已知右图:1)LDS SI,7000H 2)LES DI,7000H+4 执行后:,例1.18:LEA指令,LEA BX,VE MOV AX,BX MOV CX,2BX PUSH AX PUSH CX POP AX POP CX如图,问两次AX、CX改变 的值分别是多少?,(AX),(CX),(AX)=3020H(CX)=2010H(AX)=2010H(CX)=3020H,5.输入输出指令,8086/8088通过输入输出指令与外设进行数据交换;呈现给程序员的外设是端口(Port)即I/O地址8086/8088用于寻址外设端口的地址线为16条,端口最多为21665536(64K)个,端口号为0000H0FFFFH每个端口用于传送一个字节或字的外设数据,输入输出寻址方式,8086/8088的端口有64K个,无需分段,设计有两种寻址方式直接寻址:只用于寻址00H0FFH前256个端口,操作数i8表示端口号间接寻址:可用于寻址全部64K个端口,DX寄存器的值就是端口号对大于0FFH的端口只能采用间接寻址方式,输入指令IN,将外设数据传送给CPU内的AL/AX,IN AL,i8;字节输入:ALI/O端口(i8直接寻址)IN AL,DX;字节输入:ALI/O端口(DX间接寻址)IN AX,i8;字输入:AXI/O端口(i8直接寻址)IN AX,DX;字输入:AXI/O端口(DX间接寻址),IN,例题1.19,演示,例1.19:输入字量,;直接寻址,字节量输入in al,21hmov ah,alin al,20h;直接寻址,字量输入in ax,20h;间接寻址,字量输入mov dx,20hin ax,dx,两段功能相同 字量数据传送实际上实现了连续的两个端口地址的字节量传送,IN,输出指令OUT,将CPU内的AL/AX数据传送给外设,OUT i8,AL;字节输出:I/O端口AL(i8直接寻址)OUT DX,AL;字节输出:I/O端口AL(DX间接寻址)OUT i8,AX;字输出:I/O端口AX(i8直接寻址)OUT DX,AX;字输出:I/O端口AX(DX间接寻址),OUT,例题1.20,演示,例1.20:输出字节量,;间接寻址,字节量输出mov dx,3fchmov al,80hout dx,al,OUT,传送类指令小结,1、通用数据传送指令MOVXCHGXLAT2、堆栈操作指令PUSHPOP3、标志寄存器传送指令LAHFSAHF PUSHFPOPF4、地址传送指令LEALDSLES5、输入输出指令INOUT,二、算术运算类指令,四则运算是计算机经常进行的一种操作。算术运算指令实现二进制(和十进制)数据的四则运算请注意算术运算类指令对标志的影响指令共有20条,加法指令ADD,ADD指令将源与目的操作数相加,结果送到目的操作数ADD指令按定义设置相应状态标志位,ADD,ADD reg,imm/reg/mem;B/W regregimm/reg/memADD mem,imm/reg;B/W memmemimm/reg,例2.1:加法运算,mov al,0fbh;al=0fbhadd al,07h;al=02hmov word ptr 200h,4652h;200h=4652hmov bx,1feh;bx=1fehadd al,bl;al=00hadd word ptr bx+2,0f0f0h;200h=3742h,ADD,带进位加法指令ADC,ADC指令将源与目的操作数相加,再加上进位CF标志,结果送到目的操作数ADC指令按定义设置相应状态标志位ADC指令主要与ADD配合,实现多精度加法运算,ADC,ADC reg,imm/reg/mem;regregimm/reg/memCFADC mem,imm/reg;memmemimm/regCF,例2.2:双字加法,mov ax,4652h;ax=4652hadd ax,0f0f0h;ax=3742h,CF=1mov dx,0234h;dx=0234hadc dx,0f0f0h;dx=f325h,CF=0;DX.AX0234 4652HF0F0 F0F0HF325 3742H,ADC,增量指令INC(increment),INC指令对操作数加1(增量)INC指令不影响进位CF标志,按定义设置其他状态标志位速度比ADD指令快,INC,INC reg/mem;reg/memreg/mem1,inc bxinc byte ptr bx,减法指令SUB(subtract),SUB指令将目的操作数减去源操作数,结果送到目的操作数SUB指令按定义设置相应状态标志位,SUB,SUB reg,imm/reg/mem;B/W regregimm/reg/memSUB mem,imm/reg;B/W memmemimm/reg,例2.3:减法运算,mov al,0fbh;al=0fbhsub al,07h;al=0f4h,CF0mov word ptr 200h,4652h;200h=4652hmov bx,1feh;bx=1fehsub al,bl;al=0f6hsub word ptr bx+2,0f0f0h;200h=5562h,CF1,SUB,带借位减法指令SBB,SBB指令将目的操作数减去源操作数,再减去借位CF(进位),结果送到目的操作数。SBB指令按照定义设置相应状态标志位SBB指令主要与SUB配合,实现多精度减法运算,SBB,SBB reg,imm/reg/mem;B/W regregimm/reg/memCFSBB mem,imm/reg;B/W memmemimm/regCF,例2.4:双字减法,mov ax,4652h;ax=4652hsub ax,0f0f0h;ax=5562h,CF=1mov dx,0234h;dx=0234hsbb dx,0f0f0h;dx=1143h,CF=1;DX.AX0234 4652HF0F0 F0F0H1143 5562H,SBB,减量指令DEC(decrement),DEC指令对操作数减1(减量)DEC指令不影响进位CF标志,按定义设置其他状态标志速度比SUB指令快,DEC,DEC reg/mem;reg/memreg/mem1,dec cxdec word ptr si,INC指令和DEC指令都是单操作数指令 主要用于对计数器和地址指针的调整,求补指令NEG(negative),NEG指令对操作数执行求补运算:用零减去操作数,然后结果返回操作数求补运算也可以表达成:将操作数按位取反后加1,不考虑操作数是否为符号数,即最高位也要取反加1。NEG指令对标志的影响与用零作减法的SUB指令一样,NEG,NEG reg/mem;reg/mem0reg/mem,例2.9:求补运算,mov ax,0ff64hneg al;ax=ff9ch,OF=0、SF=1、ZF=0、PF=1、CF=1sub al,9dh;ax=ffffh,OF=0、SF=1、ZF=0、PF=1、CF=1neg ax;ax=0001h,OF=0、SF=0、ZF=0、PF=0、CF=1dec al;ax=0000h,OF=0、SF=0、ZF=1、PF=1、CF=1 neg ax;ax=0000h,OF=0、SF=0、ZF=1、PF=1、CF=0,NEG,比较指令CMP(compare),CMP指令将目的操作数减去源操作数,按照定义设置相应状态标志CMP指令执行的功能与SUB指令相同,但结果不回送目的操作数,CMP reg,imm/reg/mem;regimm/reg/memCMP mem,imm/reg;memimm/reg,CMP,例2.6:比较AL与100,cmp al,100;al-100jb below?;al100,跳转到below执行sub al,100;al100,alal-100inc ah;ahah+1below:.,执行比较指令之后,可以根据标志判断两个数是否相等、大小关系等,CMP,例:求w x+y+24 z,MOV AX,X;MOV DX,X+2;ADD AX,Y;ADC DX,Y+2;ADD AX,24;ADC DX,0;,x y z w 双字无符号数,SUB AX,Z;SBB DX,Z+2;MOV W,AX;MOV W+2,DX;,例:分析程序结果,例:MOV BX,160H LEA DI,ADDR ADD BX,DI MOV 2DI,BX MOV AX,BX SUB AX,1000H MOV ADDR,AX,(ADDR+3,ADDR+2)=1160H(ADDR+1,ADDR)=0160H,乘法指令,MUL r8/m8;无符号字节乘法;AXALr8/m8MUL r16/m16;无符号字乘法;DX.AXAXr16/m16,IMUL r8/m8;有符号字节乘法;AXALr8/m8IMUL r16/m16;有符号字乘法;DX.AXAXr16/m16,乘法示意图,AX,SRC,AX,DX,*,16(位),16(位),32(位),高位,低位,乘法指令的功能,乘法指令分无符号和有符号乘法指令乘法指令的源操作数显式给出,隐含使用另一个操作数AX和DX字节量相乘:AL与r8/m8相乘,得到16位的结果,存入AX字量相乘:AX与r16/m16相乘,得到32位的结果,其高字存入DX,低字存入AX乘法指令利用OF和CF判断乘积的高一半是否具有有效数值,乘法指令对标志的影响,乘法指令如下影响OF和CF标志:MUL指令若乘积的高一半(AH或DX)为0,则OF=CF=0;否则OF=CF=1IMUL指令若乘积的高一半是低一半的符号扩展,则OF=CF=0;否则均为1乘法指令对其他状态标志没有定义,对标志没有定义:指令执行后这些标志是任意的、不可预测(就是谁也不知道是0还是1)对标志没有影响:指令执行不改变标志状态,例2.9:乘法运算,mov al,0b4h;al=b4h=180mov bl,11h;bl=11h=17mul bl;ax=Obf4h=3060;OF=CF=1,AX高8位不为0mov al,0b4h;al=b4h=76mov bl,11h;bl=11h=17imul bl;ax=faf4h=1292;OF=CF=1,AX高8位含有效数字,除法指令,DIV r8/m8;无符号字节除法:ALAXr8/m8的商,AHAXr8/m8的余数DIV r16/m16;无符号字除法:;AXDX.AXr16/m16的商,DXDX.AXr16/m16的余数,IDIV r8/m8;有符号字节除法:ALAXr8/m8的商,AhAXr8/m8的余数IDIV r16/m16;有符号字除法:;AXDX.AXr16/m16的商,DXDX.AXr16/m16的余数,例题2.10,说明,除法指令的功能,除法指令分无符号和有符号除法指令除法指令的除数显式给出,隐含使用另一个操作数AX和DX作为被除数字节量除法:AX除以r8/m8,8位商存入AL,8位余数存入AH字量除法:DX.AX除以r16/m16,16位商存入AX,16位余数存入DX除法指令对标志没有定义除法指令会产生结果溢出,除法错中断(溢出),当被除数远大于除数时,所得的商就有可能超出它所能表达的范围。如果存放商的寄存器AL/AX不能表达,便产生溢出,8086CPU中就产生编号为0的内部中断除法错中断对DIV指令,除数为0,或者在字节除时商超过8位,或者在字除时商超过16位,则发生除法溢出对IDIV指令,除数为0,或者在字节除时商不在-128127范围内,或者在字除时商不在-3276832767范围内,则发生除法溢出,除法示意图,例:除法运算,mov ax,0400h;ax=400h=1024mov bl,0b4h;bl=b4h=180div bl;商al05h5;余数ah7ch124mov ax,0400h;ax=400h=1024mov bl,0b4h;bl=b4h=76idiv bl;商alf3h13;余数ah24h36,符号扩展指令,CBW;AL的符号扩展至AH;如AL的最高有效位是0,则AH00;AL的最高有效位为1,则AHFFH。AL不变,CWD;AX的符号扩展至DX;如AX的最高有效位是0,则DX00;AX的最高有效位为1,则DXFFFFH。AX不变,什么是符号扩展?为什么要扩展?符号扩展指令常用于获得倍长的数据,不影响标志位,符号扩展的概念,符号扩展是指用一个操作数的符号位(即最高位)形成另一个操作数,后一个操作数的各位是全0(正数)或全1(负数)。符号扩展不改变符号数大小,只使得数据长度加倍,在除法指令中用到。对于数据64H(表示数据100),其最高位D7为0,符号扩展后高8位都是0,成为0064H(仍表示数据100)对于数据ff00H(表示有符号数256),其最高位D15为1,符号扩展后高16位都是1,成为ffffff00H(仍表示有符号数256),例2.11:符号扩展,mov al,80h;al=80hcbw;ax=ff80hmov ax,255;ax=7fhcwd;dx,ax=0h,007fh,例2.12:AX/BX,cwd;DX.AXAXidiv bx;AXDX.AX/BX,利用符号扩展指令得到除法指令所需要的倍长于除数的被除数(针对符号数)对无符号数除法应该采用直接使高8位或高16位清0的方法,获得倍长的被除数,除法中的数据扩展,例:求(BL)/(CL)解:带符号数:MOV AL,BL 无符号数:MOV AL,BL CBW MOV AH,0 IDIV CL DIV CL,例:计算(V-(X*Y+Z-540)/X,MOV AX,X IMUL Y MOV CX,AX MOV BX,DX MOV AX,Z CWD;?ADD CX,AX ADC BX,DX SUB CX,540 SBB BX,0 MOV AX,V CWD SUB AX,CX SBB DX,BX IDIV X,X Y Z V 字符号数,;DX,AX=X*Y,;BX,CX=X*Y,;DX,AX=Z,;BX,CX=X*Y+Z,;BX,CX=X*Y+Z-540,;DX,AX=V,;DX,AX=Z-(),;DX,AX=余数,商,十进制调整指令,压缩BCD码就是通常的8421码;它用4个二进制位表示一个十进制位,一个字节可以表示两个十进制位,即0099,非压缩BCD码用8个二进制位表示一个十进制位,只用低4个二进制位表示一个十进制位09,高4位任意,通常默认为0,十进制数调整指令对二进制运算的结果进行十进制调整,以得到十进制的运算结果分成压缩BCD码和非压缩BCD码调整,BCD码(Binary Coded Decimal),二进制编码的十进制数:一位十进制数用4位二进制编码来表示8086/8088支持压缩BCD码和非压缩BCD码的调整运算真值864二进制编码08H40H压缩BCD码08H64H非压缩BCD码08H0604H,压缩BCD码加、减调整指令,(ADD AL,i8/r8/m8)(ADC AL,i8/r8/m8)DAA;AL将AL的加和调整为压缩BCD码,(SUB AL,i8/r8/m8)(SBB AL,i8/r8/m8)DAS;AL将AL的减差调整为压缩BCD码,使用DAA或DAS指令前,应先执行以AL为目的操作数的加法或减法指令DAA和DAS指令对OF标志无定义,按结果影响其他标志,例如CF反映压缩BCD码相加或减的进位或借位状态,例题2.14a,例题2.14b,例题2.15,例2.14a:压缩BCD加法,mov al,68h;al=68h,压缩BCD码表示真值68mov bl,28h;bl=28h,压缩BCD码表示真值28add al,bl;二进制加法:al=68h+28h=90hdaa;十进制调整:al=96h;实现压缩BCD码加法:682896,68+28,例2.14b:压缩BCD减法,mov al,68h;al=68h,压缩BCD码表示真值68mov bl,28h;bl=28h,压缩BCD码表示真值28sub al,bl;二进制减法:al=68h-28h=40hdas;十进制调整:al=40h;实现压缩BCD码加法:68-2840,68-28,例2.15:压缩BCD减法,mov ax,1234hmov bx,4612hsub al,bldas;34-1222,CF0 xchg al,ah;ah=低8位的差sbb al,bhdas;12-4666,CF=1xchg al,ah;123446126622,1234-4612,非压缩BCD码加、减调整指令,(ADD AL,i8/r8/m8)(ADC AL,i8/r8/m8)AAA;AL将AL的加和调整为非压缩BCD码;AHAH调整的进位,(SUB AL,i8/r8/m8)(SBB AL,i8/r8/m8)AAS;AL将AL的减差调整为非压缩BCD码;AHAH调整的借位,使用AAA或AAS指令前,应先执行以AL为目的操作数的加法或减法指令AAA和AAS指令在调整中产生了进位或借位,则AH要加上进位或减去借位,同时CF=AF=1,否则CF=AF=0;它们对其他标志无定义,例题2.16a,例题2.16b,例2.16a:非压缩BCD加,mov ax,0608h;ax=0608h,非压缩BCD码表示真值68mov bl,09h;bl=09h,非压缩BCD码表示真值9add al,bl;二进制加法:al=08h+09h=11haaa;十进制调整:ax=0707h;实现非压缩BCD码加法:68977,68+9,例2.16b:非压缩BCD减,mov ax,0608h;ax=0608h,非压缩BCD码表示真值68mov bl,09h;bl=09h,非压缩BCD码表示真值9sub al,bl;二进制减法:al=08h-09h=ffhaas;十进制调整:ax=0509h;实现非压缩BCD码减法:68-959,68-9,非压缩BCD码乘、除调整指令,(MUL r8/m8)AAM;AX将AX的乘积调整为非压缩BCD码,AAD;AX将AX中非压缩BCD码扩展成二进制数(DIV r8/m8),AAM指令跟在字节乘MUL之后,将乘积调整为非压缩BCD码AAD指令跟在字节除DIV之前,先将非压缩BCD码的被除数调整为二进制数AAM和AAD指令根据结果设置SF、ZF和PF,但对OF、CF和AF无定义,例题2.16c,例题2.16d,例2.16c:非压缩BCD乘,mov al,08h;al=08h,非压缩BCD码表示真值8mov bl,09h;bl=09h,非压缩BCD码表示真值9mul bl;二进制乘法:ax=08h09h=0048haam;十进制调整:ax=0702h;实现非压缩BCD码乘法:8972,8*9,例2.16d:非压缩BCD除,mov ax,0608h;ax=0608h,非压缩BCD码表示真值68mov bl,09h;bl=09h,非压缩BCD码表示真值9aad;二进制扩展:ax=680044hdiv bl;除法运算:商al=07h,余数ah=05h;实现非压缩BCD码初法:6897(余5),68/9,例2.17,设X、Y、Z、V均为16位带符号数,分别存放在X、Y、Z、V存储单元中,阅读如下程序段,得出它的运算公式,并说明运算结果存于何处?,XYZV,65F302 0024E00500,例2.17:算术运算1,mov ax,Ximul Ymov cx,axmov bx,dxmov ax,Zcwdadd cx,axadc bx,dx,sub cx,540sbb bx,0mov ax,Vcwdsub ax,cxsbb dx,bxidiv X,;DX.AXXY,;BX.CXXY,;BX.CXXYZ,;BX.CXXYZ540,;DX.AXV(XYZ540),;DX.AX(V(XYZ540)X,十进制调整小结,DAA、DAS、AAA、AAS加减运算前是BCD码,运算后调整为正确的BCD码AAM调整前是二进制,调整后是BCD只能调整AL中小于64H的数AAD做除法运算前,将AX中的非压缩BCD码调整为二进制码,再做除法,算术运算指令小结(1),1、加、减法指令8条ADD、ADC、INC、SUB、SBB、DEC、NEG、CMP2、乘、除法指令6条MUL、IMUL、DIV、IDIV、CBW、CWD3、十进制调整指令6条DAA、DAS、AAA、AAS、AAM、AAD,算术运算指令小结(2),1、熟悉8086的基本参数、堆栈工作原理、指令对标志的影响、符号扩展的含义、压缩和非压缩BCD的格式2、掌握:ADD/ADC/INC、SUB/SBB/DEC/NEG/CMP3、熟悉:MUL/IMUL、DIV/IDIV4、理解:CBW/CWD、DAA/DAS、AAA/AAS/AAM/AAD,第2章 教学要求(2),熟悉8086的基本参数、堆栈工作原理、指令对标志的影响、符号扩展的含义、压缩和非压缩BCD的格式掌握基本指令:MOVXCHGXLAT、PUSHPOP、LEA;CLCSTCSTC、CLDSTD;ADDADCINC、SUBSBBDECCMPNEG、CBWCWD,课后习题,IN AL,21H,OUT 43H,AL,

    注意事项

    本文(数据传送与算术运算指令.ppt)为本站会员(牧羊曲112)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

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




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开