[高等教育]第332 算术运算类指令

上传人:油条 文档编号:49541892 上传时间:2018-07-30 格式:PPT 页数:69 大小:312KB
返回 下载 相关 举报
[高等教育]第332 算术运算类指令_第1页
第1页 / 共69页
[高等教育]第332 算术运算类指令_第2页
第2页 / 共69页
[高等教育]第332 算术运算类指令_第3页
第3页 / 共69页
[高等教育]第332 算术运算类指令_第4页
第4页 / 共69页
[高等教育]第332 算术运算类指令_第5页
第5页 / 共69页
点击查看更多>>
资源描述

《[高等教育]第332 算术运算类指令》由会员分享,可在线阅读,更多相关《[高等教育]第332 算术运算类指令(69页珍藏版)》请在金锄头文库上搜索。

1、第3章 80x86的指令系统和寻址方式第三章 80x86的指令系统(二)返回目录二、算术运算类指令 p36第3章 80x86的指令系统和寻址方式 二 算术运算类指令 1. 加法指令 2. 减法指令 3. 乘法指令 4. 除法指令 5. 十进制调整指令返回本节首页算术指令的寻址方式:p36双操作数指令的两个操作数中除源操作数为立即数的 情况外,必须有一个操作数在寄存器中。单操作数指令不允许使用立即数方式。第3章 80x86的指令系统和寻址方式1. 加法运算指令p36(1)加指令ADD (add)(2) 带进位加指令ADC (add with carry)(3) 非压缩十进制数的加法校正指令AAA

2、 (4) 加法十进制校正指令DAA (5) 加1指令 INC (increment)(6) 交换并相加 XADD (exchange and add)返回本节首页第3章 80x86的指令系统和寻址方式1加法 (1)加法指令的一般格式ADD dst, src 功能: dstdst+src该指令对源操作数和目的操作数的内容执行一个字节或 字的加法,并把结果放回原来存放目的操作数的地方。源操作数可以是立即数、寄存器或存储单元。目的操作 数可以是寄存器或存储单元。 例如:ADD AL, 30H ;AL内容加立即数30H,结果存回到AL中ADD AX, SI ;AX和SI两寄存器内容相加,结果存回到AX

3、中ADD BX+DI, AX ;BX+DI和BX+DI+1两存储单元内容和AX内容相 加,结果存回到上述两存储单元中 第3章 80x86的指令系统和寻址方式(2)带进位加法指令的一般格式 ADC dst, src 功能:dstdst+src+CF该指令和ADD指令类似,只是在两个操作数 相加时,要把标志寄存器中进位标志CF 的当 前值加上去,结果放回原来存放目的操作数 的地方。该指令主要用于多字节运算中。例如, 见下页: 第3章 80x86的指令系统和寻址方式例如,有两个四字节的数相加, 加法要分两次进行,先进行低两字节数相加,然后再做高两字节数相加,在高两字节数相加时,要把前两字 节相加以后

4、的进位考虑进去,就要用 到带进位加法指令。 第3章 80x86的指令系统和寻址方式【例1】无符号双字加法运算。0234 4657H+ 0F0F 0F0FH MOV AX,4652H ;(AX)=4652H 送低字 MOV DX,0234H ;(DX)=0234H 送高字 ADD AX,0F0F0H ;(AX)=3742H,CF=1 加低字 ADC DX,0F0F0H;(DX)=0F325H,CF=0 加高字和进位第3章 80x86的指令系统和寻址方式【例2】无符号双字加法运算若两个四字节的无符号数,分别存放在首址为2000H和3000H 的存储单元内,低位在前,高位在后,要求两数相加,结果存放

5、 在首址为2000H的单元中,可用如下程序段实现:MOV SI, 2000H ;第一个数首址送SIMOV AX, SI ;第一个数低16位送AXMOV DI, 3000H ;第二个数首址送DIADD AX, DI ;两数低16位相加MOV SI, AX ;低16位数相加后的和存入2000H和2001H两存 储单元中MOV AX, SI+2 ;第一个数高16位送AXADC AX, DI+2, ;两数高16位带进位加MOV SI+2, AX ;两高16位数带进位相加后的和存入2002H 和2003H两单元第3章 80x86的指令系统和寻址方式 (3)非压缩十进制数的加法校正指令 所谓非压缩十进制数

6、,就是把数字0 9的ASCII码的高 四位置0以后形成的数码,如6为00000110,9为00001001 。两非压缩十进制数相加,要得到正确结果仍为非压缩十 进制数,必须用AAA指令校正,结果存在AX中。AAA指令(ASCII Ajust for Addition)是对两个非压 缩的十进制数相加后AL的和进行校正。第3章 80x86的指令系统和寻址方式校正方法如果AL的低4位大于9或(AF)=1,应校正:在AX寄存器内容 上加106H,标志位AF和CF置1,并且AL高四位置0。即: (AL)=(AL)+6(AH)=(AH)+1(AF)=(CF)=1且AL高4位清零。否则:(CF)=(AF)=

7、0,AL高4位清零。如在AL和BL中,如各存有一个非压缩BCD数相加,其和存在AL 中也是非压缩BCD数,可用如下程序段:MOV AL,09H ;非压缩BCD数表示为0000 1001MOV BL,06H ;非压缩BCD数表示为0000 0110ADD AL, BL ;两数相加 ,结果为0000 1111,不是非压缩BCD数AAA ;必须用AAA指令进行校正,最后结果为(AH)=0000 0001,(AL )=0000 0101,(AF)=(CF)=1第3章 80x86的指令系统和寻址方式 (4)加法十进制校正指令 DAA所谓压缩十进制数,就是把数字0 9的ASCII码的低四 位分别放在一个字

8、节的高低四位后形成的数码,如63为 0110 0011,39为0011 1001。DAA指令(Decimal Adjust for Addition)是压缩型十 进制数的加法校正指令,即AL存两位BCD数,DAA指令的校 正和AAA指令类似,它必须考虑两位BCD数。方法是:如果AL的低四位所存值大于9,或标志位AF为1 ,则把AL加上6,并置标志位AF为1;如果AL的高四位所存 值大于9,或标志位CF为1,则把AL加上60H,并置标志位 CF为1。MOV AL,37H ;压缩十进制数37+49=86ADD AL, 49H ;压缩十进制数应为86,但结果80HDAA ;校正后AL中得正确十进制数

9、的结果86第3章 80x86的指令系统和寻址方式【例2】压缩BCD码的加法运算。MOV AL,68H;(AL)=68H,表示压缩BCD码68 MOV BL,28H;(BL)=28H,表示压缩BCD码28 ADD AL,BL;(AL)=68H+28H=90H DAA ;十进制调整:(AL)=96H;实现压缩BCD码加法:68+28=96第3章 80x86的指令系统和寻址方式 (5)加1指令 INCINC dst 功能: dstdst+1这条指令完成对指定的操作数加1,然后返回该操作 数。此指令主要用于在循环程序中修改地址指针和循环 次数等。可用这条指令对字或字节内容加1。例如:INC CX ;寄

10、存器中字加1,即(CX)+1CX。INC AL ;寄存器中字节加1,即(AL)+1AL。INC BYTE PTR BX+DI+10H ;BX+DI+10H所指的 存储单元中字节加1 第3章 80x86的指令系统和寻址方式(6)XADD 交换并相加指令(386后 )语句格式:XADD DST,SRC功能: TEMP (DST)+(SRC)(SRC) (DST) (DST) TEMP源操作数只能用寄存器寻址方式,目的操作数则可用寄存器或任一种存储器寻址方式。例3.47 XADD BL, DL如指令执行前 (BL)=12H, (DL)=02H则指令执行后 (BL)=14H, (DL)=12H第3章

11、80x86的指令系统和寻址方式加法指令总结1、三条加法指令都可作字或字节运算 ; 2、除INC指令不影响CF标志外,它 们都影响条件标志位; 3 、条件标志位的影响见下:返回本节首页第3章 80x86的指令系统和寻址方式 条件标志位的影响 3 、条件标志位最主要的是CF、ZF、SF、 OF 运算结果为零,则ZF=1,否则ZF=0;运算结果为负,则SF=1,否则SF=0;运算有进位时,CF=1,否则CF=0;两操作数的符号相同,而结果的符号与之 相反时,OF=1(有溢出),其余情况OF=0 。下面举例说明CF 、 OF的设置情况。第3章 80x86的指令系统和寻址方式数的溢出CF位则可用来表示无

12、符号数的溢出,OF位可以用来表示带符号数的溢出。(1)带符号数和无符号数都不溢出二进制加法 看作无符号数 看作带符号数0000 0100 4 +4+ 0000 1011 + 11 +(+11)0000 1111 15 +15CF=0 OF=0(2)无符号数溢出二进制加法 看作无符号数 看作带符号数0000 0111 7 +7+ 1111 1011 + 251 +(-5)0000 0010=+2 258 +2(结果对)1 CF=1 OF=0两个正数相加,应为正数+258(大于+255,有进位,CF=1 ), 现为+2,结果错第3章 80x86的指令系统和寻址方式 (3)带符号数溢出( OF位可以用来表示带符号数的溢出,OF=1)二进制加法 看作无符号数 看作带符号数0000 1001 9 +9+ 0111 1100 + 124 +(+124)1000 0101 133 +133CF=0 OF=1两个正数相加,应为正数+133(大于+127,所以OF=1 ), 现为-123,结果错(4)带符号数和无符号数都溢出( CF位和OF位均为1)二进制加法 看作无符号数 看作带符号数1000 0111 135 (-121) + 1111 0101

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

当前位置:首页 > 行业资料 > 其它行业文档

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