ASM: слишком много ссылок на память для `mov ' - PullRequest
0 голосов
/ 03 марта 2019

Это снова я, у меня новая проблема в моем файле idt.S (синтаксис Intel, скомпилированный с gcc).Когда я пытаюсь скомпилировать следующий код:

load_idt:
        mov edx, (esp + 4) ; On this line
        lidt (edx)
        sti
        ret

я получаю ошибку, которую я действительно не знаю, как исправить:

Error: too many memory references for `mov'

1 Ответ

0 голосов
/ 03 марта 2019

Если вы собираете с GCC, используя что-то вроде:

gcc -c -m32 -masm=intel idt.S -o idt.o

Проблемы:

  • Вам нужно будет добавить директиву .intel_syntax noprefix в верхней части вашегофайл.По умолчанию GCC собирает файлы .s и .S, предполагая, что для синтаксиса Intel требуется префикс % во всех регистрах.Эта директива устраняет это требование.
  • В операндах синтаксиса Intel используются квадратные скобки [ и ] вместо скобок ( и ).
  • Комментарии начинаются с #вместо ;.

Код должен выглядеть так:

.intel_syntax noprefix

load_idt:
        mov edx, [esp + 4] # On this line
        lidt [edx]
        sti
        ret
...