汇编: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
那么,我的问题是mov
或dec
对零标志有什么影响吗?
当然你应该在手册中查找这个,但这里有一个一般规则:
- 移动内容的指令不会修改标志。
- 进行计算的指令将修改标志。
所以movsx
属于第一类,不会改变任何flag。
但是 dec
显然进行了计算,并且肯定会更改几个标志,包括 ZeroFlag。
检查你的假设。
If fpu computations do not influence zero flag, then we can assume that it is equal to:
存在4条直接修改EFLAGS寄存器的fpu指令。它们是 fcomi
、fcomip
、fucomi
和 fucomip
。他们定义了 ZF、PF 和 CF。
您将不得不仔细阅读 # so many fpu computations(2) 代码块以了解其中任何一个。如果存在 jz label2
将不会基于 dec eax
!
的结果
存在2条修改AX寄存器的fpu指令。这些是 fstsw ax
和 fnstsw ax
。
您必须仔细阅读 # 一些 fpu 计算(1) 和 # 这么多 fpu 计算(2) 代码块.如果存在,EAX 将不会包含您期望的值!
要回答您关于 mov
和 dec
对 ZF 有任何影响的问题,@user3144770 提供的一般规则几乎说明了一切。
Intel 手册是这些问题的可靠朋友。
在反汇编代码中:
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
那么,我的问题是mov
或dec
对零标志有什么影响吗?
当然你应该在手册中查找这个,但这里有一个一般规则:
- 移动内容的指令不会修改标志。
- 进行计算的指令将修改标志。
所以movsx
属于第一类,不会改变任何flag。
但是 dec
显然进行了计算,并且肯定会更改几个标志,包括 ZeroFlag。
检查你的假设。
If fpu computations do not influence zero flag, then we can assume that it is equal to:
存在4条直接修改EFLAGS寄存器的fpu指令。它们是
fcomi
、fcomip
、fucomi
和fucomip
。他们定义了 ZF、PF 和 CF。
您将不得不仔细阅读 # so many fpu computations(2) 代码块以了解其中任何一个。如果存在jz label2
将不会基于dec eax
! 的结果
存在2条修改AX寄存器的fpu指令。这些是
fstsw ax
和fnstsw ax
。
您必须仔细阅读 # 一些 fpu 计算(1) 和 # 这么多 fpu 计算(2) 代码块.如果存在,EAX 将不会包含您期望的值!
要回答您关于
mov
和dec
对 ZF 有任何影响的问题,@user3144770 提供的一般规则几乎说明了一切。Intel 手册是这些问题的可靠朋友。