我想知道这个操作是什么意思?
Test EDX, 200
我有这样的DWORD
价值EDX
:
1A1B1C00
当我这样做test EDX, 200
然后 aJE
时,将进行跳转。为什么?EDX
不等于200
。
我想更多地了解Test EDX, 200
意义。
Atest
执行 anAND
而不修改操作数(它只修改一些标志,如ZF
et al)。Aje
简单地测试ZF
(零标志)并在设置时跳转。
Test EDX, 200
如果结果是. _ AND
_ EDX
_ 0x200
_ ZF
_ 在您的情况下,这将给我们:1
AND
0
0x1A1B1C00 AND 0x00000200 -> 0x00000000
由于0x0200
是0000 0010 0000 0000
二进制的,该指令的目的Test EDX, 200
是测试 in 的值EDX
并查看第 9 位(从 0 开始向右数的 9 位)是否为 a0
或1
,如果为 0 则跳转。
要了解汇编指令的作用,我建议使用 Google。在谷歌中,你可以只写指令的名称,在这种情况下test
,和类似的东西intel instruction
(对于英特尔指令):
从上面链接的 Google 搜索结果中,您还会发现一些服务器具有不同的页面,用于根据指令名称命名的不同 x86 汇编指令:
http://web.itu.edu.tr/kesgin/mul06/intel/instr/test.html
正如上面链接的网页上所说:
TEST - Test For Bit Pattern
Usage: TEST dest,src
Modifies flags: CF OF PF SF ZF (AF undefined)
Performs a logical AND of the two operands updating the flags
register without saving the result.
例如,要找出其他指令的作用,cmpxchg
您只需将地址中的指令名称替换为:
http://web.itu.edu.tr/kesgin/mul06/intel/instr/cmpxchg.html
最后,有关英特尔组装的最终信息来源是英特尔软件开发人员手册,它们非常有用,并且可以免费获得 pdf 格式: