【问题标题】:Why is gdtr in nasm not working as it should?为什么 nasm 中的 gdtr 不能正常工作?
【发布时间】:2019-02-01 21:40:35
【问题描述】:

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

deos.asm:20: 错误:符号 `gdtr' 未定义

当我写的时候:

lgdt [gdtr]

有谁知道为什么会这样

【问题讨论】:

  • 您是否在内存中定义了一个全局描述符表?你必须定义一个指向一个([gdtr])。定义一个将创建适当的标签。
  • 那么如何定义全局描述符表寄存器呢?

标签: x86 nasm osdev


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2016-07-16
    • 2019-01-04
    • 2020-09-03
    • 2016-10-10
    • 2016-10-24
    • 2017-02-27
    • 2017-07-08
    • 2014-11-23
    • 2021-03-07
    相关资源
    最近更新 更多