假设以下函数:
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, ...);
据我了解,第二条流水线必须将数组first
的0
元素添加到eax
。但是,正在添加一个随机值。调试时,first[0]
必须等于 0。代码有什么问题?
我在 64 位机器上使用 Visual Studio 2013 编写代码。
最佳答案
这是一种奇怪的语法,可能无法满足您的要求。如果反汇编生成的代码,您很可能会看到类似 add eax, [ebp+8]
的内容。添加的随机值应该是first
的值,是一个指针。您已经有效地完成了 eax += first
。要获取元素,您需要一个间接级别,即 eax += *first
。例如,这可能有效:
mov edx, [first]
add eax, [edx]
关于c - 使用程序集访问数组中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27270560/