Assembly 为什么结果为8000h且设置奇偶校验标志?

Assembly 为什么结果为8000h且设置奇偶校验标志?,assembly,x86,Assembly,X86,考虑以下代码: .586 .model flat,stdcall .data .code main PROC mov ax,0 push ax popf mov bx,7FFFh add bx,1 //the value of bx is 8000h, but the parity flay is 1,why? Ret main endp END main 假设第一个数字仍然被认为是符号būt,因此它被忽略。我假设还设置了溢出标志,这将使该假设正确。假设第一个数

考虑以下代码:

.586
.model flat,stdcall
.data
.code
main PROC

mov ax,0
push ax
popf 
mov bx,7FFFh
add bx,1               //the value of bx is 8000h, but the parity flay is 1,why?
Ret
main endp
END main

假设第一个数字仍然被认为是符号būt,因此它被忽略。我假设还设置了溢出标志,这将使该假设正确。

假设第一个数字仍然被视为符号būt,因此它被忽略。我假设还设置了溢出标志,这将使该假设正确。

奇偶校验标志仅受结果最低字节的影响。所以对于奇偶校验的计算,你的值是零

如果想知道更宽值的奇偶校验,可以将它的两半进行异或运算,直到得到一个8位的结果,在最后的异或运算之后,奇偶校验标志将反映整个原始值的奇偶校验

例如,在本例中,您可以执行以下操作:

xor al, ah

然后奇偶校验标志将反映
ax

的奇偶校验。奇偶校验标志仅受结果最低字节的影响。所以对于奇偶校验的计算,你的值是零

如果想知道更宽值的奇偶校验,可以将它的两半进行异或运算,直到得到一个8位的结果,在最后的异或运算之后,奇偶校验标志将反映整个原始值的奇偶校验

例如,在本例中,您可以执行以下操作:

xor al, ah
然后奇偶校验标志将反映
ax

的奇偶校验。CPU可能认为零(在最低有效字节中未设置任何一个)为偶数?CPU可能认为零(在最低有效字节中未设置任何一个)为偶数?