我正在用NASM编写操作系统,我不想切换到保护模式,但是我有一个问题,那就是我得到一个错误消息:
deos.asm:20:错误:未定义符号“ gdtr”
我写的时候:
lgdt [gdtr]
有人知道为什么会发生
答案 0 :(得分:2)
[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;