为什么 nasm 中的 gdtr 不能正常工作?
Why is gdtr in nasm not working as it should?
我正在 NASM 中编写操作系统,我不想切换到保护模式,但我有一个问题,那就是我收到一条错误消息:
deos.asm:20: error: symbol `gdtr' undefined
当我写的时候:
lgdt [gdtr]
有谁知道为什么会这样
[gdtr]
不引用寄存器。这是您必须在内存中声明的标签名称,其中包含一个限制和指向您的 GDT 的指针。或者使用像 lgdt [edi]
这样的寻址模式而不是 lgdt [disp32]
如果你在寄存器中有那个地址。
内部 GDTR base/limit 寄存器是 隐式 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;
我正在 NASM 中编写操作系统,我不想切换到保护模式,但我有一个问题,那就是我收到一条错误消息:
deos.asm:20: error: symbol `gdtr' undefined
当我写的时候:
lgdt [gdtr]
有谁知道为什么会这样
[gdtr]
不引用寄存器。这是您必须在内存中声明的标签名称,其中包含一个限制和指向您的 GDT 的指针。或者使用像 lgdt [edi]
这样的寻址模式而不是 lgdt [disp32]
如果你在寄存器中有那个地址。
内部 GDTR base/limit 寄存器是 隐式 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;