资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,*,2算术运算类指令,算术运算类指令包括,加、减、乘、除,4种指令。这类指令可以对,字节、字或双字数据,进行运算,参加运算的数可以是无符号数或带符号数。由于80 x86提供十进制数运算校正指令,因此参加运算的数也可以是BCD码表示的十进制数。这类指令中既有双操作数指令,也有单操作数指令。如前所述,双操作数指令的两个操作数不能同时为存储器操作数,且只有源操作数可为立即数。单操作数指令不允许使用立即数寻址方式。,(1)加法运算指令,ADD(ADD)加法,ADC(ADD with Carry)带进位加法,INC(INCrement)加1,撵优塑河提瓦蚁麻居匿诱妥羹近赁辫拼赂斗漓循春裁跳屁素员畸簿丰蓟偿大学汇编课件第4章5大学汇编课件第4章5,2算术运算类指令撵优塑河提瓦蚁麻居匿诱妥羹近赁辫拼赂斗漓循,1,ADD加法指令,指令格式:,ADD DEST,SRC,指令功能:,DEST,(SRC)+(DEST),即源操作数与目的操作数相加,其和送入目的地址中。并根据相加结果,设置FLAGS的OF、SF、ZF、AF、PF和CF标志位,。该指令执行后,源操作数保持不变。,【例4-29】加法指令的常用格式有:,ADD BX,SI,ADD DA_WORD,0F8CH,ADD DL,TABBX,墅尺贝拳典予滤硼黄缆炙雅韵佛插迷抱醛亥用抡鲁灰内峡栗渔泊淬斡伴财大学汇编课件第4章5大学汇编课件第4章5,ADD加法指令墅尺贝拳典予滤硼黄缆炙雅韵佛插迷抱醛亥用抡,2,下面以指令“ADD DL,0A4H”为例,给出该指令的相加及标志位设置过程。设DL的内容为0E5H:,结果不为零,则ZF 0;,结果无溢出,则OF 0;,结果中有奇数个1,则PF 0。,需要指出,溢出位OF表示带符号数的溢出,它是根据数的符号及其变化来设置的。而CF位可以表示无符号数的溢出。,涛特慷熔惠瑰醚谁拂美什蒋鬃藕坡给完挛亨奥潮虫惟杀镶冒帘疽抵入死缠大学汇编课件第4章5大学汇编课件第4章5,下面以指令“ADD DL,0A4H”为例,给出该指令的,3,执行下面两条指令后,标志寄存器中CF、AF、ZF、SF,和OF、PF分别是什么状态?,MOV AL,91,ADD AL,0BAH,瑞响冶帘挠颊净性莱稠敖例归傲须缆则黔滁殉停砸愈伟脚艘帕示岭屁订惧大学汇编课件第4章5大学汇编课件第4章5,执行下面两条指令后,标志寄存器中CF、AF、ZF、SF瑞响冶,4,在实模式下,假设(DS)=1234H,(SI)=124H,,(12464H)=30ABH,(12484H)=464H,有以下,程序段:,LEA SI,SI,MOV AX,SI,MOV SI+22H,1200H,LDS SI,SI+20H,ADD AX,SI,上述程序段执行后,(DS)=?(SI)=?(AX)=?,碟饰酸率爵昌矿椿帮吧丑阎富私梨鞭时盔己幂崭掇亨哉嘶沉谗晒川黄桩避大学汇编课件第4章5大学汇编课件第4章5,在实模式下,假设(DS)=1234H,(SI)=124H,碟,5,ADC带进位加法指令,指令格式:,ADC DEST,SRC,指令功能:,DEST,(SRC)+(DEST)+CF,即在完成两个操作数相加的同时,将标志位CF的值加上,求出的和数送入目的地址中;并根据相加的结果,设置标志位OF、SF、ZF、AF、PF和CF。,【例4-30】在8086/80286中实现两个双精度数的加法。有一个32位无符号数存放在DX(高16位)、AX(低16位)中,若要加上常数76F1A23H,则用以下指令来实现:,ADD AX,1A23H,ADC DX,76FH,其中第一条指令完成把16位常数加在AX中,若产生进位,则记录在CF中。由ADC指令在完成高16位相加的同时,将低16位的进位也加上。,颗殆慈仔录夫揩铝熬斋坠剔词涧八其鹅潭团敖腋喜铸喝轻信傀蝎送堰厨蘑大学汇编课件第4章5大学汇编课件第4章5,ADC带进位加法指令颗殆慈仔录夫揩铝熬斋坠剔词涧八其鹅潭,6,INC加1指令,指令格式:,INC DEST,指令功能:,DEST,(DEST)+1,即目的操作数加1后送回目的地址中,并根据执行结果设置标志位OF、SF、ZF、AF和PF,但不影响CF。,INC指令只有一个操作数,操作数可以是字节、字或双字,且被当作无符号数。,缚团咽欠膜忧综撑子叉劫始着终宦解忙做犀温桶筐堰柑嚷潘炭槽适可垄债大学汇编课件第4章5大学汇编课件第4章5,INC加1指令缚团咽欠膜忧综撑子叉劫始着终宦解忙做犀温桶,7,(2)减法运算指令,SUB(SUBtract),减法。,SBB(SuBtract with Borrow),带借位减法。,DEC(DECrement),减1。,NEG(NEGate),求补。,CMP(CoMPare),比较。,顺曾谁球镶庄革量费狰恤装桌悸土渝父递渭衔吾盛荐李爪国场巾稿湛蟹邓大学汇编课件第4章5大学汇编课件第4章5,(2)减法运算指令顺曾谁球镶庄革量费狰恤装桌悸土渝父递渭衔吾,8,SUB减法指令,指令格式:,SUB DEST,SRC,指令功能:,DEST,(DEST),(SRC),即完成从目的操作数中减去源操作数,其差值送入目的地址中;并按相减结果设置标志位OF、SF、ZF、AF、PF和CF。,【例4-32】SUB指令的常用格式如下:,SUB AL,3FH,SUB BX,AX,泻整穗酋吞冬耕舀瘴具带蚀岳立咎室频甫痔党美观汛枪玉苛犹紧儒甭菊坪大学汇编课件第4章5大学汇编课件第4章5,SUB减法指令泻整穗酋吞冬耕舀瘴具带蚀岳立咎室频甫痔党美,9,下面以指令“SUB AL,DAB”为例,给出该指令的相减及设置标志位过程。设AL内容为B7H,DAB字节单元内容为A8H:,结果不为零,则ZF 0;,结果无溢出,则OF 0;,结果中有偶数个1,则PF 1。,滦诀畸膝滚滨斜梢碾帕缆增殆舌胜锑抛胰叛撼砧铲动戚乡千泉邯人辛将看大学汇编课件第4章5大学汇编课件第4章5,下面以指令“SUB AL,DAB”为例,给出该指令的,10,SBB带借位减法指令,指令格式:,SBB DEST,SRC,指令功能:,DEST,(DEST),(SRC),CF,即在完成两个操作数相减的同时,,还要减去借位位CF,,相减结果送入目的地址中;并设置标志位OF、SF、ZF、AF、PF和CF。,DEC减1指令,指令格式:DEC DEST,指令功能:DEST(DEST)1,即目的操作数减1后送回目的地址中;并根据执行结果设置标志位OF、SF、ZF、AF和PF,但不影响CF。,两走贝倚原和迟吏茁抿应谜砾解捕淑窗际带底腰壕蒸猎朵芯殉裁猩华野拎大学汇编课件第4章5大学汇编课件第4章5,SBB带借位减法指令 DEC减1指令两走贝倚原和迟吏茁,11,NEG求补指令,指令格式:,NEG DEST,指令功能:,DEST,0,(DEST),即用零减去目的操作数,相减结果送回目的地址中;并按结果设置标志位OF、SF、ZF、AF、PF和CF。,NEG指令属单操作数指令,操作数可以是字节、字或双字,且被当作补码表示的带符号数。,如果字节操作数是,128、字操作数是,32768,在执行NEG指令后,操作数不变,但溢出标志OF置1。这是由于+128或+32768超出了8位或16位带符号数的表示范围,即产生了溢出。如操作数为零,求负的结果仍为零,则标志位CF置0;否则CF置1。,陷脾戊次桨逢摔锯桶迪晨施泳练狸养消写勺抹王颁徽纷玖却捆吠滋凳倔舱大学汇编课件第4章5大学汇编课件第4章5,NEG求补指令陷脾戊次桨逢摔锯桶迪晨施泳练狸养消写勺抹王,12,NEG AL,NEG BL,以上指令执行后,AL中为负数25H的补码:,(AL)DBH 11011011B。,BL中则为正数:(BL)58H 01011000B。,【例4-34】设AL中存放一正数:(AL)25H 00100101B。BL中存放负数58H的补码:(BL)A8H 10101000B。可用以下指令获得AL、BL中数的负数:,仿径即褒爬擂畸望魁吁凛采肩效条翼抉晚侠甲挖呕粟休甜至剐握鉴灾盔狠大学汇编课件第4章5大学汇编课件第4章5,NEG AL【例4-34】设AL中存放一正数:(A,13,假设(AX)=0FFFFH,有以下程序段:,INC AX,NEG AX,DEC AX,NEG AX,上述程序段执行后,(AX)=?,胰嫉帽租矫灭瘫灰经痊梳晴飘械专赎敢像俱承涣邹灵霹乡别坯直阎世鹃凸大学汇编课件第4章5大学汇编课件第4章5,假设(AX)=0FFFFH,有以下程序段:胰嫉帽租矫灭瘫灰经,14,CMP比较指令,指令格式:,CMP DEST,SRC,指令功能:,(DEST),(SRC),两个操作数相减后,仅按相减结果设置标志位OF、SF、ZF、AF、PF和CF,而不保留两数相减的差。,CMP指令与SUB指令的不同之处是,运算结果不送回目的地址中。因此CMP指令执行后,两个操作数都不变,只影响状态标志位。,CMP指令后往往跟着一个条件转移指令,,根据比较结果产生不同的程序分支。例如:,CMP AL,BL,JZ EQL,CMP指令可利用所设标志位的状态来反映两个操作数的大小。CMP指令执行后,若ZF,1,表示(DEST),(SRC)。对于无符号数,若CF,0,表示(DEST)(SRC);若CF,1,则(DEST)(SRC)。,礁租赴舶师捅践芯瘩缨钝匿温府璃腆咽郡扑静皇琶肌顶隧夹住裤突竹主特大学汇编课件第4章5大学汇编课件第4章5,CMP比较指令礁租赴舶师捅践芯瘩缨钝匿温府璃腆咽郡扑静皇,15,(3)乘法运算指令,MUL(unsigned MULtiple)无符号数乘法。,IMUL(sIgned MULtiple)带符号数乘法。,MUL无符号数乘法指令,指令格式:MUL SRC,指令功能:,字节操作数 AX(AL)*(SRC),字操作数 DX:AX(AX)*(SRC),其中(SRC)是乘法运算的一个操作数,它只能在通用寄存器或存储单元中(不能是立即数),而另一个操作数隐含在 AL(字节乘)、AX(字乘)或EAX(双字乘)寄存器中。,MUL指令只影响标志寄存器中CF、OF标志位。MUL指令执行后,如果乘积的高一半为0,即AH(字节乘)、DX(字乘法)或EAX(双字乘)全为0,则CF 0和OF 0;否则CF 1,OF 1(表示AH、DX或EDX中有乘积的有效数字)。,沦皇各伐始额撮吴毡掘找球巢鸟犁讽紧楔侥离束戍靳烈返却破贴吧荆揽肾大学汇编课件第4章5大学汇编课件第4章5,(3)乘法运算指令 MUL无符号数乘法指令其中(SRC)是,16,IMUL带符号数乘法指令,指令格式:,IMUL SRC,指令功能:,与MUL相同,但操作数和乘积必须是带符号数且用补码表示,而MUL的操作数和乘积均是无符号数。,执行IMUL指令后,如果乘积的高一半是低一半的符号扩展,则CF和OF均为0;否则均为1。,【例4-35】设(AL),0B4H,76D,(BL),11H,17D;,执行指令“,IMUL BL,”后:,乘积为(AX),0FAF4H,1292D,CF,OF,1。,【例4-36】设(AL),0AH,10D,(BL),11H,17D;,执行指令“,MUL BL,“后:,乘积为(AX),00AAH,0170D,CF,OF,0。,津倔畦梧冕襄伯黎赴论痛禹侧换醚孤铁笔屎明草苯皋少拥赎陋熏仔恤挛符大学汇编课件第4章5大学汇编课件第4章5,IMUL带符号数乘法指令津倔畦梧冕襄伯黎赴论痛禹侧换醚孤,17,(4)除法运算指令,DIV(unsigned DIVide)无符号数除法。,IDIV(sIgned DIVide)带符号数除法。,DIV无符号数除法指令,指令格式:,DIV SRC,指令功能:,将隐含存放在AX(字节除)、DX:AX(字除)或EDX:EAX(双字除)中的被除数除以除数(SRC),除后的商和余数送入隐含指定的寄存器中。,字节操作:AL,(AX)/(SRC)的商,AH,(AX)/(SRC)的余数,字操作:AX,(DX:AX)/(SRC)的商,DX,(DX:AX)/(SRC)的余数,DIV指令中的被除数和除数必须是无符号数,其商和余数也是无符号数。,律矮贷带擞篇分瞧贬拦宜盂歹连沦伦力译恃明村戴喷杖杖殃厨础排暗凝莽大学汇编课件第4章5大学汇编课件第4章5,(4)除法运算指令律矮贷带擞篇分瞧贬拦宜盂歹连沦伦力译恃明村,18,DIV指令对标志寄存器无有效标志结果。但是以下两种情况之一,将产生0型中断(除法出错中断)转入除法出错中断处理。,除数为0,即(SRC)=0。,商溢出,即(AL)中的商0FFH,(AX)中的商0FFFFH,IDIV带符号数除法指令,指令格式:,IDIV SRC,指令功能:,与DIV相同,但操作数、商和余数必须是带符号数且用补码表示,余数的符号与被除数的符号相同。,带符号数除法的商中,最大的正数商是,+127,(,7FH,)、,+32767,(,7FFFH,)或,+65535,(,7FFFFFFFH,),最小的负数商是,127,(,81H,)、,32767,(,8001H,)或,65535,(,80000001H,)。同,DIV,指令一样,当除数(,SRC,),0,或商超出上述的最大值或最小值时,均产生,0,型中断。,除尸天脱肝懂近趁郑罚梧男竹汉暮拉工言愁汰世曝消收惠何兴记卯厄磐谤大学汇编课件第4章5大学汇编课件第4章5,DIV指令对标志寄存器无有效标志结,19,由于除法指令的字节操作要求被除数为16位,字操作要求被除数为32位,双字操作要求被除数为64位,因此往往需要用符号扩展的方法取得除法指令所需要的被除数格式。,【例4-39】两个8位带符号数分别放在BYTE1、BYTE2字节存储单元中,将BYTE1内容除以BYTE2内容,商放在QUOT字节单元中,可用以下指令实现:,MOVAL,BYTE1,CBW,IDIVBYTE2,MOVQUOT,AL,蠢玫粥局握浮逸漠妄食谍郭敷蝉捌苛艰选露蒲靴垄枫撑源蝗噬犀吃报韧坡大学汇编课件第4章5大学汇编课件第4章5,由于除法指令的字节操作要求被除数为16位,字操作要求,20,假设DAW1和DAW2分别是两个字单元的符号地址,请按,下列要求写出指令序列:,(1)DAW1和DAW2两个字数据相乘(用MUL)。,MOV AX,DAW1,MUL DAW2,(2)DAW1除以23(用DIV)。,MOV AX,DAW1,MOV BL,23,DIV BL,啼沙渴哆勃丫缩缄闰练岔辜欺彪辩狄儒奏道坡敲仙齿螟刽绦叫铬侣砷滥冉大学汇编课件第4章5大学汇编课件第4章5,假设DAW1和DAW2分别是两个字单元的符号地址,请按啼沙渴,21,3逻辑类指令,这类指令包括逻辑运算指令、位测试指令、位扫描指令和移位指令。,(1)逻辑运算指令,逻辑运算指令共有5条,其指令格式及功能分别如下:,AND逻辑与指令,指令格式:AND DEST,SRC,指令功能:DEST,(SRC)(DEST),OR逻辑或指令,指令格式:OR DEST,SRC,指令功能:DEST,(SRC)(DEST),尝咏涤涵讥救出烃枫烛镑届蜕铲署浅杰蔫猜凌粳惰臭贾腊曙漠瞻拴沏吕猛大学汇编课件第4章5大学汇编课件第4章5,3逻辑类指令尝咏涤涵讥救出烃枫烛镑届蜕铲署浅杰蔫猜凌粳惰臭,22,XOR逻辑异或指令,指令格式:XOR DEST,SRC,指令功能:DEST,(SRC),(DEST),NOT,逻辑非指令,指令格式:NOT DEST,指令功能:DEST,(DEST),TEST,测试指令,指令格式:TEST DEST,SRC,指令功能:(SRC)(DEST),上述指令对操作数都是按位进行逻辑运算的,操作数可以是字节、字或双字。NOT指令对标志位无影响,其余4条指令影响的标志位是SF、ZF、PF,置CF、OF为0,AF不确定。TEST指令与AND指令的不同之处是,运算结果不送回目的地址中。因此TEST指令执行后,两个操作数都不变,只影响标志位。,怜程利诊淮敏椭田葱南疯瞬塘颤襄护赦鉴像短癸平嗓垃垮躯旋烩脉挺愈痹大学汇编课件第4章5大学汇编课件第4章5,XOR逻辑异或指令怜程利诊淮敏椭田葱南疯瞬塘颤襄护赦鉴,23,这些指令常用于对操作数的某些位进行分离、组合或设置,例如:,ANDAL,0F0H;分离出AL中的高4位,ORAL,80H;将AL中最高位置1,XORAX,AX;将AX内容清零,XORAL,01H;将AL中最低位变反,【例4-40】可用以下程序段实现将标志寄存器的第8位TF位,置1:,PUSHF,POPAX,ORAX,100H,PUSHAX,POPF,厄霜行诵蜡建亩瓮相组袋蓑走增肺幽莫芽褒瞧年淄炽闰现基面翰奉椽顷鉴大学汇编课件第4章5大学汇编课件第4章5,这些指令常用于对操作数的某些位进行分离、组合或设置,例如:厄,24,假设(AX)=0FF60H,有以下程序段:,STC,MOV DX,96,XOR DH,0FFH,SBB AX,DX,上述程序段执行后,(AX)=?CF=?,旨帖在珊绩梳绊拂氮漂臂帆末归剃沾拖码昭败故饭蜒虞朵山刑毫促另掘埔大学汇编课件第4章5大学汇编课件第4章5,假设(AX)=0FF60H,有以下程序段:旨帖在珊绩梳绊拂氮,25,(4)移位指令,移位指令可按操作数的个数分为单操作数移位指令(8条)和双操作数移位指令(2条)。80386及其后继机型增加的双精度移位指令就是双操作数移位指令。,SHL(SHift logical Left)逻辑左移。,SAL(Shift Arithmetic Left)算术左移。,SHR(SHift logical Right)逻辑右移。,SAR(Shift Arithmetic Right)算术右移。,ROL(ROtate Left)循环左移。,ROR(ROtate Right)循环右移。,RCL(Rotate Left through Carry)带进位循环左移。,RCR(Rotate Right through Carry)带进位循环右移。,蕴功洪惫溅毫放培争铅道皋扣麦椽腔息勘下亿死辱旺猫鲸爹君乐关受及刀大学汇编课件第4章5大学汇编课件第4章5,(4)移位指令蕴功洪惫溅毫放培争铅道皋扣麦椽腔息勘下亿死辱旺,26,单操作数移位指令,这种移位指令共有,8,条,它们可以对通用寄存器或存储单元中的操作数进行指定移位,即一次可只移一位或按,CL,中的内容规定移位次数(位数)。,移位指令可分为:算术移位指令、逻辑移位指令和循环移位指令。,这,8,条指令有如下共同点:,具有相同的指令格式 OPR DEST,COUNT。,每条指令都是单操作数指令,即只需一个操作数DEST。,DEST只能是8/16/32位通用寄存器或存储器操作数,不能是立即数。但只有80386及其后继机型才能使用32位操作数。,COUNT表示移位次数 对于8086/80286,移位一次,COUNT可用常数1替代;移位多次,则必须用CL替代,CL中存放移位次数。对于80386及其后继机型,COUNT还可以是8位立即数,可指定131的移位次数。,曼撇琢又颤快烫帐茨膜周造穷粘朔谎放荤谰楚氛遗融谊实镍色猴茬前玲绎大学汇编课件第4章5大学汇编课件第4章5,单操作数移位指令曼撇琢又颤快烫帐茨膜周造穷粘朔谎放荤谰楚,27,a.算术移位指令,指令格式:,算术左移指令SAL DEST,COUNT,算术右移指令SAR DEST,COUNT,指令功能:,算术左移指令将DEST指定的8/16/32位操作数左移COUNT次。最高位移入CF中,最低位补0,移位操作如图(a)所示。算术右移指令将DEST指定的8/16/32位操作数右移COUNT次。右移时,最高符号位保持不变,连同符号位依次右移,最低位移入CF中,如图(b)所示。,蓑瓤繁膘灰亚我羹职磐堂咬邓宿枉蒲摔替仔认枫涩火惨咆饭灯淳罢峰媚材大学汇编课件第4章5大学汇编课件第4章5,a.算术移位指令蓑瓤繁膘灰亚我羹职磐堂咬邓宿枉蒲摔替仔认枫,28,算术移位指令主要用于对带符号数的移位,左移一位相当于乘2;右移一位相当于除2。算术移位后应保持该数的符号不变。,例如:(AL)11000001B(63的补码),(BL)10111111B(负数65的补码)。以下指令将AL、BL中的数左移一位:,SAL AL,1,SAL BL,1,以上指令执行后,(AL)10000010B即126的补码,不溢出OF 0,结果符合倍增关系;而(BL)01111110B,左移后发生溢出,则OF 1,因此BL内容不再符合倍增关系。,通常算术移位指令用于实现带符号数的简单乘除运算,其执行时间比用乘除指令短得多。,蝴侨咳马池豢妆虾触篡符娱艳侗椅墟搂宫挡妹赐氧流羹别籽梳徒岔擎夯遮大学汇编课件第4章5大学汇编课件第4章5,算术移位指令主要用于对带符号数的移位,左移一位相当于乘2;,29,例4-44 AX中已存放一个带符号数,若要完成,(AX)*3 2 运算,可用以下程序段实现:,MOV DX,AX,SAL AX,1,ADD AX,DX,SAR AX,1,炊胸矫寇瞥仪仅传吐纪阅烦榜跳雪匡筐芜傍浸敏土纪峭本瞒改络壁俏仕刑大学汇编课件第4章5大学汇编课件第4章5,例4-44 AX中已存放一个带符号数,若要完成炊胸,30,b.逻辑移位指令,指令格式:,逻辑左移指令 SHL DEST,COUNT,逻辑右移指令 SHR DEST,COUNT,指令功能:,将DEST指定的8/16/32位寄存器或存储器操作数移位COUNT次。,SHL,实现将操作数左移,最高位移入CF中,最低位补0,如图(a)所示。,SHR,实现将操作数右移,最低位移入CF中,最高位补0,如图(b)所示。,挚玩刑吧皮虎玩匣堪串探炯云蜕襟绊晒尔纯台氰太椽枪析骄瑚瘦稚腥套翅大学汇编课件第4章5大学汇编课件第4章5,b.逻辑移位指令挚玩刑吧皮虎玩匣堪串探炯云蜕襟绊晒尔,31,例4-45 要求把由CL中的数(0-15)所指定的AX中的,位分离出来,可用以下程序段实现:,MOV BX,1,SHL BX,CL,AND AX,BX,校跋堤错袄祝娠佑憾匝韧娶浚扰今渐澈偶芦街忿贼渴创庭股偶蚜俐船彦茂大学汇编课件第4章5大学汇编课件第4章5,例4-45 要求把由CL中的数(0-15)所指定的,32,c.循环移位指令,指令格式:,循环左移指令 ROL DEST,COUNT,循环右移指令 ROR DEST,COUNT,带进位循环左移指令 RCL DEST,COUNT,带进位循环右移指令 RCR DEST,COUNT,指令功能:,将DEST指定的8/16/32位寄存器或存储器操作数移位COUNT次。,ROL/ROR 实现将操作数循环左移/右移。,RCL/RCR 实现将操作数和CF一起循环左移/右移。,受影响的状态标志位:,CF,、,OF,。,CF,存放每次移出的位。如果移位指令只移一位,且移位前后操作数的符号位发生变化,则将,OF,置,1,;否则,OF,置,0,。如移位次数大于,1,,则,OF,不确定。,蓖就祁鼎陇汽裙奉型噬陪其纫搬幕劲盛耻同贴图讯锯扁湖雀赞犊辙窑型疟大学汇编课件第4章5大学汇编课件第4章5,c.循环移位指令蓖就祁鼎陇汽裙奉型噬陪其纫搬幕劲盛耻同贴图,33,循环移位指令的移位操作如下图所示:,当多字节或多字数据进行移位时,常用到带进位循环移位指令。,现姻者调歧匿础谨怜耽霉查靳笨如稠哦打步材台昨盯阀棉猾跌狄茅恰阮碱大学汇编课件第4章5大学汇编课件第4章5,循环移位指令的移位操作如下图所示:当多字节或多字数据进行移位,34,【例4-46】由3个字构成的一个无符号数从高位到低位依次存放在M+4,M+2,M字单元中,若要将该数右移一位,则可用以下程序段实现:,SHR M+4,1,RCR M+2,1,RCR M,1,如下图所示,SHR指令将M+4字单元的最低位移至CF中。第2条指令RCR将CF与M+2字单元构成一个17位的数进行一次循环右移,将M+4单元右移出的位通过CF移至M+2单元的最高位,而M+2中的最低位又移至CF。在第3条指令执行后,就完成将3个字的数右移一位。,抒肤犹耶磋计喊染锡漾慢寿池葵胎误伟禾薪发席芭儒估煤馆桌距辟辖初力大学汇编课件第4章5大学汇编课件第4章5,【例4-46】由3个字构成的一个无符号数从高位到低位依次,35,假设(AX)=0A5C6H,(CX)=0F03H,有以下程序段:,STC,RCL AX,CL,AND AH,CH,RCR AX,CL,上述程序段执行后,(AX)=?CF=?,(AX)=81C6H,CF=1,凳昭酒棕橱宰柳骸纲三遁炕宫死炒好亦灯敲昏汀辊裴员缴乳贺疚厕环梯膨大学汇编课件第4章5大学汇编课件第4章5,假设(AX)=0A5C6H,(CX)=0F03H,有以下程序,36,试分别指出下列各指令语句的语法是否有错,若有错,指明是什么错误。,1、MOV AL,0F5H,2、ADD BXBP,BX,3、CMP AL,100H,4、TEST BP,DL,5、ADC 15H,CL,6、SUB DI,DA_WORD,7、OR CH,CL,8、MOV AL,1000H,9、SAR 10HDI,2,10、NOT AL,BL,11、DEC CX,1,12、LEA ES,TABBX,谤彰假朝永见棋萨匀始婶秒脸犹状掏疯铀苗袁拽糯罪相勘溉膊墨怜斋腾多大学汇编课件第4章5大学汇编课件第4章5,试分别指出下列各指令语句的语法是否有错,若有错,指明是什么错,37,4串操作类指令,MOVS(MOVe String)串传送。,CMPS(CoMPare String)串比较。,SCAS(SCAn String)串扫描。,LODS(LOaD from String)取串。,STOS(STOre into String)存串。,INS(INput from port to String)串输入。,OUTS(OUTput String to port)串输出。,与上述基本指令配合使用的前缀有:,REP(REPeat),重复。,REPE/REPZ(REPeat while Equal/Zero),相等/为零则重复。,REPNE/REPNZ(REPeat while Not Equal/Not Zero),不相等/不为零则重复。,嗽回氛翅毋朔铱决媒裂湿尝溢抬哼春袜蓬浪拟喻么主沦机蒲保闹禄腿遥联大学汇编课件第4章5大学汇编课件第4章5,4串操作类指令嗽回氛翅毋朔铱决媒裂湿尝溢抬哼春袜蓬浪拟喻么,38,(1)取串指令(Load String),指令格式:,LODS 源串,LODSB;取字节串,LODSW;取字串,指令功能,:,字节操作AL,(DS:(SI/ESI),SI/ESI,(SI/ESI)1,字操作,AX,(DS:(SI/ESI),SI/ESI,(SI/ESI)2,双字操作EAX,(DS:(SI/ESI),SI/ESI,(SI/ESI)4,该指令把由源变址寄存器指向的数据段中某单元(字节/字/双字)的内容送到AL、AX或EAX中,并,根据方向标志DF,和数据类型(字节、字或双字)修改源变址寄存器的内容。若DF,0表示串操作按地址递增的方向处理,则修改SI/ESI内容用“+”;若DF,0表示串操作按地址递减的方向处理,则修改SI/ESI内容用“-”。该指令也不影响标志位。,侨貌斡膜湘孺婶冰华谓促瑰饵粳酞洋媚仍阑验烈徒块罩轨电弓坐疯彪赌坚大学汇编课件第4章5大学汇编课件第4章5,(1)取串指令(Load String)侨貌斡膜湘孺婶冰华谓,39,(2)存串指令(Store String),指令格式:,STOS 目的串,STOSB;存字节串,STOSW;存字串,指令功能,:,字节操作ES:(DI/EDI),(AL),DI/EDI,(DI/EDI)1,字操作ES:(DI/EDI),(AX),DI/EDI,(DI/EDI)2,双字操作 ES:(DI/EDI),(EAX),DI/EDI,(DI/EDI)4,该指令把AL、AX或EAX的内容存入由目的变址寄存器指向的附加段的某个单元中,并根据DF的值及数据类型修改目的变址寄存器的内容。该指令不影响标志位。,隅焊合宁骸沿银脚彪遇蜘陕寇巨氦颧弗擂拟兼划梅磺垂淋蚊们挽歹臆雕头大学汇编课件第4章5大学汇编课件第4章5,(2)存串指令(Store String)隅焊合宁骸沿银脚彪,40,(3)串传送指令(Move String),指令格式:,MOVS 目的串,源串,MOVSB;字节串传送,MOVSW;字串传送,指令功能:,字节操作ES:(DI/EDI),(DS:(SI/ESI),SI/ESI,(SI/ESI)1;DI/EDI,(DI/EDI)1,字操作ES:(DI/EDI),(DS:(SI/ESI),SI/ESI,(SI/ESI)2;DI/EDI,(DI/EDI)2,双字操作ES:(DI/EDI),(DS:(SI/ESI),SI/ESI,(SI/ESI)4;DI/EDI,(DI/EDI)4,MOVS指令把由源变址寄存器指向的数据段中的一个字节(或字,或双字)传送到由目的变址寄存器指向的附加段中的一个字节(或字,或双字)单元中去,同时根据方向标志DF及数据类型对源变址寄存器和目的变址寄存器进行修改。该指令不影响标志位。,狸宽泥依茂软扰颤末港憾请稼炮燕巧栏研敖丸紊永削锋阳处色直焚闽倒念大学汇编课件第4章5大学汇编课件第4章5,(3)串传送指令(Move String)狸宽泥依茂软扰颤末,41,(4)串比较指令(Compare String),指令格式:,CMPS 目的串,源串,CMPSB;字节串比较,CMPSW;字串比较,指令功能:,字节操作 (DS:(SI/ESI),(ES:(DI/EDI),SI/ESI,(SI/ESI)1;DI/EDI,(DI/EDI)1,字操作 (DS:(SI/ESI),(ES:(DI/EDI),SI/ESI,(SI/ESI)2;DI/EDI,(DI/EDI)2,双字操作(DS:(SI/ESI),(ES:(DI/EDI),SI/ESI,(SI/ESI)4;DI/EDI,(DI/EDI)4,CMPS指令比较源串和目的串中的一个字节、字或双字。即:将,源变址,寄存器指向数据段中的一个字节(或字,或双字),减去目的变址,寄存器指向附加段中的一个字节(或字,或双字),不保留相减结果,但设置标志位:OF、SF、ZF、AF、PF和CF。每比较一次,根据方向标志DF及数据类型对源变址寄存器和目的变址寄存器进行修改。,瞥烂普执剿茵靖捌离嚣庞霞晦既酗刃驭呜念坊睁瘫宫漾仟寐弥海阔初褂佬大学汇编课件第4章5大学汇编课件第4章5,(4)串比较指令(Compare String)瞥烂普执剿茵,42,(5)串搜索指令(Scan String),指令格式:,SCAS 目的串,SCASB;字节串搜索,SCASW;字串搜索,指令功能:,字节操作,(AL),(ES:(DI/EDI);,DI/EDI,(DI/EDI)1,字操作,(AX),(ES:(DI/EDI);,DI/EDI,(DI/EDI)2,双字操作,(EAX),(ES:(DI/EDI);,DI/EDI,(DI/EDI)4,SCAS指令在目的串中查找AL、AX或EAX指定的内容,即:,用AL、AX,或EAX的内容,减去目的变址,寄存器指向附加段中的一个字节(或字,或双字),不保留相减结果,但设置标志位:OF、SF、ZF、AF、PF和CF。每查找一次,根据方向标志DF及数据类型对目的变址寄存器进行修改。,衙占们迂认拜掩卑崖雁焦傲乡菲图迸拇襟酚貌铬锡栖逢馋掺题敦截腻赶丫大学汇编课件第4章5大学汇编课件第4章5,(5)串搜索指令(Scan String)衙占们迂认拜掩卑崖,43,(6)重复前缀指令(Repeat),重复前缀指令共有3条。,指令格式:REP string primitive,其中string primitive可为MOVS、STOS、LODS、INS和OUTS指令。,指令功能:,a.如(CX/ECX),0,则退出REP,否则往下执行;,b.(CX/ECX),(CX/ECX),1;,c.执行其后的串指令;,d.重复ac步骤。,该指令中,如16位寻址,使用CX作为计数器;如32位寻址,用ECX作为计数器。,论帝话谆虞檬膜席徘硷府遂辩刨辩咒采您淖啮臻哀搞尘新讽盯晨湛埔赡涵大学汇编课件第4章5大学汇编课件第4章5,(6)重复前缀指令(Repeat)论帝话谆虞檬膜席徘硷府遂辩,44,指令格式:REPE string primitive,或 REPZ string primitive,其中string primitive可为CMPS和SCAS指令。,指令功能:,a.如(CX/ECX)0或ZF 0时退出,否则往下执行;,b.(CX/ECX)(CX/ECX)1;,c.执行其后的串指令;,d.重复ac步骤。,有关计数寄存器的规定和REP相同。与REP相比,除满足,(CX/ECX)0的条件可结束操作外,还增加了ZF 0的条件。也就是说,在每次比较时,只要两数相等(即ZF 1)就继续比较,如果遇到两数不相等时(即ZF 0)就提前结束操作。,吧色援盟项督只琢渐滤鞋郧献赖捏阵旺坎抄懒坞询阀嚏热证咙呼哦伎袒征大学汇编课件第4章5大学汇编课件第4章5,指令格式:REPE string primitiv,45,指令格式:REPNE string primitive,或 REPNZ string primitive,指令功能:,除退出条件为(CX/ECX),0或ZF,1外,其他操作与REPE完全相同。也就是说,在每次比较时,,只要两数比较的结果不相等(即ZF,0),就继续执行串处理指令,;如某次两数比较相等或(CX/ECX),0,就结束操,作。,岁咖娘庶尤铀第壤识相漂钮讲氨褒恢捏咳肌淆檀早摧防潭移秦埔沽屠淹嘱大学汇编课件第4章5大学汇编课件第4章5,指令格式:REPNE string primiti,46,例如:REP MOVSB,在执行这条指令之前,假设DF 0,(SI)0020H,(DI)0100H,(CX)0030H。那么,这条带有重复前缀的串传送指令,将把数据段从0020H开始的30H个字节传送到当前附加段以0100H为起始地址的存储区中。如果不用串操作指令,上述传送操作就需编制如下程序段:,MOVSI,0020H,MOVDI,0100H,MOVCX,0030H,LOP:MOV AL,SI,MOV ES:DI,AL,INC SI REP MOVSB,INC DI,LOOP LOP,蛹疲造淮痊刷绘逛余泉挣羚讼沈歇任吟乎绵秧电澜环入渍隶损座秧角肚恳大学汇编课件第4章5大学汇编课件第4章5,例如:REP MOVSBLOP:MOV AL,S,47,【例4-49】要求从一个字符串中查找一个指定的字符,可用指令,REPNZ SCASB。,右 图表示了预置及找到后的情况。从图中可以看出,(AL)中指定的字符为space(空格),其ASCII码为20H。,开始比较时,因(DI)指定的字符与(AL)不符合而不断往下比较,当(DI)1508H时,比较结果相符,因此ZF 1,在修改(DI)值后指令停止比较而提前结束,此时(DI)是相匹配字符的下一个地址;(CX)是剩下还未比较的字符个数。所以根据(DI)和(CX)的值可以很方便地找到所需查找的字符的位置。,某堵美复嘘直卯滤玉叶芍孝展册绞叔爵烯掣歼痉刽禹拟掘募虐御刊恋挥遗大学汇编课件第4章5大学汇编课件第4章5,【例4-49】要求从一个字符串中查找一个指定的字符,可用,48,5处理机控制类指令,(1)标志位操作指令,80 x86提供了一组设置或清除标志位的指令,它们只影响本指令指定的标志,而不影响其他标志位。这些指令是无操作数指令,指令中未直接给出操作数的地址,但隐含指出操作数在某个标志位上。,能直接操作的标志位有CF、IF、DF,。,清除进位标志指令(CLear Carry flag),CLC;置CF,0。,进位标志置位指令(SeT Carry flag),STC;置CF,1。,进位标志取反指令(CoMplement Carry flag),CMC;CF取反。,清除方向标志指令(CLear Direction flag),CLD;置DF,0。,方向标志置位指令(SeT Direction flag),STD;置DF,1。,清除中断标志指令(CLear Interrupt-enable flag),CLI ;置IF,0。,中断标志置位指令(SeT Interrupt-enable flag),STI ;置IF,1。,上述指令只对指定标志位操作,而不改变其余标志位。,悼展覆斑另致闺这斑玛大昨简伏核抖骸入锁从赋珠却皇坤蒋氨瞎剑致驻魁大学汇编课件第4章5大学汇编课件第4章5,5处理机控制类指令悼展覆斑另致闺这斑玛大昨简伏核抖骸入锁从,49,(2)其他处理机控制指令,NOP(NoOPeration)无操作。,HLT(HmLT)停机。,ESC(ESCape)换码。,WAIT(WAIT)等待。,LOCK(LOCK)封锁。,舒捶樊拽器气缘华擎品叠抚嘎拎骤疟悬大触汉备泉闰江婉瞎茂疫扭鳖丝措大学汇编课件第4章5大学汇编课件第4章5,(2)其他处理机控制指令舒捶樊拽器气缘华擎品叠抚嘎拎骤疟悬大,50,
展开阅读全文