x86:ZF并不总是由AND更新?

dan*_*ila 7 x86 assembly

我在x86上调试我的代码,如果结果不为零,问题跟踪到AND指令有时不会清除ZF标志.这是一段有问题的代码:

0257A9F9  mov         edx,dword ptr [ecx+18h] 
0257A9FC  and         edx,80000h 
0257AA02  int         3    
0257AA03  je          0257AA2A 

我在AND之后添加了一个断点用于调试.当它在断点EDX == 0x80000和ZF == 1时停止.但是如果EDX!= 0,则应清除ZF.当单步进入调试器时,代码完全正常,但在正常运行期间它会一致地失败.

这是调试器会话的屏幕截图.

任何提示?

如果这很重要,代码是由JIT生成的,那么我正在执行数据.

先感谢您.

Cod*_*ous 1

根据Intel指令集参考,ZF总是根据结果来设置。int 3 处理程序中的某些内容可能会对此进行操作吗?

编辑:在进一步挖掘手册之后(感谢上帝,英特尔发送了免费副本!),我唯一的想法是,要么是 int 3 处理程序以某种方式设置它,要么是处理器在设置标志时只查看 dx 而不是 edx。两者似乎都不太可能,但后者似乎完全难以置信。你在什么模式下运行?(真实、受保护、虚幻、长?)