汇编:MOV 或 DEC 影响零标志吗?

Assembly: do MOV or DEC influence zero flag?

在反汇编代码中:

movsx eax,[address1]
# a few fpu computations
dec eax
# so many fpu computations
jz label2

如果 fpu 计算不影响零标志,那么我们可以假设它等于:

# a few fpu computations
# so many fpu computations
movsx eax,[address1]
dec eax
jz label2

那么,我的问题是movdec对零标志有什么影响吗?

当然你应该在手册中查找这个,但这里有一个一般规则:

  • 移动内容的指令不会修改标志。
  • 进行计算的指令将修改标志。

所以movsx属于第一类,不会改变任何flag。
但是 dec 显然进行了计算,并且肯定会更改几个标志,包括 ZeroFlag。

  • 检查你的假设。

    If fpu computations do not influence zero flag, then we can assume that it is equal to:

    1. 存在4条直接修改EFLAGS寄存器的fpu指令。它们是 fcomifcomipfucomifucomip。他们定义了 ZF、PF 和 CF。
      您将不得不仔细阅读 # so many fpu computations(2) 代码块以了解其中任何一个。如果存在 jz label2 将不会基于 dec eax!

    2. 的结果
    3. 存在2条修改AX寄存器的fpu指令。这些是 fstsw axfnstsw ax
      您必须仔细阅读 # 一些 fpu 计算(1)# 这么多 fpu 计算(2) 代码块.如果存在,EAX 将不会包含您期望的值!

  • 要回答您关于 movdec 对 ZF 有任何影响的问题,@user3144770 提供的一般规则几乎说明了一切。

    Intel 手册是这些问题的可靠朋友