0

这是我的代码:

...
data_seg equ os_data-gdt_start
code_seg equ os_code-gdt_start
...
jmp code_seg:pm_start
[BITS 32]
pm_start:        
mov ax,data_seg
mov ds,ax
mov word [ds:0xb8000],0xC341

当 gdt 中的 dc 位(访问字节的第三位)为零时,它可以正常工作。我想知道为什么当它是 1 时不工作?

我知道 dc 位是数据选择器的 Direction 位,当它为 0 时,该段长大,当它为 1 时,该段长大。但不知道长大和长大到底是什么意思。当我想使用堆栈时,成长和成长对我来说意味着。(ESP++和ESP--)

4

1 回答 1

1

DC 位是 osdev.org 的名称,在英特尔的手册中是扩展方向。数字只能有两个方向:它可以增加或减少。直流位是与之一起玩的东西。

如果堆栈段的大小需要动态变化,则堆栈段可以是向下扩展的数据段(设置了扩展方向标志)。动态改变段限制会导致堆栈空间被添加到堆栈底部

于 2013-07-18T08:39:42.880 回答