1

我想知道这个操作是什么意思?

Test EDX, 200

我有这样的DWORD价值EDX

1A1B1C00

当我这样做test EDX, 200 然后 aJE时,将进行跳转。为什么?EDX不等于200

我想更多地了解Test EDX, 200意义。

4

2 回答 2

5

Atest执行 anAND而不修改操作数(它只修改一些标志,如ZFet al)。Aje简单地测试ZF(零标志)并在设置时跳转。

Test EDX, 200如果结果是. _ AND_ EDX_ 0x200_ ZF_ 在您的情况下,这将给我们:1AND0

0x1A1B1C00 AND 0x00000200 -> 0x00000000

由于0x02000000 0010 0000 0000二进制的,该指令的目的Test EDX, 200是测试 in 的值EDX并查看第 9 位(从 0 开始向右数的 9 位)是否为 a01,如果为 0 则跳转。

于 2012-12-05T09:40:05.470 回答
1

要了解汇编指令的作用,我建议使用 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 格式:

英特尔® 64 和 IA-32 架构软件开发人员手册

英特尔® 64 和 IA-32 架构软件开发人员手册组合卷集

于 2012-12-06T21:50:11.590 回答