在Kip Irvine的书中,他谈到了设置溢出标志的机制,他写道:
在加法或减法操作之后,CPU使用一种有趣的机制来确定Over fl ow fl ag的状态.Carry fl ag与结果的高位进行异或运算.结果值放在Over fl ow fl ag中.
我写了一个简单的程序,显示在al寄存器中添加5到127设置溢出标志:
0111 1111 + 0000 0101 = 1000 0100 carry flag = 0, high bit = 1, overflow = 1
Run Code Online (Sandbox Code Playgroud)
但是,在al寄存器中添加5到255不会设置溢出标志:
1111 1111 + 0000 0101 = 0000 0100 carry flag = 1, high bit = 0, overflow = 0
Run Code Online (Sandbox Code Playgroud)
为什么第二个例子中设置的溢出标志不是满足的条件语句ie; 进位标志= 1,高位= 0?
.data
val1 BYTE 10h
val2 WORD 8000h
val3 DWORD 0FFFFh
val4 WORD 7FFFh
Run Code Online (Sandbox Code Playgroud)
如果使用ADD指令将val2递增1,那么进位和符号标志的值是多少?
如果使用ADD指令将val4递增1,那么溢出和符号标志的值是多少?
我回答了两个问题并且错了.为什么答案是什么?