大学汇编课件第4章.ppt
《大学汇编课件第4章.ppt》由会员分享,可在线阅读,更多相关《大学汇编课件第4章.ppt(50页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、2算术运算类指令算术运算类指令算术运算类指令包括算术运算类指令包括加、减、乘、除加、减、乘、除4种指令。这类指令可种指令。这类指令可以对以对字节、字或双字数据字节、字或双字数据进行运算,参加运算的数可以是无符号进行运算,参加运算的数可以是无符号数或带符号数。由于数或带符号数。由于80 x86提供十进制数运算校正指令,因此参提供十进制数运算校正指令,因此参加运算的数也可以是加运算的数也可以是BCD码表示的十进制数。这类指令中既有双码表示的十进制数。这类指令中既有双操作数指令,也有单操作数指令。如前所述,双操作数指令的两操作数指令,也有单操作数指令。如前所述,双操作数指令的两个操作数不能同时为存储
2、器操作数,且只有源操作数可为立即数。个操作数不能同时为存储器操作数,且只有源操作数可为立即数。单操作数指令不允许使用立即数寻址方式。单操作数指令不允许使用立即数寻址方式。(1)加法运算指令)加法运算指令 ADD(ADD)加法加法ADC(ADDwithCarry)带进位加法带进位加法INC(INCrement)加加1ADD加法指令加法指令指令格式:指令格式:ADDDEST,SRC指令功能:指令功能:DEST(SRC)+(DEST),即源操作数与目的),即源操作数与目的操作数相加,其和送入目的地址中。并根据相加结果操作数相加,其和送入目的地址中。并根据相加结果设置设置FLAGS的的OF、SF、ZF
3、、AF、PF和和CF标志位标志位。该指令执行后,。该指令执行后,源操作数保持不变。源操作数保持不变。【例例4-29】加法指令的常用格式有:加法指令的常用格式有:ADDBX,SIADDDA_WORD,0F8CHADDDL,TABBX下面以指令下面以指令“ADDDL,0A4H”为例,给出该指令的相加及标为例,给出该指令的相加及标志位设置过程。设志位设置过程。设DL的内容为的内容为0E5H:结果不为零,则结果不为零,则ZF 0;结果无溢出,则结果无溢出,则OF 0;结果中有奇数个结果中有奇数个1,则,则PF 0。需要指出,溢出位需要指出,溢出位OF表示带符号数的溢出,它是根据数的符号表示带符号数的溢
4、出,它是根据数的符号及其变化来设置的。而及其变化来设置的。而CF位可以表示无符号数的溢出。位可以表示无符号数的溢出。执行下面两条指令后,标志寄存器中执行下面两条指令后,标志寄存器中CF、AF、ZF、SF和和OF、PF分别是什么状态?分别是什么状态?MOVAL,91ADDAL,0BAH在实模式下,假设(在实模式下,假设(DS)=1234H,(,(SI)=124H,(12464H)=30ABH,(,(12484H)=464H,有以下,有以下程序段:程序段:LEASI,SIMOVAX,SIMOVSI+22H,1200HLDSSI,SI+20HADDAX,SI上述程序段执行后,(上述程序段执行后,(D
5、S)=?(?(SI)=?(?(AX)=?ADC带进位加法指令带进位加法指令指令格式:指令格式:ADCDEST,SRC指令功能:指令功能:DEST(SRC)+(DEST)+CF,即在完成两个,即在完成两个操作数相加的同时,将标志位操作数相加的同时,将标志位CF的值加上,求出的和数送入目的值加上,求出的和数送入目的地址中;并根据相加的结果的地址中;并根据相加的结果设置标志位设置标志位OF、SF、ZF、AF、PF和和CF。【例例4-30】在在8086/80286中实现两个双精度数的加法。有一个中实现两个双精度数的加法。有一个32位无符号数存放在位无符号数存放在DX(高(高16位)、位)、AX(低(低
6、16位)中,若要加上位)中,若要加上常数常数76F1A23H,则用以下指令来实现:,则用以下指令来实现:ADDAX,1A23HADCDX,76FH其中第一条指令完成把其中第一条指令完成把16位常数加在位常数加在AX中,若产生进位,则记中,若产生进位,则记录在录在CF中。由中。由ADC指令在完成高指令在完成高16位相加的同时,将低位相加的同时,将低16位的位的进位也加上。进位也加上。INC加加1指令指令 指令格式:指令格式:INCDEST指令功能:指令功能:DEST(DEST)+1,即目的操作数加,即目的操作数加1后送回目的地址中,并根据执行结果设置标志位后送回目的地址中,并根据执行结果设置标志
7、位OF、SF、ZF、AF和和PF,但不影响,但不影响CF。INC指令只有一个操作数,操作数可以是字节、字指令只有一个操作数,操作数可以是字节、字或双字,且被当作无符号数。或双字,且被当作无符号数。(2)减法运算指令)减法运算指令SUB(SUBtract)减法。减法。SBB(SuBtractwithBorrow)带借位减法。带借位减法。DEC(DECrement)减减1。NEG(NEGate)求补。求补。CMP(CoMPare)比较。比较。SUB减法指令减法指令指令格式:指令格式:SUBDEST,SRC指令功能:指令功能:DEST(DEST)(SRC),即完成从目的操),即完成从目的操作数中减去
8、源操作数,其差值送入目的地址中;并按相减结作数中减去源操作数,其差值送入目的地址中;并按相减结果设置标志位果设置标志位OF、SF、ZF、AF、PF和和CF。【例例4-32】SUB指令的常用格式如下:指令的常用格式如下:SUBAL,3FHSUBBX,AX 下面以指令下面以指令“SUBAL,DAB”为例,给出该指令的相减及设置标为例,给出该指令的相减及设置标志位过程。设志位过程。设AL内容为内容为B7H,DAB字节单元内容为字节单元内容为A8H:结果不为零,则结果不为零,则ZF 0;结果无溢出,则结果无溢出,则OF 0;结果中有偶数个结果中有偶数个1,则,则PF 1。SBB带借位减法指令带借位减法
9、指令指令格式:指令格式: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。NEG求补指令求补指令
10、指令格式:指令格式:NEGDEST指令功能:指令功能:DEST0(DEST),即用零减去目的操作数,),即用零减去目的操作数,相减结果送回目的地址中;并按结果设置标志位相减结果送回目的地址中;并按结果设置标志位OF、SF、ZF、AF、PF和和CF。NEG指令属单操作数指令,操作数可以是字节、字或双指令属单操作数指令,操作数可以是字节、字或双字,且被当作补码表示的带符号数。字,且被当作补码表示的带符号数。如果字节操作数是如果字节操作数是 128、字操作数是、字操作数是 32768,在执行,在执行NEG指令后,操作数不变,但溢出标志指令后,操作数不变,但溢出标志OF置置1。这是由于。这是由于+12
11、8或或+32768超出了超出了8位或位或16位带符号数的表示范围,即产生位带符号数的表示范围,即产生了溢出。如操作数为零,求负的结果仍为零,则标志位了溢出。如操作数为零,求负的结果仍为零,则标志位CF置置0;否则;否则CF置置1。NEGALNEGBL以上指令执行后,以上指令执行后,AL中为负数中为负数 25H的补码:的补码:(AL)DBH 11011011B。BL中则为正数:(中则为正数:(BL)58H 01011000B。【例例4-34】设设AL中存放一正数:(中存放一正数:(AL)25H 00100101B。BL中存放负数中存放负数 58H的补码:(的补码:(BL)A8H 10101000
12、B。可用。可用以下指令获得以下指令获得AL、BL中数的负数:中数的负数:假设(假设(AX)=0FFFFH,有以下程序段:,有以下程序段:INCAXNEGAXDECAXNEGAX上述程序段执行后,(上述程序段执行后,(AX)=?CMP比较指令比较指令指令格式:指令格式:CMPDEST,SRC指令功能:指令功能:(DEST)(SRC),两个操作数相减后,仅按),两个操作数相减后,仅按相减结果设置标志位相减结果设置标志位OF、SF、ZF、AF、PF和和CF,而不保留两,而不保留两数相减的差。数相减的差。CMP指令与指令与SUB指令的不同之处是,运算结果不送回目的指令的不同之处是,运算结果不送回目的地
13、址中。因此地址中。因此CMP指令执行后,两个操作数都不变,只影响状态指令执行后,两个操作数都不变,只影响状态标志位。标志位。CMP指令后往往跟着一个条件转移指令指令后往往跟着一个条件转移指令,根据比较结果,根据比较结果产生不同的程序分支。例如:产生不同的程序分支。例如:CMPAL,BLJZEQLCMP指令可利用所设标志位的状态来反映两个操作数的大小。指令可利用所设标志位的状态来反映两个操作数的大小。CMP指令执行后,若指令执行后,若ZF 1,表示(,表示(DEST)(SRC)。对于)。对于无符号数,若无符号数,若CF 0,表示(,表示(DEST)(SRC);若);若CF 1,则,则(DEST)
14、()(SRC)。)。(3)乘法运算指令)乘法运算指令MUL(unsignedMULtiple)无符号数乘法。无符号数乘法。IMUL(sIgnedMULtiple)带符号数乘法。带符号数乘法。MUL无符号数乘法指令无符号数乘法指令指令格式:指令格式:MULSRC指令功能:指令功能:字节操作数字节操作数AX(AL)*(SRC)字操作数字操作数DX:AX(AX)*(SRC)其中(其中(SRC)是乘法运算的一个操作数,它只能在通用寄存)是乘法运算的一个操作数,它只能在通用寄存器或存储单元中(不能是立即数),而另一个操作数隐含在器或存储单元中(不能是立即数),而另一个操作数隐含在AL(字节乘)、(字节乘
15、)、AX(字乘)或(字乘)或EAX(双字乘)寄存器中。(双字乘)寄存器中。MUL指令只影响标志寄存器中指令只影响标志寄存器中CF、OF标志位。标志位。MUL指令指令执行后,如果乘积的高一半为执行后,如果乘积的高一半为0,即,即AH(字节乘)、(字节乘)、DX(字(字乘法)或乘法)或EAX(双字乘)全为(双字乘)全为0,则,则CF 0和和OF 0;否则;否则CF 1,OF 1(表示(表示AH、DX或或EDX中有乘积的有效数字)。中有乘积的有效数字)。IMUL带符号数乘法指令带符号数乘法指令指令格式:指令格式:IMULSRC指令功能:指令功能:与与MUL相同,但操作数和乘积必须是带符号数且用相同,
16、但操作数和乘积必须是带符号数且用补码表示,而补码表示,而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 0
17、170D,CF OF 0。(4)除法运算指令)除法运算指令DIV(unsignedDIVide)无符号数除法。无符号数除法。IDIV(sIgnedDIVide)带符号数除法。带符号数除法。DIV无符号数除法指令无符号数除法指令指令格式:指令格式:DIVSRC指令功能:指令功能:将隐含存放在将隐含存放在AX(字节除)、(字节除)、DX:AX(字除)(字除)或或EDX:EAX(双字除)中的被除数除以除数(双字除)中的被除数除以除数(SRC),除后的),除后的商和余数送入隐含指定的寄存器中。商和余数送入隐含指定的寄存器中。字节操作:字节操作:AL(AX)/(SRC)的商)的商AH(AX)/(SRC)
18、的余数)的余数字操作:字操作:AX(DX:AX)/(SRC)的商)的商DX(DX:AX)/(SRC)的余数)的余数DIV指令中的被除数和除数必须是无符号数,其商和余数也是无符指令中的被除数和除数必须是无符号数,其商和余数也是无符号数。号数。DIV指令对标志寄存器无有效标志结果。但是以下两种情况指令对标志寄存器无有效标志结果。但是以下两种情况之一,将产生之一,将产生0型中断(除法出错中断)转入除法出错中断处理。型中断(除法出错中断)转入除法出错中断处理。除数为除数为0,即(,即(SRC)=0。商溢出,即(商溢出,即(AL)中的商中的商0FFH,(,(AX)中的商中的商0FFFFHIDIV带符号数
19、除法指令带符号数除法指令指令格式:指令格式:IDIVSRC指令功能:指令功能:与与DIV相同,但操作数、商和余数必须是带符号数相同,但操作数、商和余数必须是带符号数且用补码表示,余数的符号与被除数的符号相同。且用补码表示,余数的符号与被除数的符号相同。带符号数除法的商中,最大的正数商是带符号数除法的商中,最大的正数商是+127(7FH)、)、+32767(7FFFH)或或+65535(7FFFFFFFH),),最小的负数商是最小的负数商是 127(81H)、)、32767(8001H)或或 65535(80000001H)。)。同同DIV指令一样,当除数(指令一样,当除数(SRC)0或商超出上
20、述的最大值或最或商超出上述的最大值或最小值时,均产生小值时,均产生0型中断。型中断。由于除法指令的字节操作要求被除数为由于除法指令的字节操作要求被除数为16位,字操作要求被除位,字操作要求被除数为数为32位,双字操作要求被除数为位,双字操作要求被除数为64位,因此往往需要用符号扩展位,因此往往需要用符号扩展的方法取得除法指令所需要的被除数格式。的方法取得除法指令所需要的被除数格式。【例例4-394-39】两两个个8 8位位带带符符号号数数分分别别放放在在BYTE1BYTE1、BYTE2BYTE2字字节节存存储储单单元元中中,将将BYTE1BYTE1内内容容除除以以BYTE2BYTE2内内容容,
21、商商放放在在QUOTQUOT字字节节单单元元中中,可可用以下指令实现:用以下指令实现:MOVAL,BYTE1CBWIDIVBYTE2MOVQUOT,AL假设假设DAW1和和DAW2分别是两个字单元的符号地址,请按分别是两个字单元的符号地址,请按下列要求写出指令序列:下列要求写出指令序列:(1)DAW1和和DAW2两个字数据相乘(用两个字数据相乘(用MUL)。)。MOVAX,DAW1MULDAW2(2)DAW1除以除以23(用(用DIV)。)。MOVAX,DAW1MOVBL,23DIVBL3逻辑类指令逻辑类指令这类指令包括逻辑运算指令、位测试指令、位扫描指令和移这类指令包括逻辑运算指令、位测试指
22、令、位扫描指令和移位指令。位指令。(1)逻辑运算指令)逻辑运算指令逻辑运算指令共有逻辑运算指令共有5条,其指令格式及功能分别如下:条,其指令格式及功能分别如下:AND逻辑与指令逻辑与指令指令格式:指令格式:ANDDEST,SRC指令功能:指令功能:DEST(SRC)(DEST)OR逻辑或指令逻辑或指令指令格式:指令格式:ORDEST,SRC指令功能:指令功能:DEST(SRC)(DEST)XOR逻辑异或指令逻辑异或指令指令格式:指令格式:XORDEST,SRC指令功能:指令功能:DEST(SRC)(DEST)NOT逻辑非指令逻辑非指令指令格式:指令格式:NOTDEST指令功能:指令功能:DES
23、T(DEST)TEST测试指令测试指令指令格式:指令格式:TESTDEST,SRC指令功能:(指令功能:(SRC)(DEST)上述指令对操作数都是按位进行逻辑运算的,操作数可以上述指令对操作数都是按位进行逻辑运算的,操作数可以是字节、字或双字。是字节、字或双字。NOTNOT指令对标志位无影响,其余指令对标志位无影响,其余4 4条指令影条指令影响的标志位是响的标志位是SFSF、ZFZF、PFPF,置置CFCF、OFOF为为0 0,AFAF不确定。不确定。TESTTEST指指令与令与ANDAND指令的不同之处是,运算结果不送回目的地址中。因指令的不同之处是,运算结果不送回目的地址中。因此此TEST
24、TEST指令执行后,两个操作数都不变,只影响标志位。指令执行后,两个操作数都不变,只影响标志位。这这些些指指令令常常用用于于对对操操作作数数的的某某些些位位进进行行分分离离、组组合合或或设设置置,例例如:如:ANDAL,0F0H;分离出分离出AL中的高中的高4位位ORAL,80H;将将AL中最高位置中最高位置1XORAX,AX;将将AX内容清零内容清零XORAL,01H;将将AL中最低位变反中最低位变反【例【例4-40】可用以下程序段实现将标志寄存器的第】可用以下程序段实现将标志寄存器的第8位位TF位位置置1:PUSHFPOPAXORAX,100HPUSHAXPOPF假设(假设(AX)=0FF
25、60H,有以下程序段:,有以下程序段:STCMOVDX,96XORDH,0FFHSBBAX,DX上述程序段执行后,(上述程序段执行后,(AX)=?CF=?(4)移位指令)移位指令 移位指令可按操作数的个数分为单操作数移位指令(移位指令可按操作数的个数分为单操作数移位指令(8条)条)和双操作数移位指令(和双操作数移位指令(2条)。条)。80386及其后继机型增加的双精度及其后继机型增加的双精度移位指令就是双操作数移位指令。移位指令就是双操作数移位指令。SHL(SHiftlogicalLeft)逻辑左移。逻辑左移。SAL(ShiftArithmeticLeft)算术左移。算术左移。SHR(SHif
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 大学 汇编 课件
限制150内