欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    汇编与组成第4章.ppt

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

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

    汇编与组成第4章.ppt

    第第4章章(5)12算术运算类指令算术运算类指令算术运算类指令包括加、减、乘、除算术运算类指令包括加、减、乘、除4种指令。这类指令可种指令。这类指令可以对字节、字或双字数据进行运算,参加运算的数可以是无符号以对字节、字或双字数据进行运算,参加运算的数可以是无符号数或带符号数。由于数或带符号数。由于80 x86提供十进制数运算校正指令,因此参提供十进制数运算校正指令,因此参加运算的数也可以是加运算的数也可以是BCD码表示的十进制数。这类指令中既有双码表示的十进制数。这类指令中既有双操作数指令,也有单操作数指令。如前所述,双操作数指令的两操作数指令,也有单操作数指令。如前所述,双操作数指令的两个操作数不能同时为存储器操作数,且只有源操作数可为立即数。个操作数不能同时为存储器操作数,且只有源操作数可为立即数。单操作数指令不允许使用立即数寻址方式。单操作数指令不允许使用立即数寻址方式。(1)加法运算指令)加法运算指令 ADD(ADD)加法加法ADC(ADDwithCarry)带进位加法带进位加法INC(INCrement)加加1XADD(eXchangeandADD)交换并相加交换并相加2ADD加法指令加法指令指令格式:指令格式:ADDDEST,SRC指令功能:指令功能:DEST(SRC)+(DEST),即源操作数与目的),即源操作数与目的操作数相加,其和送入目的地址中。并根据相加结果操作数相加,其和送入目的地址中。并根据相加结果设置设置FLAGS的的OF、SF、ZF、AF、PF和和CF标志位标志位。该指令执行后,。该指令执行后,源操作数保持不变。源操作数保持不变。【例例4-29】加法指令的常用格式有:加法指令的常用格式有:ADDBX,SIADDDA_WORD,0F8CHADDDL,TABBXADDEAX,EDX 3下面以指令下面以指令“ADDDL,0A4H”为例,给出该指令的相加及标为例,给出该指令的相加及标志位设置过程。设志位设置过程。设DL的内容为的内容为0E5H:结果不为零,则结果不为零,则ZF 0;结果无溢出,则结果无溢出,则OF 0;结果中有奇数个结果中有奇数个1,则,则PF 0。需要指出,溢出位需要指出,溢出位OF表示带符号数的溢出,它是根据数的符号表示带符号数的溢出,它是根据数的符号及其变化来设置的。而及其变化来设置的。而CF位可以表示无符号数的溢出。位可以表示无符号数的溢出。4ADC带进位加法指令带进位加法指令指令格式:指令格式:ADCDEST,SRC指令功能:指令功能:DEST(SRC)+(DEST)+CF,即在完成两个,即在完成两个操作数相加的同时,将标志位操作数相加的同时,将标志位CF的值加上,求出的和数送入目的值加上,求出的和数送入目的地址中;并根据相加的结果的地址中;并根据相加的结果设置标志位设置标志位OF、SF、ZF、AF、PF和和CF。【例例4-30】在在8086/80286中实现两个双精度数的加法。有一个中实现两个双精度数的加法。有一个32位无符号数存放在位无符号数存放在DX(高(高16位)、位)、AX(低(低16位)中,若要加上位)中,若要加上常数常数76F1A23H,则用以下指令来实现:,则用以下指令来实现:ADDAX,1A23HADCDX,76FH其中第一条指令完成把其中第一条指令完成把16位常数加在位常数加在AX中,若产生进位,则记中,若产生进位,则记录在录在CF中。由中。由ADC指令在完成高指令在完成高16位相加的同时,将低位相加的同时,将低16位的位的进位也加上。进位也加上。5INC加加1指令指令 指令格式:指令格式:INCDEST指令功能:指令功能:DEST(DEST)+1,即目的操作数加,即目的操作数加1后送回目后送回目的地址中,并根据执行结果设置标志位的地址中,并根据执行结果设置标志位OF、SF、ZF、AF和和PF,但不影响,但不影响CF。INC指令只有一个操作数,操作数可以是字节、字或双字,指令只有一个操作数,操作数可以是字节、字或双字,且被当作无符号数。且被当作无符号数。XADD交换并相加指令交换并相加指令指令格式:指令格式:XADDDEST,SRC指令功能:指令功能:TEMP(SRC)+(DEST)SRC(DEST)DEST(TEMP)该指令的源操作数只能用寄存器寻址方式,目的操作数则可用寄该指令的源操作数只能用寄存器寻址方式,目的操作数则可用寄存器或任一种存储器寻址方式。对标志位的影响同存器或任一种存储器寻址方式。对标志位的影响同ADD指令,且指令,且只能用于只能用于80486及其后继机型。及其后继机型。【例例4-31】指令指令“XADDBL,DL”执行前,如果(执行前,如果(BL)12H,(DL)02H,则指令执行后(,则指令执行后(BL)14H,(,(DL)12H。6(2)减法运算指令)减法运算指令SUB(SUBtract)减法。减法。SBB(SuBtractwithBorrow)带借位减法。带借位减法。DEC(DECrement)减减1。NEG(NEGate)求补。求补。CMP(CoMPare)比较。比较。CMPXCHG(CoMPareandeXCHanGe)比较并交换。比较并交换。CMPXCHG8B(CoMPareandeXCHanGe8Byte)比较并交换比较并交换8字节。字节。7SUB减法指令减法指令指令格式:指令格式:SUBDEST,SRC指令功能:指令功能:DEST(DEST)(SRC),即完成从目的操作),即完成从目的操作数中减去源操作数,其差值送入目的地址中;并按相减结果设置数中减去源操作数,其差值送入目的地址中;并按相减结果设置标志位标志位OF、SF、ZF、AF、PF和和CF。【例例4-32】SUB指令的常用格式如下:指令的常用格式如下:SUBAL,3FHSUBBX,AXSUBDA,EDX8 下面以指令下面以指令“SUBAL,DAB”为例,给出该指令的相减及设置标为例,给出该指令的相减及设置标志位过程。设志位过程。设AL内容为内容为B7H,DAB字节单元内容为字节单元内容为A8H:结果不为零,则结果不为零,则ZF 0;结果无溢出,则结果无溢出,则OF 0;结果中有偶数个结果中有偶数个1,则,则PF 1。9SBB带借位减法指令带借位减法指令指令格式:指令格式:SBBDEST,SRC指令功能:指令功能:DEST(DEST)(SRC)CF,即,即在完成两个操作数相减的同时,还要减去借位位在完成两个操作数相减的同时,还要减去借位位CF,相减结果送入目的地址中;并设置标志位相减结果送入目的地址中;并设置标志位OF、SF、ZF、AF、PF和和CF。DEC减减1指令指令指令格式:指令格式:DECDEST指令功能:指令功能:DEST(DEST)1,即目的操作数减,即目的操作数减1后送后送回目的地址中;并根据执行结果设置标志位回目的地址中;并根据执行结果设置标志位OF、SF、ZF、AF和和PF,但不影响,但不影响CF。10NEG求补指令求补指令指令格式:指令格式:NEGDEST指令功能:指令功能:DEST0(DEST),即用零减去目的操作数,),即用零减去目的操作数,相减结果送回目的地址中;并按结果设置标志位相减结果送回目的地址中;并按结果设置标志位OF、SF、ZF、AF、PF和和CF。NEG指令属单操作数指令,操作数可以是字节、字或双字,指令属单操作数指令,操作数可以是字节、字或双字,且被当作补码表示的带符号数。且被当作补码表示的带符号数。如果字节操作数是如果字节操作数是 128、字操作数是、字操作数是 32768,在执行,在执行NEG指指令后,操作数不变,但溢出标志令后,操作数不变,但溢出标志OF置置1。这是由于。这是由于+128或或+32768超出了超出了8位或位或16位带符号数的表示范围,即产生了溢出。如操作位带符号数的表示范围,即产生了溢出。如操作数为零,求负的结果仍为零,则标志位数为零,求负的结果仍为零,则标志位CF置置0;否则;否则CF置置1。11NEGALNEGBL以上指令执行后,以上指令执行后,AL中为负数中为负数 25H的补码:的补码:(AL)DBH 11011011B。BL中则为正数:(中则为正数:(BL)58H 01011000B。【例例4-34】设设AL中存放一正数:(中存放一正数:(AL)25H 00100101B。BL中存放负数中存放负数 58H的补码:(的补码:(BL)A8H 10101000B。可用以下。可用以下指令获得指令获得AL、BL中数的负数:中数的负数:12CMP比较指令比较指令指令格式:指令格式:CMPDEST,SRC指令功能:指令功能:(DEST)(SRC),两个操作数相减后,仅按),两个操作数相减后,仅按相减结果设置标志位相减结果设置标志位OF、SF、ZF、AF、PF和和CF,而不保留两,而不保留两数相减的差。数相减的差。CMP指令与指令与SUB指令的不同之处是,运算结果不送回目的指令的不同之处是,运算结果不送回目的地址中。因此地址中。因此CMP指令执行后,两个操作数都不变,只影响状态指令执行后,两个操作数都不变,只影响状态标志位。标志位。CMP指令后往往跟着一个条件转移指令,根据比较结果指令后往往跟着一个条件转移指令,根据比较结果产生不同的程序分支。例如:产生不同的程序分支。例如:CMPAL,BLJZEQLCMP指令可利用所设标志位的状态来反映两个操作数的大小。指令可利用所设标志位的状态来反映两个操作数的大小。CMP指令执行后,若指令执行后,若ZF 1,表示(,表示(DEST)(SRC)。对于)。对于无符号数,若无符号数,若CF 0,表示(,表示(DEST)(SRC);若);若CF 1,则,则(DEST)()(SRC)。)。13CMPXCHG比较并交换指令比较并交换指令指令格式:指令格式:CMPXCHGDEST,SRC指令功能:指令功能:累加器累加器AC与(与(DEST)相比较,如果()相比较,如果(AC)(DEST),),则则ZF1,DEST(SRC););否则否则ZF0,AC(DEST)该指令只能用于该指令只能用于80486及其后继机型。累加器可为及其后继机型。累加器可为AL、AX或或EAX寄存器。寄存器。SRC只能用只能用8位、位、16位或位或32位寄存器。位寄存器。DEST则可用则可用寄存器或任一种存储器寻址方式。该指令对其他标志位的影响与寄存器或任一种存储器寻址方式。该指令对其他标志位的影响与CMP指令相同。指令相同。14 CMPXCHG8B比较并交换比较并交换8字节指令字节指令指令格式:指令格式:CMPXCHG8BDEST指令功能:指令功能:EDX:EAX与与DEST相比较,如果(相比较,如果(EDX:EAX)(DEST),),则则ZFl,DEST(ECX:EBX)否则否则ZF0,EDX:EAX(DEST)该指令只影响该指令只影响ZF位,但不影响其他标志位。该指令只能用于位,但不影响其他标志位。该指令只能用于Pentium及其后继机型。操作数均为及其后继机型。操作数均为64位数,目的操作数必须采位数,目的操作数必须采用存储器寻址方式确定一个用存储器寻址方式确定一个64位数。位数。15(3)乘法运算指令)乘法运算指令MUL(unsignedMULtiple)无符号数乘法。无符号数乘法。IMUL(sIgnedMULtiple)带符号数乘法。带符号数乘法。MUL无符号数乘法指令无符号数乘法指令指令格式:指令格式:MULSRC指令功能:指令功能:字节操作数字节操作数AX(AL)*(SRC)字操作数字操作数DX:AX(AX)*(SRC)双字操作数双字操作数EDX:EAX(EAX)*(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中有乘积的有效数字)。中有乘积的有效数字)。16IMUL带符号数乘法指令带符号数乘法指令指令格式:指令格式:IMULSRC指令功能:指令功能:与与MUL相同,但操作数和乘积必须是带符号数且用相同,但操作数和乘积必须是带符号数且用补码表示,而补码表示,而MUL的操作数和乘积均是无符号数。的操作数和乘积均是无符号数。执行执行IMUL指令后,如果乘积的高一半是低一半的符号扩展,指令后,如果乘积的高一半是低一半的符号扩展,则则CF和和OF均为均为0;否则均为;否则均为1。【例例4-35】设(设(AL)0B4H 76D,(,(BL)11H 17D;执行指令执行指令“IMULBL”后:后:乘积为(乘积为(AX)0FAF4H 1292D,CF OF 1。【例例4-36】设(设(AL)0AH 10D,(,(BL)11H 17D;执行指令执行指令“MULBL“后:后:乘积为(乘积为(AX)00AAH 0170D,CF OF 0。17(4)除法运算指令)除法运算指令DIV(unsignedDIVide)无符号数除法。无符号数除法。IDIV(sIgnedDIVide)带符号数除法。带符号数除法。DIV无符号数除法指令无符号数除法指令指令格式:指令格式:DIVSRC指令功能:指令功能:将隐含存放在将隐含存放在AX(字节除)、(字节除)、DX:AX(字除)(字除)或或EDX:EAX(双字除)中的被除数除以除数(双字除)中的被除数除以除数(SRC),除后的),除后的商和余数送入隐含指定的寄存器中。商和余数送入隐含指定的寄存器中。字节操作:字节操作:AL(AX)/(SRC)的商)的商AH(AX)/(SRC)的余数)的余数字操作:字操作:AX(DX:AX)/(SRC)的商)的商DX(DX:AX)/(SRC)的余数)的余数双字操作:双字操作:EAX(EDX:EAX)/(SRC)的商)的商EDX(EDX:EAX)/(SRC)的余数)的余数DIV指令中的被除数和除数必须是无符号数,其商和余数也指令中的被除数和除数必须是无符号数,其商和余数也是无符号数。是无符号数。18 DIV指令对标志寄存器无有效标志结果。但是以下两种情况指令对标志寄存器无有效标志结果。但是以下两种情况之一,将产生之一,将产生0型中断(除法出错中断)转入除法出错中断处理。型中断(除法出错中断)转入除法出错中断处理。除数为除数为0,即(,即(SRC)=0。商溢出,即(商溢出,即(AL)中的商中的商0FFH,(,(AX)中的商中的商0FFFFH或(或(EAX)中的商中的商0FFFFFFFFH。IDIV带符号数除法指令带符号数除法指令指令格式:指令格式:IDIVSRC指令功能:指令功能:与与DIV相同,但操作数、商和余数必须是带符号数相同,但操作数、商和余数必须是带符号数且用补码表示,余数的符号与被除数的符号相同。且用补码表示,余数的符号与被除数的符号相同。带符号数除法的商中,最大的正数商是带符号数除法的商中,最大的正数商是+127(7FH)、)、+32767(7FFFH)或或+65535(7FFFFFFFH),),最小的负数商是最小的负数商是 127(81H)、)、32767(8001H)或或 65535(80000001H)。)。同同DIV指令一样,当除数(指令一样,当除数(SRC)0或商超出上述的最大值或最或商超出上述的最大值或最小值时,均产生小值时,均产生0型中断。型中断。19 由于除法指令的字节操作要求被除数为由于除法指令的字节操作要求被除数为16位,字操作要求被除位,字操作要求被除数为数为32位,双字操作要求被除数为位,双字操作要求被除数为64位,因此往往需要用符号扩展位,因此往往需要用符号扩展的方法取得除法指令所需要的被除数格式。的方法取得除法指令所需要的被除数格式。【例例4-394-39】两两个个8 8位位带带符符号号数数分分别别放放在在BYTE1BYTE1、BYTE2BYTE2字字节节存存储储单单元元中中,将将BYTE1BYTE1内内容容除除以以BYTE2BYTE2内内容容,商商放放在在QUOTQUOT字字节节单单元元中中,可可用以下指令实现:用以下指令实现:MOVAL,BYTE1CBWIDIVBYTE2MOVQUOT,AL20(5)BCD码校正指令码校正指令80 x86CPU对用对用BCD码表示的十进制数进行运算所采用的方码表示的十进制数进行运算所采用的方法是:先用二进制数的加、减、乘、除指令对法是:先用二进制数的加、减、乘、除指令对BCD码进行运算,码进行运算,紧接着用紧接着用BCD码校正指令对运算结果进行校正。码校正指令对运算结果进行校正。80 x86指令系统把指令系统把BCD码分为两种格式:码分为两种格式:组合型(压缩型、装组合型(压缩型、装配型、配型、PACKED)和非组合型(非压缩型、拆散型、)和非组合型(非压缩型、拆散型、UNPACKED)。)。非组合型加法校正指令非组合型加法校正指令AAA(ASCIIAdjustforAddition)指令格式:指令格式:AAA 指令功能:指令功能:若若AL中低中低4位的值位的值9,且,且AF 0,则将,则将AL中高中高4位清零,位清零,AF、CF置置0。若若AL中低中低4位的值位的值9,或,或AF 1,则,则AL(AL)+6,AH(AH)+1,且将,且将AL中高中高4位清零,位清零,AF、CF置置1。21例例如如从从键键盘盘直直接接输输入入两两个个一一位位十十进进制制数数,然然后后相相加加,其其结结果果放放在在AH、AL中,实现这个操作的程序段如下:中,实现这个操作的程序段如下:MOVAH,1;从键盘输入一位十进制数到从键盘输入一位十进制数到AL中中INT21HMOVBL,ALMOVAH,1;从键盘输入另一个十进制数到从键盘输入另一个十进制数到AL中中INT21HADDAL,BLAAA在执行在执行ADD指令前,指令前,AL、BL中都是一位非组合型中都是一位非组合型BCD码(实码(实际上是际上是ASCII码表示的十进制数)。两个非组合型码表示的十进制数)。两个非组合型BCD码相加后,码相加后,再用再用AAA指令进行校正。这时指令进行校正。这时AH、AL中分别保存十进制和数的高中分别保存十进制和数的高位和低位,且它们也分别是非组合型位和低位,且它们也分别是非组合型BCD码形式。码形式。22组合型加法校正指令组合型加法校正指令DAA(DecimalAdjustforAddition)指令格式:指令格式:DAA指令功能:指令功能:如果如果AL中低中低4位位9或或AF=1,则,则AL(AL)+6,AF1。如果如果AL中高中高4位位9或或CF=1,则,则AL(AL)+60H,CF1。例例如如实实现现两两个个4 4位位十十进进制制数数的的加加法法4678+25564678+2556,结结果果存存放放在在DXDX中中,可编制如下程序段:可编制如下程序段:MOVAL,78H;低字节低字节BCD码相加码相加ADDAL,56HDAA;低字节和数校正低字节和数校正MOVDL,ALMOVAL,46H;高字节高字节BCD码相加码相加ADCAL,25HDAA;高字节和数校正高字节和数校正MOVDH,AL23 非组合型减法校正指令非组合型减法校正指令AAS(ASCIIAdjustforSubtraction)指令格式:指令格式:AAS指令功能:指令功能:若若AL中低中低4位的值位的值9,且,且AF=0,则将,则将AL中高中高4位清零,位清零,AF、CF置置0。若若AL中低中低4位位9或或AF 1,则,则AL(AL)6和和AH(AH)1,且将,且将AL中高中高4位清零,位清零,CF、AF置置1。组合型减法校正指令组合型减法校正指令DAS(DecimalAdjustforSubtraction)指令格式:指令格式:DAS指令功能:指令功能:若若AL中低中低4位位9或或AF 1,则,则AL(AL)6,AF1。若若AL中高中高4位位9或或CF 1,则,则AL(AL)60H,CF1。243逻辑类指令逻辑类指令这类指令包括逻辑运算指令、位测试指令、位扫描指令和移这类指令包括逻辑运算指令、位测试指令、位扫描指令和移位指令。位指令。(1)逻辑运算指令)逻辑运算指令逻辑运算指令共有逻辑运算指令共有5条,其指令格式及功能分别如下:条,其指令格式及功能分别如下:AND逻辑逻辑与与指令指令指令格式:指令格式:ANDDEST,SRC指令功能:指令功能:DEST(SRC)(DEST)OR逻辑逻辑或或指令指令指令格式:指令格式:ORDEST,SRC指令功能:指令功能:DEST(SRC)(DEST)25 XOR逻辑逻辑异或异或指令指令指令格式:指令格式:XORDEST,SRC指令功能:指令功能:DEST(SRC)(DEST)NOT逻辑逻辑非非指令指令指令格式:指令格式:NOTDEST指令功能:指令功能:DEST(DEST)TEST测试指令测试指令指令格式:指令格式:TESTDEST,SRC指令功能:(指令功能:(SRC)(DEST)上述指令对操作数都是按位进行逻辑运算的,操作数可以上述指令对操作数都是按位进行逻辑运算的,操作数可以是字节、字或双字。是字节、字或双字。NOTNOT指令对标志位无影响,其余指令对标志位无影响,其余4 4条指令影条指令影响的标志位是响的标志位是SFSF、ZFZF、PFPF,置置CFCF、OFOF为为0 0,AFAF不确定。不确定。TESTTEST指指令与令与ANDAND指令的不同之处是,运算结果不送回目的地址中。因指令的不同之处是,运算结果不送回目的地址中。因此此TESTTEST指令执行后,两个操作数都不变,只影响标志位。指令执行后,两个操作数都不变,只影响标志位。26这这些些指指令令常常用用于于对对操操作作数数的的某某些些位位进进行行分分离离、组组合合或或设设置置,例例如:如:ANDAL,0F0H;分离出分离出AL中的高中的高4位位ORAL,80H;将将AL中最高位置中最高位置1XORAX,AX;将将AX内容清零内容清零XORAL,01H;将将AL中最低位变反中最低位变反【例【例4-40】可用以下程序段实现将标志寄存器的第】可用以下程序段实现将标志寄存器的第8位位TF位位置置1:PUSHF;POPAXORAX,100HPUSHAXPOPF27(2)位测试指令)位测试指令80386及其后继机型增加了本组指令。及其后继机型增加了本组指令。BT(BitTest)位测试。位测试。BTS(BitTestandSet)位测试并置位测试并置1。BTR(BitTestandReset)位测试并置位测试并置0。BTC(BitTestandComplement)位测试并变反。位测试并变反。BT位测试指令位测试指令指令格式:指令格式:BTDEST,SRC指令功能:指令功能:把目的操作数中由源操作数所指定位的值送往标志把目的操作数中由源操作数所指定位的值送往标志位位CF。BTS位测试并置位测试并置1指令指令指令格式:指令格式:BTSDEST,SRC指令功能:指令功能:把目的操作数中由源操作数所指定位的值送往标志把目的操作数中由源操作数所指定位的值送往标志位位CF,并将目的操作数中的该位置,并将目的操作数中的该位置1。28 BTR位测试并置位测试并置0指令指令指令格式:指令格式:BTRDEST,SRC指令功能:指令功能:把目的操作数中由源操作数所指定位的值送往标志把目的操作数中由源操作数所指定位的值送往标志位位CF,并将目的操作数中的该位置,并将目的操作数中的该位置0。BTC位测试并变反指令位测试并变反指令指令格式:指令格式:BTCDEST,SRC指令功能:指令功能:把目的操作数中由源操作数所指定位的值送往标志把目的操作数中由源操作数所指定位的值送往标志位位CF,并将目的操作数中的该位变反。,并将目的操作数中的该位变反。本组指令影响本组指令影响CFCF值,其他标志位则无定义。值,其他标志位则无定义。【例【例4-42】指令指令“BTAX,4”测试测试AX寄存器的位寄存器的位4。如指令执行前。如指令执行前(AX)=1234H,则指令执行后(则指令执行后(CF)=1;如指令执行前如指令执行前(AX)=1224H,则指令执行后(则指令执行后(CF)=0。29(3)位扫描指令)位扫描指令80386及其后继机型增加了本组指令。及其后继机型增加了本组指令。BSF(BitScanForward)正向位扫描。正向位扫描。BSR(BitScanReverse)反向位扫描。反向位扫描。BSF正向位扫描指令正向位扫描指令指令格式:指令格式:BSFREG,SRC指令功能:指令功能:指令从位指令从位0开始自右向左扫描源操作数,目的是检索开始自右向左扫描源操作数,目的是检索第一个为第一个为1的位。如遇到第一个为的位。如遇到第一个为1的位则将的位则将ZF位置位置0,并把该位,并把该位的位置装入目的寄存器中;如源操作数为的位置装入目的寄存器中;如源操作数为0,则将,则将ZF位置位置1,目的,目的寄存器无定义。寄存器无定义。30 BSR反向位扫描指令反向位扫描指令指令格式:指令格式:BSRREG,SRC指令功能:指令功能:指令从最高位开始自左向右扫描源操作数,目的是指令从最高位开始自左向右扫描源操作数,目的是检索第一个为检索第一个为1的位。该指令除方向与的位。该指令除方向与BSF相反外,其他规定均相反外,其他规定均与与BSF相同。因此它们之间的差别是相同。因此它们之间的差别是BSF指令检索从低位开始第指令检索从低位开始第一个出现的一个出现的1,而,而BSR则检索从高位开始第一个出现的则检索从高位开始第一个出现的1。【例【例4-43】BSFECX,EAXBSREDX,EAX如指令执行前(如指令执行前(EAX)=30000000H,则该数中有两个则该数中有两个1位并出位并出现于位位置为现于位位置为29和和28处。处。BSF执行后,(执行后,(ECX)=28D;BSR执执行后,(行后,(EDX)=29D,ZF位应为位应为0。31(4)移位指令)移位指令 移位指令可按操作数的个数分为单操作数移位指令(移位指令可按操作数的个数分为单操作数移位指令(8条)条)和双操作数移位指令(和双操作数移位指令(2条)。条)。80386及其后继机型增加的双精度及其后继机型增加的双精度移位指令就是双操作数移位指令。移位指令就是双操作数移位指令。SHL(SHiftlogicalLeft)逻辑左移。逻辑左移。SAL(ShiftArithmeticLeft)算术左移。算术左移。SHR(SHiftlogicalRight)逻辑右移。逻辑右移。SAR(ShiftArithmeticRight)算术右移。算术右移。ROL(ROtateLeft)循环左移。循环左移。ROR(ROtateRight)循环右移。循环右移。RCL(RotateLeftthroughCarry)带进位循环左移。带进位循环左移。RCR(RotateRightthroughCarry)带进位循环右移。带进位循环右移。SHLD(SHiftLeftDouble)双精度左移。双精度左移。SHRD(SHiftRightDouble)双精度右移。双精度右移。32单操作数移位指令单操作数移位指令 这种移位指令共有这种移位指令共有8条,它们可以对条,它们可以对通用寄存器通用寄存器或或存储单元存储单元中的操作数进行指定移位,即一次可只移一位或按中的操作数进行指定移位,即一次可只移一位或按CL中的内容中的内容规定移位次数(位数)。规定移位次数(位数)。移位指令可分为:算术移位指令、逻辑移位指令可分为:算术移位指令、逻辑移位指令和循环移位指令。移位指令和循环移位指令。这这8条指令有如下共同点:条指令有如下共同点:具有相同的指令格式具有相同的指令格式OPRDEST,COUNT。每条指令都是单操作数指令,即只需一个操作数每条指令都是单操作数指令,即只需一个操作数DEST。DEST只能是只能是8/16/32位通用寄存器或存储器操作数位通用寄存器或存储器操作数,不能是立即不能是立即数数。但只有。但只有80386及其后继机型才能使用及其后继机型才能使用32位操作数。位操作数。COUNT表示移位次数表示移位次数对于对于8086/80286,移位一次,移位一次,COUNT可可用常数用常数1替代替代;移位;移位多次,则多次,则必须必须用用CL替代,替代,CL中存放移位次数中存放移位次数。对于。对于80386及其后继机型,及其后继机型,COUNT还可以是还可以是8位立即数,可指位立即数,可指定定131的移位次数。的移位次数。33a.算术移位指令算术移位指令指令格式:指令格式:算术左移指令算术左移指令SALDEST,COUNT算术右移指令算术右移指令SARDEST,COUNT指令功能:指令功能:算术左移指令将算术左移指令将DEST指定的指定的8/16/32位操作数左移位操作数左移COUNT次。次。最高位移入最高位移入CF中,最低位补中,最低位补0,移位操作如图(,移位操作如图(a)所示。算术右移指令将所示。算术右移指令将DEST指定的指定的8/16/32位操作数右移位操作数右移COUNT次。次。右移时,最高符号位保持不变,连同符号位依次右右移时,最高符号位保持不变,连同符号位依次右移,最低位移入移,最低位移入CF中中,如图(,如图(b)所示。)所示。34 算算术术移移位位指指令令主主要要用用于于对对带带符符号号数数的的移移位位,左左移移一一位位相相当当于于乘乘2;右移一位相当于;右移一位相当于除除2。算术移位后应保持该数的符号不变。算术移位后应保持该数的符号不变。符号位发生变化,则将符号位发生变化,则将OF置置1例例 如如:(AL)11000001B(63的的 补补 码码),(BL)10111111B(负负数数 65的的补补码码)。以以下下指指令令将将AL、BL中中的的数数左左移移一一位:位:SALAL,1SALBL,1以以上上指指令令执执行行后后,(AL)10000010B即即 126的的补补码码,不不溢溢出出OF 0,结结果果符符合合倍倍增增关关系系;而而(BL)01111110B,左左移移后后发发生生溢出,则溢出,则OF 1,因此因此BL内容不再符合倍增关系。内容不再符合倍增关系。通常算术移位指令用于实现带符号数的简单乘除运算,其执通常算术移位指令用于实现带符号数的简单乘除运算,其执行时间比用乘除指令短得多。行时间比用乘除指令短得多。35 b.逻辑移位指令逻辑移位指令指令格式:指令格式:逻辑左移指令逻辑左移指令SHLDEST,COUNT逻辑右移指令逻辑右移指令SHRDEST,COUNT指令功能:指令功能:将将DEST指定的指定的8/16/32位寄存器或存储器操作数移位寄存器或存储器操作数移位位COUNT次。次。SHL实现将操作数左移,最高位移入实现将操作数左移,最高位移入CF中,最低位补中,最低位补0,如图(如图(a)所示。)所示。SHR实现将操作数右移,最低位移入实现将操作数右移,最低位移入CF中,最高位补中,最高位补0,如图(如图(b)所示。)所示。36c.循环移位指令循环移位指令指令格式:指令格式:循环左移指令循环左移指令ROL DEST,COUNT循环右移指令循环右移指令 RORDEST,COUNT带进位循环左移指令带进位循环左移指令RCL DEST,COUNT带进位循环右移指令带进位循环右移指令RCRDEST,COUNT指令功能:指令功能:将将DEST指定的指定的8/16/32位寄存器或存储器操作数移位位寄存器或存储器操作数移位COUNT次。次。ROL/ROR实现将操作数循环左移实现将操作数循环左移/右移。右移。RCL/RCR实现将操作数和实现将操作数和CF一起循环左移一起循环左移/右移。右移。受影响的状态标志位:受影响的状态标志位:CF、OF。CF存放每次移出的位。如果移存放每次移出的位。如果移位指令只移一位,且移位前后操作数的位指令只移一位,且移位前后操作数的符号位发生变化,则将符号位发生变化,则将OF置置1;否则;否则OF置置0。如移位次数大于。如移位次数大于1,则,则OF不确定。不确定。37循环移位指令的移位操作如下图所示:循环移位指令的移位操作如下图所示:当多字节或多字数据进行移位时,常用到带进位循环移位指令。当多字节或多字数据进行移位时,常用到带进位循环移位指令。38【例例4-46】由由3个个字字构构成成的的一一个个无无符符号号数数从从高高位位到到低低位位依依次次存存放放在在M+4,M+2,M字字单单元元中中,若若要要将将该该数数右右移移一一位位,则则可可用用以以下下程序段实现:程序段实现:SHRM+4,1RCRM+2,1RCRM,1如下图所示,如下图所示,SHR指令将指令将M+4字单元的最低位移至字单元的最低位移至CF中。第中。第2条指令条指令RCR将将CF与与M+2字单元构成一个字单元构成一个17位的数进行一次循环右位的数进行一次循环右移,将移,将M+4单元右移出的位通过单元右移出的位通过CF移至移至M+2单元的最高位,而单元的最高位,而M+2中的最低位又移至中的最低位又移至CF。在第在第3条指令执行后,就完成将条指令执行后,就完成将3个字的数右个字的数右移一位。移一位。39双操作数移位指令双操作数移位指令80386及其后继机型可以使用本组指令。及其后继机型可以使用本组指令。a.SHLD双精度左移指令双精度左移指令指令格式:指令格式:SHLDDEST,SRC,COUNT指令功能:指令功能:将将DEST指定的指定的8/16/32位寄存器或存储器操作数左移位寄存器或存储器操作数左移COUNT次,次,同时将同时将SRCSRC指定寄存器的高位依次左移到指定寄存器的高位依次左移到DESTDEST的低位中,且的低位中,且SRCSRC内容保持不变内容保持不变。如图(如图(a a)所示。所示。b.SHRD双精度右移指令双精度右移指令指令格式:指令格式:SHRDDEST,SRC,COUNT指令功能:指令功能:将将DEST指定的指定的8/16/32位寄存器或存储器操作数右移位寄存器或存储器操作数右移COUNT次,次,同时将同时将SRCSRC指定寄存器的低位依次右移到指定寄存器的低位依次右移到DESTDEST的高位中,且的高位中,且SRCSRC内容保持不变内容保持不变。如图(如图(b)所示。)所示。40【例【例4-48】SHLDEBX,ECX,16如指令执行前如指令执行前(EBX)12345678H,(,(ECX)13572468H,则指令执行后则指令执行后(EBX)56781357H,(,(ECX)13572468H,CF 0。这是一组双操作数指令,其中这是一组双操作数指令,其中DEST可以用除立即数以外的任可以用除立即数以外的任一种寻址方式指定字或双字操作数一种寻址方式指定字或双字操作数。SRC则只能使用寄存器寻址方则只能使用寄存器寻址方式指定与目的操作数相同长度的字或双字式指定与目的操作数相同长度的字或双字。COUNT用来指定移位用来指定移位次数,它可以是一个次数,它可以是一个8位的立即数位的立即数,也可以是,也可以是CL,用其内容存放移用其内容存放移位次数。移位次数的范围应为位次数。移位次数的范围应为131,对于大于,对于大于31的数,机器则自的数,机器则自动取模动取模32的值来取代。的值来取代。414串操作类指令串操作类指令MOVS(MOVeString)串传送。串传送。CMPS(CoMPareString)串比较。串比较。SCAS(SCAnString)串扫描。串扫描。LODS(LOaDfromString)取串。取串。STOS(STOreintoString)存串。存串。INS(INput

    注意事项

    本文(汇编与组成第4章.ppt)为本站会员(wuy****n92)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

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




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开