这是我的代码:
...
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-)
DC位由osdev.org命名,根据英特尔手册,它的扩展方向。数字只能向两个方向发展:它可以增加也可以减少。DC比特就是玩它的东西。
如果堆栈段的大小需要动态设置,则堆栈段可以是向下扩展的数据段(设置了扩展方向标志)动态更改段限制会导致堆栈空间添加到堆栈底部。