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

标签 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, ...);

据我了解,第二条流水线必须将数组first0元素添加到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/

相关文章:

使用 C 中的 CoreFoundation 检查包是否存在 (.app)

c++ - 具有相对路径的 fopen()

c++ - 编译器的健壮性……天真

macos - 我在 ASM 中的 strdup

c - x64 参数和返回值调用约定

c - 在单写入多读取系统中我们需要锁吗?

c - 程序立即以退出代码 0 结束——但它不应该在没有输入的情况下到达那里

c - UDP 端口扫描器问题,C

C++计算用户输入的文本行中小写字母的数量

gcc - REGSITER_TM_CLONES 中的 Shift 操作的目的是什么?