装配测试说明

时间:2012-12-05 09:36:34

标签: assembly x86

我想知道这个操作意味着什么?

Test EDX, 200

我在DWORD中有EDX个值,如:

1A1B1C00

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

我想了解更多有关Test EDX, 200含义的信息。

2 个答案:

答案 0 :(得分:5)

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

Test EDX, 200 AND EDX 0x200 ZF 1 AND 0 0x1A1B1C00 AND 0x00000200 -> 0x00000000 0x0200 0000 0010 0000 0000Test EDX, 200。在你的情况下会给我们:

EDX

由于0在二进制文件中是1,因此指令{{1}}的意图是测试{{1}}中的值并查看第9位(距离第9位)从0开始正确计数是{{1}}或{{1}},如果它是零则进行跳转。

答案 1 :(得分:0)

要了解汇编指令的作用,我建议使用Google。在Google中,您只需编写指令的名称,在本例中为test,类似intel instruction(适用于英特尔说明):

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