неподдерживаемая инструкция ' lidt`
Я создаю ядро для образовательных целей.
Правая моя ОС загружается следующим образом: GRUB -> boot.S -> init.c
В boot.S я хочу загрузить таблицу дескрипторов прерываний. Вот выдержка из моего досье:
# load_idt - Loads the interrupt descriptor table (IDT).
# stack: [esp + 4] the address of the first entry in the IDT
# [esp ] the return address
load_idt:
movl 4(%esp),%eax # load the address of the IDT into register eax
lidt %eax # load the IDT
ret # return to the calling function
Я использую gas для компиляции,поэтому я работаю в синтаксисе at&T.
Однако, когда я пытаюсь скомпилировать это, компилятор, кажется, не распознает инструкцию lidt.
Gcc-Wa, -- 32-MMD-c-o boot.о сапог.С ботинок.S: сообщения ассемблера:
ботинок.S: 65: Ошибка: неподдерживаемая инструкция 'lidt': рецепт для
ботинок цели.о'удалось сделать: *** [загрузки.o] Ошибка 1
Что же тогда является правильной инструкцией?
Edit: я пробовал использовать lidtl, это также не работает
1 ответ:
lidtтребуется ссылка на память. Правильный синтаксис -lidt (%eax). По общему признанию, сообщение об ошибке может быть лучше. Опять же, моя версияgas(изGNU Binutils for Debian 2.22) говоритoperand type mismatch for 'lidt'.PS:
gasможно переключить на синтаксис intel, так что это не повод использовать at&T. эквивалент синтаксиса intel, конечно,lidt [eax], иlidt eaxприведет к той же ошибке.