неподдерживаемая инструкция ' 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
приведет к той же ошибке.