大学汇编课件第4章5

上传人:kms****20 文档编号:51274509 上传时间:2018-08-13 格式:PPT 页数:50 大小:516KB
返回 下载 相关 举报
大学汇编课件第4章5_第1页
第1页 / 共50页
大学汇编课件第4章5_第2页
第2页 / 共50页
大学汇编课件第4章5_第3页
第3页 / 共50页
大学汇编课件第4章5_第4页
第4页 / 共50页
大学汇编课件第4章5_第5页
第5页 / 共50页
点击查看更多>>
资源描述

《大学汇编课件第4章5》由会员分享,可在线阅读,更多相关《大学汇编课件第4章5(50页珍藏版)》请在金锄头文库上搜索。

1、2算术运算类指令算术运算类指令包括加、减、乘、除4种指令。这类指令可 以对字节、字或双字数据进行运算,参加运算的数可以是无符号 数或带符号数。由于80x86提供十进制数运算校正指令,因此参 加运算的数也可以是BCD码表示的十进制数。这类指令中既有双 操作数指令,也有单操作数指令。如前所述,双操作数指令的两 个操作数不能同时为存储器操作数,且只有源操作数可为立即数 。单操作数指令不允许使用立即数寻址方式。(1)加法运算指令ADD(ADD) 加法ADC(ADD with Carry) 带进位加法INC(INCrement) 加1 ADD加法指令指令格式:ADD DEST,SRC指令功能:DEST

2、(SRC)+( DEST),即源操作数与目的 操作数相加,其和送入目的地址中。并根据相加结果设置 FLAGS的OF、SF、ZF、AF、PF和CF标志位。该指令执行后, 源操作数保持不变。【例4-29】 加法指令的常用格式有: ADD BX,SI ADD DA_WORD,0F8CH ADD DL,TABBX下面以指令“ADD DL,0A4H”为例,给出该指令的相加及标 志位设置过程。设DL的内容为0E5H:结果不为零,则ZF 0; 结果无溢出,则OF 0;结果中有奇数个1,则PF 0。 需要指出,溢出位OF表示带符号数的溢出,它是根据数的符号 及其变化来设置的。而CF位可以表示无符号数的溢出。执

3、行下面两条指令后,标志寄存器中CF、AF、ZF、SF 和OF、PF分别是什么状态?MOV AL,91 ADD AL,0BAH在实模式下,假设(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)=? ADC带进位加法指令指令格式:ADC DEST,SRC指令功能:DEST (SRC)+( DEST)+ CF,即在完成两个 操作数相加的同时,将标志位CF的值加上,求

4、出的和数送入目 的地址中;并根据相加的结果设置标志位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位的 进位也加上。 INC加1指令指令格式:INC DEST指令功能:DEST (DEST)+ 1,即目的操作数加1 后送回目的地址中,并根据执行结果设置标志位

5、OF、 SF、ZF、AF和PF,但不影响CF。INC指令只有一个操作数,操作数可以是字节、字 或双字,且被当作无符号数。(2)减法运算指令SUB(SUBtract) 减法。SBB(SuBtract with Borrow) 带借位减法。DEC(DECrement) 减1。NEG(NEGate) 求补。CMP(CoMPare) 比较。 SUB减法指令指令格式:SUB DEST,SRC指令功能:DEST (DEST)( SRC),即完成从目的操 作数中减去源操作数,其差值送入目的地址中;并按相减结 果设置标志位OF、SF、ZF、AF、PF和CF。【例4-32】 SUB指令的常用格式如下:SUB A

6、L,3FHSUB BX,AX下面以指令“SUB AL,DAB”为例,给出该指令的相减及设置标 志位过程。设AL内容为B7H,DAB字节单元内容为A8H:结果不为零,则ZF 0; 结果无溢出,则OF 0;结果中有偶数个1,则PF 1。 SBB带借位减法指令指令格式:SBB DEST,SRC指令功能:DEST (DEST)( SRC) CF,即在 完成两个操作数相减的同时,还要减去借位位CF,相 减结果送入目的地址中;并设置标志位OF、SF、ZF 、AF、PF和CF。 DEC减1指令指令格式:DEC DEST指令功能:DEST (DEST)1,即目的操作数减1后送 回目的地址中;并根据执行结果设置

7、标志位OF、SF、ZF、 AF和PF,但不影响CF。 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。 NEG AL NEG

8、BL以上指令执行后,AL中为负数25H的补码:(AL) DBH 11011011B。 BL中则为正数:(BL) 58H 01011000B。【例4-34】 设AL中存放一正数:(AL) 25H 00100101B。 BL中存放负数58H的补码:(BL) A8H 10101000B。可用 以下指令获得AL、BL中数的负数:假设(AX)=0FFFFH,有以下程序段:INC AX NEG AX DEC AX NEG AX上述程序段执行后,(AX)=? CMP比较指令指令格式:CMP DEST,SRC指令功能:(DEST)( SRC),两个操作数相减后,仅按相 减结果设置标志位OF、SF、ZF、AF、

9、PF和CF,而不保留两数 相减的差。CMP指令与SUB指令的不同之处是,运算结果不送回目的 地址中。因此CMP指令执行后,两个操作数都不变,只影响状 态标志位。CMP指令后往往跟着一个条件转移指令,根据比较 结果产生不同的程序分支。例如: CMP AL,BL JZ EQLCMP指令可利用所设标志位的状态来反映两个操作数的大小。 CMP指令执行后,若ZF 1,表示(DEST)(SRC)。对于无 符号数,若CF 0,表示(DEST)(SRC);若CF 1,则( DEST)(SRC)。(3)乘法运算指令MUL(unsigned MULtiple) 无符号数乘法。IMUL(sIgned MULtipl

10、e) 带符号数乘法。 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中有乘积的有效数字)。 IMUL带符号数乘法指令指令格式

11、: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)除法运算指令DIV(unsigned DIVide) 无符号数除法。

12、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指令中的被除数和除数必须是无符号数,其商和余数也是无符 号数。 DIV指令对标志寄存器无有效标志结果。但是以下两种情况 之一,将产生0型中断(除法出错中断)转入除法出错中断处理

13、 。 除数为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型中断。 由于除法指令的字节操作要求被除数为16位,

14、字操作要求被除 数为32位,双字操作要求被除数为64位,因此往往需要用符号扩展 的方法取得除法指令所需要的被除数格式。 【例4-39】 两个8位带符号数分别放在BYTE1、BYTE2字节存储 单元中,将BYTE1内容除以BYTE2内容,商放在QUOT字节单元中,可 用以下指令实现: MOVAL,BYTE1 CBW IDIVBYTE2 MOVQUOT,AL 假设DAW1和DAW2分别是两个字单元的符号地址,请按 下列要求写出指令序列:(1)DAW1和DAW2两个字数据相乘(用MUL)。 MOV AX,DAW1 MUL DAW2(2)DAW1除以23(用DIV)。 MOV AX,DAW1 MOV

15、BL,23 DIV BL3逻辑类指令这类指令包括逻辑运算指令、位测试指令、位扫描指令和移 位指令。(1)逻辑运算指令逻辑运算指令共有5条,其指令格式及功能分别如下:AND逻辑与指令指令格式:AND DEST,SRC指令功能:DEST(SRC)(DEST)OR逻辑或指令指令格式:OR DEST,SRC指令功能:DEST(SRC)(DEST)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指令执行后,两个操作数都不变,只影响标志位。 这些指令常用于对操作数的某些位进行分离、组合或设置,例 如: ANDAL,0F0H;分离出AL中的高4位

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号