汇编语言中溢出是指超出数据所表示的范围。通俗地说是装不下了,比如,两个带符号的字节数127和2相加,结果为-1,因为带符号的字节数最大正数为127,所以超过范围,溢出标志位为1,说明出错了。 汇编语言中存储的数是有一定范围的,无符号字节存储的范围为0~255,带符号字节存储范围为-128~+127。
1、对于非符号数来说,不存在溢出的问题,它的进位就相当于符号数中的溢出.
2、对于符号数来说,不存在进位的问题.两个正数相加(或一个正数减一个负数)得到负数,或是两个负数相加得到正数,这就是溢出了.此时的结果不是正确的。
附加:
与进位的区别:进位表示最高位有没有向上形成进位,或向个形成借位,如果有则进位标志为1,但结果没错。
溢出的判断是看运行结果的符号和进位标志。如果两个整数相加结果为负,或两个负数相加结果为正,就表示溢出了。对于第一段相加指令的结果为8位al=86h,符号位还是负数,所以溢出标志判断为不溢出(NV),而进位标志CF变为1了,表示8位字节已经表示不了这个运算结果了。
下面的程序没有溢出
0c3h=-67,-67-67=-134,已经超出了8位有符号的范围(-128~127),
debug 的时候却发现没有溢出
---------------------
当然不会溢出。
C3H,是-61 的补码。
C3 + C3,即代表:
-61 -61 =-122。
并不超出-128。
你的错,在于:c3h=-67。
你再算算看吧。
汇编就没有负数,都是0-255,下面两个都超了,当然溢出。
0c3h好像等于-61 不是等于-67