bar*_*rej 4 x86 assembly disassembly
在反汇编代码中:
movsx eax,[address1]
# a few fpu computations
dec eax
# so many fpu computations
jz label2
Run Code Online (Sandbox Code Playgroud)
如果 fpu 计算不影响零标志,那么我们可以假设它等于:
# a few fpu computations
# so many fpu computations
movsx eax,[address1]
dec eax
jz label2
Run Code Online (Sandbox Code Playgroud)
然后,我的问题是,你mov或者dec对零标志是否有影响?
Sep*_*and 11
当然,您应该在手册中查找这一点,但这里有一个一般规则:
所以movsx属于第一类,不会改变任何标志。
但dec显然进行了计算,并且肯定会更改包括 ZeroFlag 在内的几个标志。
检查你的假设。
如果 fpu 计算不影响零标志,那么我们可以假设它等于:
存在 4 条直接修改 EFLAGS 寄存器的 fpu 指令。这是fcomi,fcomip,fucomi,和fucomip。它们定义了ZF、PF 和 CF。对于其中任何一个,
您都必须仔细阅读# so many fpu computing(2)代码块。如果存在jz label2将不会基于结果dec eax!
存在 2 条修改 AX 寄存器的 fpu 指令。这些是fstsw ax和fnstsw ax。
对于其中的任何一个,您都必须仔细阅读# 几个 fpu 计算(1)和# 这么多 fpu 计算(2)代码块。如果存在 EAX 将不包含您期望的值!
要回答您关于ZFmov并对其产生dec任何影响的问题,@user3144770 提供的一般规则几乎说明了一切。
在这些问题上,英特尔手册是可靠的朋友。
| 归档时间: |
|
| 查看次数: |
3000 次 |
| 最近记录: |