Почему gdtr в nasm не работает как надо? - PullRequest
0 голосов
/ 02 февраля 2019

Я пишу операционную систему в NASM, и я не хочу переходить в защищенный режим, но у меня есть одна проблема, которая заключается в том, что я получаю сообщение об ошибке:

deos.asm: 20: ошибка: символ `gdtr 'не определен

когда я пишу:

lgdt [gdtr]

Кто-нибудь знает, почему это происходит

1 Ответ

0 голосов
/ 02 февраля 2019

[gdtr] не ссылается на регистр.Это имя метки, которое вы должны будете объявить в памяти, удерживая ограничение и указатель на ваш GDT.Или используйте режим адресации, например lgdt [edi] вместо lgdt [disp32], если у вас есть этот адрес в регистре.

Внутренние регистры базы / предела GDTR: неявные операнды назначения для lgdt(и источник для sgdt);прочитайте инструкцию для инструкции: https://www.felixcloutier.com/x86/lgdt:lidt

В разделе «Операция» приведен этот псевдокод для LGDT:

        ELSE IF 32-bit Operand Size
            THEN
                GDTR(Limit) ← SRC[0:15];
                GDTR(Base) ← SRC[16:47];
            FI;
...