0
asm("lidt (%0)" : : "p"(&idtr));
Вышеуказанный оператор будет использоваться для определения IDTR в моей операционной системе IA-32. По некоторым причинам, хотя, компилятор дроссели на нем:Написание ОС; asm проблемы с ключевыми словами
kernel/kernel.c:52:2: error: invalid 'asm': invalid expression as operand
asm("lidt (%0)" : : "p"(&idtr));
^
Кто-нибудь знает, что я здесь делаю неправильно? Если вам нужен еще какой-либо контекст для ответа на мой вопрос, скажите об этом, и я с радостью предоставит его.
Спасибо, но теперь я получаю '/tmp/ccfk5J0f.s: Assembler сообщения: /tmp/ccfk5J0f.s:293: Ошибка: отсутствует ')' /TMP/ccfk5J0f.s: 293: Ошибка: нежелательная \ '(% esp)) 'после выражения'. –
Показать, как определяется 'idtr'. Этот метод работает, он даже [используется в ядре linux] (https://github.com/torvalds/linux/blob/master/arch/x86/boot/pm.c#L98). – Jester
'IDTR idtr = (IDTR) {.size = sizeof (IDT), .offset = (uint32_t) &IDT};' где 'IDT' - массив дескрипторов IDT. –