【问题标题】:Assembly Test Instruction装配测试说明
【发布时间】:2012-12-05 09:36:33
【问题描述】:

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

Test EDX, 200

我在EDX 中有DWORD 值,例如:

1A1B1C00

当我做test EDX, 200 然后是JE,跳转。为什么? EDX 不等于 200

我想了解更多Test EDX, 200的含义。

【问题讨论】:

  • 相关:关于test eax,eax 的问题有很多很好的答案,但大多数都集中在test 的特定用例上:检查寄存器的当前值,而不是只测试一些位使用不同的第二个操作数。

标签: assembly x86


【解决方案1】:

test 执行AND 而不修改操作数(它只修改一些标志,如ZF 等)。 je 只是测试 ZF(零标志)并在设置时跳转。

所以Test EDX, 200AND 中的值EDX0x200 设置ZF1 如果AND 的结果是0。在你的情况下,这会给我们:

0x1A1B1C00 AND 0x00000200 -> 0x00000000

由于0x0200 在二进制中是0000 0010 0000 0000,指令Test EDX, 200 的目的是测试EDX 中的值并查看第9 位(从0 开始计数的右边9 位)是否为@ 987654339@或1,如果是零则跳转。

【讨论】:

  • 对寄存器执行 AND 200 可能意味着什么?
  • 查看是否设置了单个位(或一组位中的至少一个位)。我想在您的问题中应该是test, edx, 0200h,因为测试单个位更常见。
  • 是的,这是测试,edx,0200h。这是什么意思?
  • 你在EDX中有1A1B1C00h;因为C00h800h OR 400h,逻辑AND200h 结果为零,也就是ZF 设置,因此JE 被采用。
  • JE 与 JZ 相同(如果为零则跳转);这不是关于值是否相等,而是关于设置 ZF 标志。 (当值相等时由 CMP 或 SUB 设置 - 这就是为什么将 JE 助记符用作同义词的原因)。
【解决方案2】:

要了解汇编指令的作用,我建议使用 Google。在 Google 中,您可以只写指令的名称,在本例中为 test,以及类似 intel instruction(用于 Intel 指令):

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 格式:

Intel® 64 and IA-32 Architectures Software Developer Manuals

Combined Volume Set of Intel® 64 and IA-32 Architectures Software Developer’s Manuals

【讨论】:

    猜你喜欢
    • 2023-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-02
    • 1970-01-01
    • 1970-01-01
    • 2019-10-27
    相关资源
    最近更新 更多