这是我的代码:
...
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--)
答案 0 :(得分:0)
DC位是osdev.org的名字,英特尔的手册是扩展方向。数字只能在两个方向上进行:它可以增加或减少。 DC位是与它一起玩的东西。
如果堆栈段的大小需要动态,则堆栈段可以是向下扩展的数据段(扩展方向标志已设置)。 动态更改段限制会导致堆栈空间添加到堆栈底部。