汇编语言溢出小结

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

汇编语言溢出小结

汇编溢出使用总结如下:

执行加法指令ADD:

OF标志位根据操作数的符号及其变化情况来设置:若两个操作数的符号相同,而结果的符号与之相反时,OF=1,否则OF=0。溢出位既然是根据数的符号及其变化来设置的,当然他使用来表示带符号数的溢出的。

执行减法指令SUB:

减法的OF位的设置方法为:若两个数的符号相反,而结果的符号与减数的符号相同,则OF=1,除上述情况外OF=0。OF=1说明带符号数的减法运算结果是错误的。

求补运算指令NEG:

NEG指令的条件码按求补后的结果设置,只有当操作数为0时,求补运算结果使CF=0,其他情况均为CF=1.所以,只有当字节运算时对-128求补,以及字运算时对-32768求补和双字运算时对-2的31次方求补的情况下OF=1,其他则OF=0。

无符号乘法指令MUL:

对于MUL指令,如果乘积的高一半为0,几字节操作的(AH)或字操作的(DX)或双字的(EDX)为0,则CF位和OF位均为0;否则,均为1.

带符号数乘法指令IMUL:

对于IMUL指令,如果乘积的高一半是低一半的符号扩展,则CF位和OF位均为0,否则为1.

除法指令:

除法指令对所有条件码位均无定义。但是需要注意一个问题,如果字节

操作时,被除数的高8位的绝对值》除数的绝对值;或者字操作时,被除数的高16为绝对值》除数的绝对值,则商就会产生溢出。在8086系统中,这种溢出是由系统直接转入0型中断处理的。为避免这种情况,必要时程序应进行溢出判断及处理。

逻辑运算指令:

AND,OR,NOT,XOR,TESTT中,NOT不影响标志位,其他4种指令将使CF位和OF位为0.

移位指令:

OF位只有当移位次数CNT=1时,即移动一位的时候才是有效的,否则该位无定义。当CNT=1时,在移位后最高有效位的值发生变化时(原来为0,移位后为1;或原来为1,移位后为0)OF=1,否则值为0.

串处理指令:

MOVS,LODS,STOS,INS,OUTS不影响标志位。转移指令:

所有条件转移指令都不影响条件码,JMP也不影响条件码。

循环指令:

不影响条件码。

子程序:

CALL和RET都不影响条件码。

判断运算结果是否溢出的一个简单的规则:只有当两个相同符号数相加,而运算结果的符号与原数据符号相反时,产生溢出,此时的运算结果显然不正确。其他情况下,则不会产生溢出。

两个正数相加(或一个正数减一个负数)得到负数,或是两个负数相加得到

正数,就是溢出了.

一个正数和一个负数相加不可能溢出。

相关文档
最新文档