使用程序集访问数组中的元素

时间:2014-12-03 11:25:55

标签: c visual-c++ assembly x86 inline-assembly

假设以下功能:

void asmFunction(const int *first, ...) {
    __asm {
        xor eax, eax
        add eax, [first][0]
        ; ...
    }
}

这是这样称呼的:

int first[] =  { 0, 0, 0, 0, 0, 0, 0, 5, 7, 6, 2, 4, 3, 5 };
asmFunction2(first, ...);

据我了解,第二个装配线必须将0数组first添加到eax。但是,正在添加随机值。调试时,first[0]等于0,必须如此。代码有什么问题?

我在64位计算机上使用Visual Studio 2013进行编码。

1 个答案:

答案 0 :(得分:1)

这是一种奇怪的语法,可能并不是你想要的。如果您反汇编生成的代码,您很可能会看到add eax, [ebp+8]之类的内容。添加的随机值应该是first的值,这是一个指针。您已经有效地完成了eax += first。要获得元素,您需要一个间接级别,即eax += *first。例如,这可能有效:

mov edx, [first]
add eax, [edx]