案例一:
cmp dword ptr[ebp + 18],00 mov eax, [ebp + 14] je Game.exe+417442
案例二:
test eax,eax jns Game.exe+47137
它总是查看寄存器eax吗?如果不是,我们怎么知道它查看哪个寄存器来确定跳转?
vi4fp9gy1#
x86 Jcc(其中cc是一个条件码)使用(R|E)FLAGS register来确定条件是否满足。标志可以通过前面的各种指令来更新。在传统的x86汇编中,通常使用cmp或test指令在跳转指令读取标志之前写入标志。如果查看this instruction reference中cmp的文档以及test的文档,您会发现它们允许任何通用寄存器作为操作数。我注意到,cmp和test不是影响标志的 * 唯一 * 操作,只是,当您编写自己的汇编代码时,它们通常是用于确定是否满足跳转条件的操作。
Jcc
cc
(R|E)FLAGS
cmp
test
1条答案
按热度按时间vi4fp9gy1#
x86
Jcc
(其中cc
是一个条件码)使用(R|E)FLAGS
register来确定条件是否满足。标志可以通过前面的各种指令来更新。在传统的x86汇编中,通常使用cmp
或test
指令在跳转指令读取标志之前写入标志。如果查看this instruction reference中
cmp
的文档以及test
的文档,您会发现它们允许任何通用寄存器作为操作数。我注意到,
cmp
和test
不是影响标志的 * 唯一 * 操作,只是,当您编写自己的汇编代码时,它们通常是用于确定是否满足跳转条件的操作。