前言
有不少新手在学习汇编指令的时候可能会被网上一些人误导(很显然我就被误导了),认为test与cmp指令相同,都是在比较两个值是否相同的,那么来看这两个指令:
test edx,edx
jne 0040BCA3
jne 指令为不等于0时跳转
那么思考一下,这个jne会跳转吗。
edx与edx寄存器进行比较,那么肯定为true啊,true=1肯定跳转啊。
这实际上是错误的。
了解test指令
test指令并不是跟网上说的那样用来比较的,而是一个位操作的指令
用于将寄存器 edx 与自身进行按位与操作(AND)。这其实是一个快捷方式,用来测试寄存器的内容是否为零
test 指令的执行结果会影响 CPU 的标志位,特别是 ZF(零标志位)。如果 edx 的值是零,test edx, edx 的结果也会是零,进而设置 ZF 标志。如果 edx 的值不是零,ZF 标志不会被设置。
因此,jne 0040BCA3 仅在 ZF 未被设置时(即 edx 不为零时)执行跳转。如果 edx 是零,则跳
版权所有:XuanRan