assembly 程序集je,jns,jle使用哪个寄存器?

nfg76nw0  于 2023-01-17  发布在  其他
关注(0)|答案(1)|浏览(157)

案例一:

cmp dword ptr[ebp + 18],00
mov eax, [ebp + 14]
je Game.exe+417442

案例二:

test eax,eax
jns Game.exe+47137

它总是查看寄存器eax吗?如果不是,我们怎么知道它查看哪个寄存器来确定跳转?

vi4fp9gy

vi4fp9gy1#

x86 Jcc(其中cc是一个条件码)使用(R|E)FLAGS register来确定条件是否满足。标志可以通过前面的各种指令来更新。在传统的x86汇编中,通常使用cmptest指令在跳转指令读取标志之前写入标志。
如果查看this instruction referencecmp的文档以及test的文档,您会发现它们允许任何通用寄存器作为操作数。
我注意到,cmptest不是影响标志的 * 唯一 * 操作,只是,当您编写自己的汇编代码时,它们通常是用于确定是否满足跳转条件的操作。

相关问题