您能否解释一下INCx86 汇编指令如何影响奇偶校验标志 (PF)?
我有以下代码:
.text:00401413 mov edi, offset user_id ; user_id at memory location 0x40D020
...
.text:00401421 inc edi ; edi = 0x40D021
...
.text:0040142D inc edi
.text:0040142E jnp short no_parity
user_id 定义如下:
.bss:0040D020 user_id db 21h dup(?)
.bss:0040D042 db ? ;
.bss:0040D043 db ? ;
.bss:0040D044 db ? ;
...
在偏移处0x40142D:
0:000> r edi
edi=0040d021
0:000> dd 40d021
0040d021 4f4f4f4f 4f4f4f4f 4f4f4f4f 4f4f4f4f
0040d031 4f4f4f4f 4f4f4f4f 4f4f4f4f 004f4f4f
0040d041 00000000 00000000 00000000 00000000
0040d051 00000000 00000000 00000000 00000000
0040d061 00000000 00000000 00000000 00000000
0040d071 00000000 00000000 00000000 00000000
0040d081 00000000 ff000000 01000000 01000000
0040d091 02000000 00000000 01000000 00000000
如果我对奇偶校验标志的理解是正确的,它应该适用于低 8 位:01001111因为:
edi = 0x4f4f4f4f = 0b1001111010011110100111101001111
1in的数量01001111是奇数(五1),这应该将 PF 设置为1。但这种情况并非如此:
0:000> r pf
pf=1
...这导致不会在 offset 处进行跳转0x40142E。
谢谢您的帮助。