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

    pentiun指令系统之算术运算指令.ppt

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

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

    pentiun指令系统之算术运算指令.ppt

    内容:提供加、减、乘、除、转换五种基本算术操作;利用十进制调整指令和ASCII调整指令对BCD码表示的 十进制数进行算术运算;对带符号数与无符号数进行乘、除运算。(一)加法指令(Addition)(二)减法指令(Subtraction)(三)乘法指令(Multiplication)(四)除法指令(Division)(五)类型转换指令(Type Trans)(六)BCD码运算指令,二算术运算指令(Arithmetic),特点:大部分都影响标志位,不同指令影响不同:(1)加、减法指令影响 SF,ZF,AF,PF,CF,OF;(2)加1和减1指令不影响CF;(3)乘法指令影响CF,OF;(4)除法指令使大部分标志位的状态不确定;(5)对BCD码调整指令对标志位的影响不同;,源操作数可以是立即数、通用寄存器或者是存储器中的数,目的操作数可为通用寄存器或存储器中的数,都可以用于字节、字、双字的运算;,8位二进制数可以表示十进制数的范围:8位无符号十进制数的范围:02558位带符号十进制数的范围:128127 16位二进制数可以表示十进制数的范围:16位无符号十进制数的范围:06553516位带符号十进制数的范围:3276832767字长为 n 位的带符号数,补码能表示范围为:-2 n-1+2 n+1 1如果运算结果超出该范围,叫补码溢出,简称溢出。,算术运算指令涉及的一些问题:,以8位二进制数为例分析一下数的溢出与进位情况:下面分4种情况加以讨论:(1)带符号数和无符号数都不溢出(2)无符号数溢出(3)带符号数溢出(4)带符号数和无符号数都溢出,(1)带符号数和无符号数都不溢出,。,二进制数,看作无符号数,看作带符号数,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,+4,+1 1,+,+1 5,相,加,标志,CF=0,OF=0,CF=0,OF=0,溢出,不溢出,不溢出,同符号数相加,,结果符号与其相同,(2)无符号数溢出,二进制数,看作无符号数,看作带符号数,0,0,0,0,0,1,1,1,1,1,1,1,1,0,1,1,+,0,0,0,0,0,0,1,0,7,251,+,258,+7,-5,+,+2,相,加,标志,CF=1,OF=0,CF=1,OF=0,溢出,溢出,若考虑进位所代表的数值,结果正确,不溢出,异号数相加,不可能有溢出,CF=1,(3)带符号数溢出,二进制数,看作无符号数,看作带符号数,0,0,0,0,1,0,0,1,0,1,1,1,1,1,1,0,0,+,1,0,0,0,0,1,0,1,9,124,+,133,+9,+1 2 4,+,+1 3 3,相,加,标志,CF=0,OF=1,CF=0,溢出,不溢出,溢出,正正相加,结果为负,结果错,OF=1,(4)带符号数和无符号数都溢出,二进制数,看作无符号数,看作带符号数,1,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,+,0,1,1,1,1,1,0,0,135,245,+,380,121,-11,+,132,相,加,标志,CF=1,OF=1,CF=1,OF=1,溢出,溢出,若考虑进位CF所代表的数值,结果正确,溢出,负负相加,结果为正,结果错,CF=1,结论:(1)带符号数相加溢出根据OF判断带符号数产生溢出?OF=1 同符号数相加,结果符号与其相反,产生溢出;(结果是错误的)OF=0 没有产生溢出;(结果是正确的)(2)无符号数相加溢出根据CF判断无符号数产生溢出?CF=1无符号数相加产生溢出,但考虑进位所代表的数值后,结果并没有错。,(一)加法指令(Arithmetic)1、ADD(Addition)加法指令2、ADC(Add with carry)带进位加法指令3、XADD(Exchange Add)字节交换加法指令 4、INC(Increment by 1)加 1指令,1、ADD(Addition)加法指令指令格式:ADD dest,src;(dest)(dest)+(src)Src:立即数,寄存器,存储器。dest:寄存器,存储器。例:ADD CX,1000H;寄存器+立即数ADD DX,SI;寄存器+寄存器ADD BX+DI,AX;寄存器+存储器ADD EAX,BX+2000H;存储器+寄存器ADD BYTE PTRDI,30H;存储器+立即数,特点:可以进行8位、16位的无符号数和带符号数的加法运算;源操作数和目标操作数不能同时为存储器,不能为段寄存器;指令影响标志位的情况:OF=1,8位带符号数相加,和超出范围(128127),16位带符号数相加,和超出范围(-32768+32767);CF=1,8位无符号数相加,和超过255,16位无符号数相加,和超过65535。其他条件标志(SF,AF,PF,ZF)根据定义设定。,例MOV AL,7EH;(AL)=7EHMOV BL,5BH;(BL)=5BHADD AL,BL;(AL)=7EH+5BH=D9H影响标志位的情况:SF=1,结果最高位1ZF=0,结果不等于0AF=1,D3 位向D4 有进位PF=0,”1”的个数为奇数CF=0,无进位OF=1,和超过127(两个正数相加,结果为负;反之亦是),2、ADC(Add with carry)带进位加法指令格式:ADC dest,src;(dest)(dest)+(src)+CF CF:进位标志CF的现行值(上条指令CF值)特点:与ADD同。用途:主要用于多字节运算中。类型举例:ADC CX,300;寄存器+立即数+CFADC AL,BL;寄存器+寄存器+CFADC DX,COUNTSI;寄存器+存储器CFADC BLOCKDI,BX;存储器+寄存器+CFADC BYTE PTR MEM,6;存储器+立即数+CF,用途举例:计算两个多字节数相加 3B74AC60F8H+20D59E36C1H=?两个多字节数存放在:DATA1,DATA2的开始单元。,流程图,多字节数内存存放,程序:MOV CX,5MOV SI,0;清SICLC;清CFLOOPER:MOV AL,SI+DATA2ADC SI+DATA1,ALINC SI;(SI)+1(SI)DEC CX;(CX)-1(CX)JNZ LOOPER;(CX)0转HLT;停机,3、XADD(Exchange Add)字节交换加法指令 格式:XADD dest,src;(B/W/DW),(dest)(dest)+(src)dest:寄存器、存储器。不能是段寄存器。功能:将目的操作数送源操作数,相加的结果送目的操 作数 注:XADD指令的源操作数必须为寄存器,目的操作数可 为寄存器或存储器 XADD AX,BX XADD 1000H,EAX标志位影响情况:影响SF,ZF,AF,PF,OF。不影响CF。,4、INC(Increment by 1)加 1 指令格式:INC dest;(B/W/DW),(dest)(dest)+1 dest:寄存器、存储器。不能是段寄存器。功能:对指定的目标操作数+1 操作数单元。用途:用于在循环程序中修改地址指针和循环次数。标志位影响情况:影响SF,ZF,AF,PF,OF。不影响CF。,操作数类型:可以是寄存器,存储器。不能是段寄存器。例:INC DL;8位寄存器1 INC SI;16位寄存器1 INC BYTE PTR BXSI;存储器1(字节操作)INC WORD PTR DI;存储器1(字操作)INC DS;错,(二)减法指令(Subtraction)1、SUB(Subtraction)减法指令2、SBB(Subtraction with borrow)带进位减法指令 3、DEC(Decrement by 1)减 1 指令4、NEG(Negate)求补指令5、CMP(Compare)比较指令6、CMPXCHG(Compare&Exchange)7、CMPXCHG8B(Compare&Exchange 8byte),1、SUB(Subtraction)减法指令格式:SUB dest,src;(dest)(dest)-(src)Src:立即数,寄存器,存储器。Dest:寄存器,存储器。例:SUB AL,37H;寄存器-立即数SUB EBX,EDX;寄存器-寄存器SUB CX,VAR1;寄存器-存储器SUB ARRAYSI,AX;存储器-寄存器SUB WORD PTRALPHABXDI,512H;存储器减立即数这种指令影响标志位:AF、CF、OF、PF、SF、ZF标志。,2、SBB(Subtraction with borrow)带进位减法指令 格式:SBB dest,src;(dest)(dest)-(src)-CFCF:进位标志CF的现行值(上条指令CF值)Src:立即数,寄存器,存储器。dest:寄存器,存储器。指令影响标志位、B/W数运算情况同SBB用途:用于多字节数相减例:SBB BX,100H;寄存器-立即数-CFSBB ECX,EDX;寄存器-寄存器-CFSBB AL,SI+DATA1;寄存器-存储器-CFSBB BP+DISP,BL;存储器-寄存器-CFSBB BYTE PTR SI+6,96H;存储器-立即数-CF,多字节数的加减综合举例例: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单元说明:低16位加减用不带进位的指令;高16位的加减用带进位的指令,3、DEC(Decrement by 1)减 1 指令格式:DEC dest;(B/W/DW)(dest)(dest)-1dest:寄存器、存储器。不能是段寄存器。功能:对指定的目标操作数-1 操作数单元。用途:用于在循环程序中修改地址指针和循环次数。标志位影响情况:影响SF,ZF,AF,PF,OF。不影响CF。,DEC 用途举例:MOV CX,0FFFFHCYC:DEC CXJNZ CYCHLT用于延时时间。,4、NEG(Negate)求补指令格式:NEG dest;B/W/DW,(dest)0-(dest)dest:寄存器、存储器。操作:把操作数按位求反后末位+1。(dest)0FFFFH-(dest)+1影响标志:AF、CF、OF、PF、SF、ZF。CF:操作数为0时求补,CF=0;一般使CF=1.OF:对128 或32768求补,OF=1;否则OF=0.,应用举例:求绝对值在内存中,从AREA1开始存放100个带符号数。求各数的绝对值,并存于AREA2开始的单元。,流程图,程序:LEA SI,AREA1LEA DI,AREA2MOV CX,100CHECK:MOV AL,SIOR AL,AL;(AL)内容不变,置标志JNS NEXT;SF=0转NEXTNEG AL;负数,求其正数的补码NEXT:MOV DI,AL;送目标INC SIINC DIDEC CXJNZ CHECKHLT,5、CMP(Compare)比较指令格式:CMP dest,src;B/W(dest)-(src)结果不送,但影响标志位。影响标志:AF、CF、OF、PF、SF、ZF。src:立即数,寄存器,存储器。dest:寄存器,存储器。例:CMP AL,0AH;寄存器与立即数比较CMP ECX,EDI;寄存器与寄存器比较CMP AX,AREA1;寄存器与存储器比较CMP BX+5,ESI;存储器与寄存器比较CMP WORD PTR GAMMA,100H;存储器与立即数比较,用途:用比较指令来比较两个数之间的关系:两者是否相等,两个数中哪个大。(1)根据ZF标志,判断两者是否相等;(2)根据CF标志,判断两个无符号数的大小;(3)用SF、OF标志,判断二个带符号数的大小。,(1)根据ZF标志,可判断两者是否相等例:CMP AX,BXZF=1,结果为0,两者相等ZF=0,结果不为0,两者不相等(2)根据CF标志,判断两个无符号数的大小例:比较AX,BX寄存器,将大数(AX)CMP AX,BX JNC NEXT;CF=0转NEXT XCHG AX,BX NEXT:结论:CF=0,(AX)(BX);CF=1,(AX)(BX),设:被比较二个带符号数分别为:A、B 分四种情况讨论:A0,B0 A0,B0,(3)用SF、OF标志,判断二个带符号数的大小,四种情况讨论(操作数以8位为例):,分析以上四种情况得出如下结论:OF=0 时:SF=0,则:AB SFOF=0 SF=1,则:AB SFOF=0 SF=0,则:AB SFOF=1,则AB,带符号数找最大值 若自BLOCK开始的内存缓冲区中,有100个带符号数。找出最大值。并存放到MAX单元中。,CMP指令应用举例:比较指令在使用时,一般在其后紧跟一条条件转移指令,根据比较结果决定转向。,思路:第一个数取出(AX),取出第二个数(第二个字单元内容)与(AX)比较:(AX)第二个数,不做交换,否则,(第二个字单元内容)(AX)。再取第三个数,经过99次比较,在(AX)中得到最大数。,编程:MOV BX,OFFSET BLOCK MOV AX,BX INC BX INC BX MOV CX,99AGAIN:CMP AX,BX JG NEXT;如ZF=0且SF=OF,则转NEXT MOV AX,BXNEXT:INC BX INC BX DEC CX JNE AGAIN MOV MAX,AX;MAX单元存放最大值,小结:根据标志位来判断比较的结果,1)根据ZF判断两个数是否相等。若ZF=1,则两数相等。2)若两个数不相等,则分两种情况考虑:比较的是两个无符号数 若CF=0,则被减数减数;若CF=1,则被减数减数。比较的是两个有符号数 若OFSF=0,则被减数减数;若OFSF=1,则被减数减数。,6、比较并交换CMPXCHG(Compare&Exchange)指令,格式:CMP dest,src;B/W/DW(dest)-src)影响标志:ZF。功能:将目的操作数和累加器中的数相比较 ZF=1,源操作数送目的操作数;ZF=0,目的操作数送累加器。例:CMPXCHG 1000H,BL,7、比较并交换CMPXCHG8B(Compare&Exchange 8B)指令,格式:CMPXCHG8B dest,功能:将EDX:EAX中的8个字节与存储器中的8个字节比较,如相等,则ZF=1,并将ECX:EBX中的8个字节数据送目的操作数处;ZF=0,将目的操作数送EDX:EAX,例:CMPXCHG 1000H,BL,进行乘法时:8位*8位16位乘积 16位*16位32位乘积(1)无符号数的乘法指令MUL(MEM/REG)格式:MUL src操作:字节操作数(AX)(AL)(src)字操作数(DX,AX)(AX)(src)双字操作数(EDX,EAX)(EAX)(src)注意:一个操作数隐含在AL或AX或EAX中指令例子:MUL BL;(AL)(BL),乘积在AX中 MUL CX;(AX)(CX),乘积在DX,AX中 MUL DWORD PTRBX,(三)乘法指令MUL/IMUL(Multiplication),格式与MUL指令类似,只是要求两操作数均为有符号数。指令例子:IMUL BL;(AX)(AL)(BL)IMUL WORD PTRSI;(DX,AX)(AX)(SI+1SI),(2)有符号数乘法指令IMUL,注意:MUL/IMUL指令中 AL(AX)为隐含的乘数寄存器;AX(DX,AX)为隐含的乘积寄存器;除CF和OF外,对其它标志位无定义。,(四)除法指令DIV/IDIV(Division),进行除法时:16位/8位8位商 32位/16位16位商 64位/32位32位商对被除数、商及余数存放有如下规定:被除数 商 余数字节除法 AX AL AH 字除法 DX:AX AX DX双字除法 EDX:EAX EAX EDX,格式: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,(2)有符号数除法指令IDIV,格式:IDIV src操作与DIV类似。商及余数均为有符号数,且余数符号总是与被除数符号相同。注意:对于DIV/IDIV指令 AX(DX,AX)为隐含的被除数寄存器。AL(AX)为隐含的商寄存器。AH(DX)为隐含的余数寄存器。src不能为立即数。对所有条件标志位均无定义。,除法运算要求被除数字长是除数字长的两倍,若不满足则需对被除数进行扩展,否则产生错误。对于无符号数除法扩展,只需将AH或DX清零即可。对有符号数而言,则是符号位的扩展。可使用符号扩展指令CBW/CWD/CWDE/CDQ,关于除法操作中的字长扩展问题,例:写出34H25H的程序段。,MOV AL,34H MOV BL,25H CBW;AL的符号扩展到AH IDIV BL;0034H25H,结果为;(AH)=0FH,(AL)=01H,(五)BCD码运算的十进制调整指令,专用于对BCD码运算的结果进行调整包括:DAA/AAA、DAS/AAS、AAM、AAD均为隐含寻址,隐含的操作数为AL和AH为何要对BCD码的运算结果进行调整?BCD码本质上是十进制数,即应遵循逢十进一的规则。而计算机是按二进制(十六进制)进行运算,并未按十进制规则进行运算。,调整原理:先看一个例子例1:0000 1000 8+0000 0101+5 0000 1101 13 结果为0DH。而在BCD码中,只允许09这10个数字出现,0DH不代表任何BCD码。为什么会出现这种情况呢?原因在于BCD码是逢十进一,但计算机是逢十六进一;因此,应在个位补上6,促其产生进位。对上例的结果进行加6调整:0000 1101+0000 0110 0001 0011=13,例2 0000 1000 8+0000 1001+9 0001 0001 11 17 原因在于计算机在运算过程中,如遇到低4位往高4位产生进位时(此时AF=1)是按逢十六进一的规则,但BCD码要求逢十进一,因此只要产生进位,个位就会暗中丢失一个6,这就要进行加6调正。对上例的结果进行加6调整:0001 0001+0000 0110 0001 0111=17,总的调整原理是:凡遇到某4位二进制码对应的BCD码大于9时,则加六进行调整;凡是低4位往高4位产生了进位时,则加6进行调整。,(1)压缩BCD码加法调整DAA,指令操作(调整方法):若AL的低4位9AF=1 则(AL)(AL)+6,AF1 若AL的高4位9CF=1 则(AL)(AL)+60H,CF1除OF外,DAA指令影响所有其它标志。DAA指令应紧跟在ADD或ADC指令之后。,1)加法的十进制调整指令,两个压缩BCD码相加结果在AL中,通过DAA调整得到一个正确的压缩BCD码.,例4:0100 1000 48H MOV AL,48H+0111 0100 74H MOV BL,74H 1011 1100 BCH ADD AL,BL+0110 0110 66H DAA 1 0010 0010 1 22H(进位)(进位)执行ADD后,(AL)=BCH,高4位低4位均大于9,故DAA指令执行加66H调整,最后结果为:(AL)=22H,CF=1,AF=1,本指令对在AL中的由两个未组合的BCD码相加后的结果进行调整,得到一个正确的未组合的BCD码。AAA指令只影响AF和CF,其余标志无定义。AAA指令应紧跟在ADD或ADC指令之后。,AAA指令的操作如下:,如果AL的低4位9AF=1,则:AL(AL)+6,(AH)(AH)+1,AF1 AL(AL)0FH)CFAF否则AL(AL)0FH,(2)非压缩BCD码加法调整AAA,假定二数在内存中均是低位在前,高位在后,另留出5个单元存放相加的结果。内存中数据存放形式见下页图。,例3:有两个多位十进制数2658和3619,以非压缩的BCD码形式存放在内存中,求二者之和。即2658+3619=?,06H,02H,09H,01H,STRING1,STRING2,08H,05H,06H,03H,被加数,加数,数据段,8,5,6,2,9,1,6,3,SUM,结果,.,.,程序段为: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,(1)压缩BCD码减法的十进制调正指令DAS 对AL中由两个压缩BCD码相减的结果进行调整。调整操作为:,若AL的低4位9AF=1,则:AL(AL)-6,且AF1 若AL的高4位9CF=1,则:AL(AL)-60H,且CF1 DAS对OF无定义,但影响其余标志位。DAS指令要求跟在减法指令之后。,2)减法的十进制调整指令,(2)非压缩BCD码减法的十进制调正指令AAS 对AL中由两个非压缩的BCD码相减的结果进行调整。调整操作为:若AL的低4位9或AF=1,则:AL(AL)-6,AH(AH)-1,AF1 AL(AL)0FH CFAF 否则:AL(AL)0FH,3)乘法的十进制调正指令AAM 对AX中由两个非压缩BCD码相乘的结果进行调整。隐含的操作寄存器为AL和AH;AAM跟在MUL指令之后使用;影响标志位PF、SF、ZF,其它无定义;,例5:按十进制乘法计算78=?程序段如下:MOVAL,07H;(AL)=07HMOVCL,08H;(CL)=08HMULCL;(AX)=0038HAAM;(AH)=05H,(AL)=06H 所得结果为非压缩的BCD码。,4)除法的十进制调正指令AAD,对非压缩BCD除法运算进行调整。调整操作为:先对被除数和除数进行调整,再运算(AL)(AH)0AH(AL)AH 0隐含的操作寄存器为AH,AL;AAD要在DIV指令之前使用;影响标志位PF、SF、ZF,其它无定义;,例6:按十进制乘法计算557=?程序段如下:MOVAX,0505H;(AX)=55BCDMOVCL,07H;(CL)=7AAD;(AX)=0037H DIVCL;(AH)=6,(AL)=7 所得结果为非压缩的BCD码(商7余6)。,

    注意事项

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

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




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开