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 ビット (アクセス バイトの 3 番目のビット) がゼロの場合、正しく動作します。1のときに機能しない理由を知りたいですか?

dc ビットはデータ セレクターの方向ビットであり、それが 0 の場合はセグメントが成長し、1 の場合はセグメントが成長することを知っています。しかし、成長と成長が正確に何を意味するのかわかりません。スタックを使用したいときは、成長して成長することを意味します.( ESP++ および ESP-- )

4

1 に答える 1

1

DC ビットは osdev.org による名前で、Intel のマニュアルによると拡張方向です。数値は 2 つの方向にのみ進むことができます: 増加または減少します。DCビットはそれで遊ぶものです。

スタック セグメントのサイズを動的にする必要がある場合は、スタック セグメントを下に展開するデータ セグメントにすることができます (展開方向フラグが設定されています)。セグメント制限を動的に変更すると、スタック スペースがスタックの一番下に追加されます

于 2013-07-18T08:39:42.880 に答える