最近学习汇编,从书上面说,
检查奇偶标志
奇偶标志位表明位操作或算术运算结果的最低字节包含1的位的个数是奇数还是偶数,当个数为偶数时设置奇偶标志,为奇数时清除该标志,检查数字奇偶标志的方法之一是将数字同全0字节进行异或运算!
上面这句话我不懂,怎么就同0进行异或就可以知道是奇是偶呢,计算机是如何计算的!
还有3位的值的奇偶性计算方法是:如果用B0到B3来分别标识4个字节那么奇偶性可计算
为:BO XOR B1 XOR B2 XOR B3
这个我更不懂,了,计算机是怎么查出来,有多少个1的啊,
想了半天也想不通!
那位大侠帮帮小弟!
------解决方案--------------------------------------------------------
哦,这个意思啊。
mov指令不会改变奇偶校验位。所以 mov al.10110101b 执行之后,PF位可能还是1,但当
xor al,0执行之后,al中的值没什么变化,但因为此指令运算的结果是 al中1的个数为奇数,所以PF变成0了。这是个小技巧而以。
我想CPU应该是把计算得到的结果的低八个位相异或,再取反来设置奇偶标志的。可以证明,n个比特位相异或,如果其中1的个数为奇数,那么结果为1,1的个数为偶数那么结果为0,如
1 xor 0 xor 1 xor 1=1 (3个1,运算结果为1)
1 xor 1 xor 1 xor 1=0 (4个1,运算结果为0)
这个结论用数学归纳法就可证明了。
我用的是gdb。你可以试着熟悉一下debug。