Как я могу получить доступ к массиву в ASM? - PullRequest
0 голосов
/ 05 апреля 2011
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 Ответ

1 голос
/ 05 апреля 2011

Если 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;
}
...