c - 如何访问asm中的数组?

标签 c gnu-assembler

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\
");

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

最佳答案

如果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;
}

关于c - 如何访问asm中的数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5547820/

相关文章:

c - 为什么我无法打开文件?

c - Raspberry Pi 上 C 程序的性能测量

编译实模式asm (rootkit.arsenal)

gcc - 在 64 位 Linux 上编译 32 位 at&t 汇编程序不起作用

gcc - GNU 汇编宏

c - 我怎样才能得到 int 0x16 的值?

c - 希望提高内联汇编的效率,有人可以提供建议吗?

c - 错误 : ',' expected (got "10") in C programming

c - GCC:禁止使用某些寄存器

assembly - "GCC -S"的汇编输出: why does .全局定位在.data之前?