[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;