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

    《算术运算指令》PPT课件.ppt

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

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

    《算术运算指令》PPT课件.ppt

    1,3.3.2 算术运算指令,涉及两种类型数据:无符号数和有符号数。对加减法指令,无符号和有符号数可采用同一套指令,但应注意:参加的操作数必须都是无符号数或都是有符号数。需使用不同的标志位(CF,OF)来检查无符号数和有符号数的运算结果是否溢出。这类指令一般都影响标志寄存器FLAGS。,2,表4-2 算术运算类指令表,3,两个8位数相加时有4种情况:,无符号数和有符号数均不溢出二进制相加 无符号数加 有符号数加 0000 1000 8+8+0001 1110+30+(+30)0010 0110 38+38 结果38 CF=0 OF=0,无符号数范围0255 带符号数范围-128127,4,无符号数溢出 无符号数 有符号数 0000 1000 8+8+1111 1101+253+(-3)10000 0101 261+5 结果5 CF=1 OF=0 有符号数溢出 0000 1000 8+8+0111 1101+125+(+125)1000 0101 133+133结果-123 CF=0 OF=1(补码表示),5,无符号数和有符号数均溢出 无符号数 有符号数 1000 1000 136-120+1111 0111+247+(-9)10111 1111 383-129 结果127 CF=1 OF=1 上面四种情况说明,CF标志可用来表示无符号数的溢出,OF标志可用来表示有符号数的溢出。有符号数的溢出是一种出错状态,在运算过程中应当避免。,6,所有的算术运算指令,都会影响FLAGS标志寄存器的6个状态标志CF/OF/ZF/SF/AF/PF(3个控制标志IF/DF/TF不受影响)。总的讲,有这样一些规则:当无符号数运算产生溢出(即最高位向前有进位 或借位)时,CF=1,否则为0;当有符号数运算产生溢出时,OF=1(即OF=CFCF-1),否则为0;当运算结果为0时,ZF=1,否则为0;当运算结果为负数时,SF=1,否则为0;当运算一半位置有进位或借位时,AF=1,否则为0;当运算结果中有偶数个时,PF=1,否则为0。,7,共有5条:(1)不带进位的加法指令ADD 格式:ADD acc,data ADD mem/reg,data ADD mem/reg1,mem/reg2注:1.源和目的操作数不能同时为存储器操作数 2.不能把段寄存器作为操作数例:ADDAL,30H ADDAX,BX+20H ADDCX,SI ADDDI,200HADD指令对标志位(指6个状态标志)都有影响。,1.加法指令,8,(2)带进位位的加法指令ADC,ADC指令在形式上和功能上都有与ADD类似,只是相加时还要包括进位标志CF的内容。例如:ADC AL,68H;AL(AL)+68H+(CF)ADC AX,CX;AX(AX)+(CX)+(CF)ADC BX,DI;BX(BX)+DI+1DI+(CF),9,例:有两个4字节的无符号数相加:2C 56 F8 AC+30 9E 47 BE=?设被加数、加数分别存放在BUFFER1及BUFFER2开始的两个存储区内,结果放回BUFFER1存储区,如下页图所示。因CPU只能进行8位或16位的加法运算,为此可将加法分4次进行。,ADC指令主要用于多字节加法运算中,10,56H,2CH,BEH,47H,BUFFER1,BUFFER2,ACH,F8H,9EH,30H,被加数,加数,数据段,多字节加法示意图,.,.,11,程序段如下:MOV CX,4;置循环次数 MOV SI,0;置SI初值为零 CLC;清进位标志CFLL:MOV AL,BUFFER2SI ADC BUFFER1SI,AL;带进位加 INC SI;(SI)+1 DEC CX;(CX)-1 JNZ LL;若(CX)0,则转LL思考:若最高位有进位,如何改?,12,ADD/ADC指令对条件标志位(CF/OF/ZF/SF)的影响:,CF位表示无符号数相加的溢出。OF位表示带符号数相加的溢出。,13,格式:INC reg/mem功能:类似于C语言中的+操作:对指定的操作数加1 例:INC AL INC SI INC BYTE PTRBX+4注意:本指令不影响CF标志,但对AF/OF/PF/SF/ZF会产生影响。,3)加1指令INC(单操作数指令),14,(1)不考虑借位的减法指令SUB 格式:SUB dest,src 操作:dest(dest)-(src)注:1.源和目的操作数不能同时为存储器操作数 2.不能把段寄存器作为操作数指令例子:SUB AL,60H SUB BX+20H,DX SUB AX,CX,2.减法指令,15,SBB指令主要用于多字节的减法。格式:SBB dest,src操作:dest(dest)-(src)-(CF)指令例子:SBB AX,CX SBB WORD PTRSI,2080H SBB SI,DX,(2)考虑借位的减法指令SBB,16,例:x、y、z均为32位数,分别存放在地址为X,X+2;Y,Y+2;Z,Z+2的存储单元中,用指令序列实现wx+y+24-z,结果放在W,W+2单元中。MOV AX,X MOV DX,X+2 ADD AX,Y ADC DX,Y+2;x+y ADD AX,24 ADC DX,0;x+y+24 SUB AX,Z SBB DX,Z+2;x+y+24-z MOV W,AX MOV W+2,DX;结果存入W,W+2单元,17,作用类似于C语言中的”操作符。格式:DEC opr 操作:opr(opr)-1指令例子:DEC CL DEC BYTE PTRDI+2 DEC SI,(3)减1指令DEC,注:该指令与INC一样,它不影响CF标志,但对AF/OF/PF/SF/ZF会产生影响。,18,格式:NEG opr操作:opr 0-(opr)对一个操作数取补码相当于用0减去此操作数,故利用NEG指令可得到负数的绝对值。例:若(AL)=0FCH,则执行 NEG AL后,(AL)=04H,CF=1 本例中,0FCH为-4的补码,执行求补指令后,即得到4(-4的绝对值)。,(4)求补指令NEG,19,SUB/SBB指令对标志位(CF/OF/ZF/SF)的影响:,CF=1表示无符号数减法溢出。OF=1表示带符号数减法溢出。NEG指令对CF/OF的影响:CF:操作数为0时,求补的结果使CF=0,否则CF=1。OF:字节运算对-128求补或字运算对-32768求补时OF=1,否则OF=0。,20,格式:CMP dest,src操作:dest(dest)-(src)(而 SUB dest,src;dest(dest)-(src))CMP也是执行两个操作数相减,但结果不送目标操作数,其结果只反映在标志位上。指令例子:CMP AL,0AH CMP CX,SI CMP DI,BX+03,(5)比较指令CMP,21,根据标志位来判断比较的结果,1)根据ZF判断两个数是否相等。若ZF=1,则两数相等。2)若ZF=0,则两个数不相等,则分两种情况考虑:比较的是两个无符号数 若CF=0,则destsrc;若CF=1,则destsrc。比较的是两个有符号数 若OFSF=0,则destsrc;若OFSF=1,则destsrc。,22,比较指令在使用时,一般在其后紧跟一条条件转移指令,判断比较结果的转向。举例:比较AL、BL、CL中带符号数的大小,将 最小数放在AL中。程序:CMP AL,BL;AL和BL比较 JNG BBB;若ALBL,则转 XCHG AL,BL;若ALBL,则交换 BBB:CMP AL,CL;AL和CL比较 JNG CCC;若ALCL,则转 XCHG AL,CL;若ALCL,则交换 CCC:HLT,思考:程序的结果?(AL、BL、CL中数据的大小顺序),23,进行乘法时:8位 8位 16位乘积(即 AL mem8/reg8 AX)16位 16位 32位乘积(即 AX mem16/reg16 DX AX)(1)无符号数的乘法指令MUL mem/reg格式:MUL src操作:字节操作数(AX)(AL)(src)字操作数(DX,AX)(AX)(src)指令例子:MUL BL;(AL)(BL),乘积在AX中 MUL CX;(AX)(CX),乘积在DX,AX中 MUL BYTE PTRBX,3.乘法指令,24,格式与MUL指令类似,只是要求两操作数均为有符号数。指令例子:IMUL BL;(AX)(AL)(BL)IMUL WORD PTRSI;(DX,AX)(AX)(SI+1SI),(2)有符号数乘法指令IMUL,注意:MUL/IMUL指令中 AL(AX)为隐含的乘数寄存器;AX(DX,AX)为隐含的乘积寄存器;SRC不能为立即数;除CF和OF外,对其它标志位无定义。,25,MUL/IMUL乘法指令对CF/OF的影响:,例:(AL)=A5H(-5B),(BL)=11H(1)IMUL BL;(AX)(AL)(BL);A511-5B11=-060B F9F5;(AX)=F9F5H CF=OF=1(2)MUL BL;(AX)(AL)(BL);A511=0AF5;(AX)=0AF5H CF=OF=1,26,4.除法指令,进行除法时:16位/8位 8位商及8位余数 32位/16位 16位商及16位余数对被除数、商及余数存放有如下规定:被除数 商 余数字节除法 AX AL AH 字除法 DX:AX AX DX,27,格式:DIV src操作:字节操作(AL)(AX)/(src)的商(AH)(AX)/(src)的余数 字操作(AX)(DX,AX)/(src)的商(DX)(DX,AX)/(src)的余数指令例子:DIV CL DIV WORD PTRBX注:若除数为零或AL中商大于FFH(或AX中商大于FFFFH),则CPU产生一个类型0的内部中断。,(1)无符号数除法指令DIV,28,(2)有符号数除法指令IDIV,格式:IDIV src 操作与DIV类似。商及余数均为有符号数,且余数符号总是与被除数符号相同。CBW与CWD两指令主要用于被除数扩展注意:对于DIV/IDIV指令 AX(DX,AX)为隐含的被除数寄存器。AL(AX)为隐含的商寄存器。AH(DX)为隐含的余数寄存器。src不能为立即数。对所有FLAGS的状态标志位均无定义。,29,运算要求被除数字长是除数字长的两倍,若不满足则需对被除数进行扩展,否则产生错误。8位16位 16位32位 ALAX(AH AL)AXDX AX 对无符号数除法扩展,只需将AH或DX清零即可。对有符号数而言,则是符号位的扩展。可使用符号扩展指令CBW和CWD,关于除法操作中的字长扩展问题,30,例:写出两带符号数34H25H的程序段。,MOV AL,34H MOV BL,25H CBW;AL的符号扩展到AH IDIV BL;0034H25H,结果为;(AH)=0FH,(AL)=01H,31,*5.BCD码运算的十进制调整指令,专用于对BCD码运算的结果进行调整 包括:AAA、DAA、AAS、DAS、AAM、AAD 均为隐含寻址,隐含的操作数为AL和AH 为何要对BCD码的运算结果进行调整?BCD码本质上是十进制数,即应遵循逢十进一的规则。而计算机是按二进制(十六进制)进行运算,并未按十进制规则进行运算。,32,1)加法的十进制调整指令,(1)非压缩BCD码加法调整AAA 本指令对在AL中的由两个未组合的BCD码相加后的结果进行调正,得到一个正确的未组合的BCD码。注意:AAA指令只影响AF和CF,其余标志无定义。AAA指令应紧跟在ADD或ADC指令之后。,33,如果AL的低4位9AF=1,则:AL(AL)+6,(AH)(AH)+1,AF1 AL(AL)0FH)CFAF否则AL(AL)0FH,AAA指令的操作如下:,34,调整原理:先看一个例子 计算89 0000 1000+0000 1001 0001 0001 11 而计算机相加为11,原因在于运算过程中,如遇到低4位往高4位产生进位时(此时AF=1)是按逢十六进一的规则,但BCD码要求逢十进一,因此只要产生进位,个位就会少6,这就要进行加6调正。,这个1代表了16,而实际上仅应为10,即多进了6。,35,实际上当低4位的结果9(即AF之间)时,也应进行加6调正(原因是逢十没有进位,故用加6的方法强行产生进位)。如对上例的结果进行加6:0001 0001 11+0000 0110 6 0001 0111(压缩式)17 0000 1111-0000 0001 0000 0111(非压缩式),调整方法:如果AL的低4位9AF=1,则:AL(AL)+6,(AH)(AH)+1,AF1 AL(AL)0FH)CFAF否则AL(AL)0FH,36,例2:有两个字符串形式的十进制数,2658和 3619,求二者之和。即2658+3619=?由题意知,被加数和加数的每一位都以ASCII码(与非压缩BCD码区别)形式存放在内存中。假定二数在内存中均是低位在前,高位在后,另留出5个单元存放相加的结果。内存中数据存放形式见下页图。,37,36H,32H,39H,31H,STRING1,STRING2,38H,35H,36H,33H,被加数,加数,数据段,8,5,6,2,9,1,6,3,SUM,结果,.,.,非压缩BCD码3改为0,SI,DI,BX,CX,CX,CX,38,程序段为:LEA SI,STRING1;STRING1偏移地址送SI LEA DI,STRING2;STRING2偏移地址送DI LEA BX,SUM;SUM偏移地址送BX MOV CX,4;循环4次 CLC;清进位标志AGAIN:MOV AL,SI ADC AL,DI;带进位加 AAA;未压缩BCD码调正 MOV BX,AL;结果存入SUM INC SI;调整指针 INC DI INC BX DEC CX;循环计数器减1 JNZ AGAIN;若未处理完,则转AGAIN,39,思考题:(1)根据程序写出结果SUM的值。(2)若最高位有进位,程序如何修改?(3)从此例不难看出,用AAA指令也可对字符串形式的十进制数加法进行调整,所以它又被称为加法的ASCII调正指令。为什么AAA指令既可对非压缩BCD码加法进行调整,也可对ASCII码形式的十进制数进行调整?(注意AAA指令的第步),40,(2)压缩BCD码加法调整DAA,两个压缩BCD码相加结果在AL中,通过DAA调整得到一个正确的压缩BCD码.指令操作(调整方法):若AL的低4位9AF=1 则(AL)(AL)+6,AF1 若AL的高4位9CF=1 则(AL)(AL)+60H,CF1 DAA指令影响除OF外所有其它标志。DAA指令应紧跟在ADD或ADC指令之后。,41,例:48H+74H=?0100 1000 48 MOV AL,48H+0111 0100 74 MOV BL,74H 1011 1100 BC ADD AL,BL+0110 0110 66 DAA 1 0010 0010 1 22(进位)(进位)执行ADD后,(AL)=BCH,高4位低4位均大于9,故DAA指令执行加66H调整,最后结果为:(AL)=22H,CF=1,AF=1,42,(1)非压缩BCD码减法的十进制调正指令AAS 对AL中由两个非压缩的BCD码相减的结果进行调整。调整操作为:若AL的低4位9或AF=1,则:AL(AL)-6,AH(AH)-1,AF1 AL(AL)0FH CFAF 否则:AL(AL)0FH,2)减法的十进制调整指令,43,举例:16-8=?MOV AX,0106H 0000 0110 06 MOV BL,08H-0000 1000-08 SUB AL,BL 1111 1110 FE AAS-0000 0110-06 1111 1000 F8 0000 1111 0F 0000 1000 08结果为:(AL)=08H,(AH)=0,CF=AF=1,44,(2)压缩BCD码减法的十进制调正指令DAS 对AL中由两个压缩BCD码相减的结果进行调整。调整操作为:,若AL的低4位9AF=1,则:AL(AL)-6,且AF1 若AL的高4位9CF=1,则:AL(AL)-60H,且CF1 注意:AAS、DAS对标志位的影响与AAA、DAA相同。AAS、DAS指令要求紧跟在减法指令SUB或SBB之后。,45,3)乘法的十进制调正指令AAM 对AX中由两个非压缩BCD码相乘的结果进行调整。调整操作为:(AL)/0AH,(AH)商,(AL)余数注意:隐含的操作寄存器为AL和AH;AAM紧跟在MUL指令之后使用;影响标志位PF、SF、ZF,其它无定义;用AAM可实现99的二-十进制转换。,46,例1:按十进制乘法计算78=?程序段如下:MOVAL,07H;(AL)=07HMOVCL,08H;(CL)=08HMULCL;(AX)=0038HAAM;(AH)=05H,(AL)=06H 所得结果为非压缩的BCD码。例2:把3AH转换成等值的十进制数。MOV AL,3AH;58 AAM;(AH)=05H,(AL)=08H,47,4)除法的十进制调正指令AAD,对非压缩BCD除法运算进行调整。调整操作为:(AL)(AH)0AH(AL)AH 0注意:隐含的操作寄存器为AH,AL;AAD要在DIV指令之前使用;影响标志位PF、SF、ZF,其它无定义;用AAD可实现99的十-二进制转换。,48,例1:按十进制除法计算557=?程序段如下:MOVAX,0505H;(AX)=55BCDMOVCL,07H;(CL)=7AAD;(AX)=0037H DIVCL;(AH)=6,(AL)=7 所得结果为非压缩的BCD码(商7余6)。例2:把73转换成等值的二进制数。MOV AX,0703H;(AX)=73BCD AAD;(AX)=0049H,

    注意事项

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

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




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开