为什么nasm中的gdtr无法正常工作?

时间:2019-02-01 21:40:35

标签: x86 nasm osdev

我正在用NASM编写操作系统,我不想切换到保护模式,但是我有一个问题,那就是我得到一个错误消息:

  

deos.asm:20:错误:未定义符号“ gdtr”

我写的时候:

lgdt [gdtr]

有人知道为什么会发生

1 个答案:

答案 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;