如果都是8位操作的话,第一个不溢出,第二个溢出,如果运算器超过8位就都不溢出。
溢出标志OF的判定条件是最高位向C进位,或次高位向最高位进位,但此二者不同时产生进/借位。
实际上用带符号加法判断也很简单,以8位机为例,运算结果大于127或小于-128就是溢出,
第一段,换算成十进制就是-4+5=1,在-128到127之间,不溢出;
第二段,-128+(-128)=-256,不在-128到127之内,肯定溢出。
8位机子上的话,都溢出了,前面的溢出的结果是01H,后面的溢出后结果是00H ,但是如果在32位机子上都不溢出,而且指出一点mov al,0fch ,这句肯定是错误的,没法搞呀,正确的做法应该是mov al,fch,因为八位存储器只能这样表示,如果是16位的话就可以这样表示mov ax,0010H,32位的存储器就这样表示mov eax,00000010H,这个是规定,不这样表示编译器会报错的!
个人是这么判断的:
第一个是 -4 + 5 = 1,结果正确
第二个 结果为0,明显错误
第二个溢出;
书上的:
两数符号相同,而结果符号相反,则说明溢出;
汇编 OF溢出
mov al,0fch
add al,05h----负数加正数,肯定不会溢出。
---------------------
mov al,80h
add al,80h----两个负数相加。
执行后结果为1 0000 0000
----结果是 0000 0000,
----这不是负数,这就是溢出了。
执行加法后,看有没有溢出,可以读一下C的值,C=1 有溢出,C=0表示没有溢出,当然也有的单片机是反过来的。