我在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生成的,那么我正在执行数据.
先感谢您.
根据Intel指令集参考,ZF总是根据结果来设置。int 3 处理程序中的某些内容可能会对此进行操作吗?
编辑:在进一步挖掘手册之后(感谢上帝,英特尔发送了免费副本!),我唯一的想法是,要么是 int 3 处理程序以某种方式设置它,要么是处理器在设置标志时只查看 dx 而不是 edx。两者似乎都不太可能,但后者似乎完全难以置信。你在什么模式下运行?(真实、受保护、虚幻、长?)