Проблема с инструкциями сборки в gcc - PullRequest
1 голос
/ 25 апреля 2011

Я обнаружил фрагмент кода на ассемблере в C-программе, которую пытался запустить в 64-битной FreeBSD.

void  *curbrk;   
__asm__ __volatile__(
        "movl .curbrk, %%eax;"
        "movl %%eax, %0"
            : "=r" (curbrk)
            :: "%eax"
    );

Я получаю сообщение об ошибке, например "mov отсутствует суффикс или операнд" (приведенный выше код соответствует синтаксису AT & T). Что определяет синтаксис, который я должен использовать для кода - Компилятор (gcc следует синтаксису AT & T) или процессор (я работает на процессоре Intel). Проблема в том, что код в синтаксисе AT & T или мне чего-то не хватает?

1 Ответ

4 голосов
/ 25 апреля 2011

Если у вас 64-битный GCC, приведенный выше код не будет завершен, если вы не используете ключ -m32 для вывода 32-битного объектного кода, поскольку значение 64-битного указателя не будет вписываться в 32-битный регистр EAX,Либо используйте -m32 для генерации 32-битного вывода, либо используйте rax вместо eax и измените movl's на mov (без 'l')

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...