如何在asm中访问数组?

时间:2011-04-05 05:57:38

标签: c gas

char greet[] = "hello mate";

__asm__("\n\
movl foo, %eax\n\
");

如何将greet[0]移至%eax

等注册表中

我的猜测:

char greet[] = "hello mate";

__asm__("\n\
movl $_greet, %ebx\n\
movl (%ebx), %eax\n\
");

但是,我收到了内存错误。

1 个答案:

答案 0 :(得分:1)

如果greet是局部变量__asm__,则无法自动引用它。您可能需要使用汇编程序模板:

int main () {
    char greet[] = "hello mate";

    __asm__(
        "movzbl (%0), %%eax\n"
        : : "r"(greet) : "%eax"
    //      ^            ^ do not touch %eax
    //      '- set %0 to a register storing `greet`
    );

    // now %eax should store 'h' (0x68).

    return 0;
}