2011-07-10 10 views
3

イムブートローダを書き込み、私は私のように積み重ね設定...スタックセグメントをリアルモードで正しく設定しましたか?

STACK_SEGMENT equ 0x0050 
STACKP_OFFSET equ 0x03FF 

mov ax, STACK_SEGMENT 
mov ss, ax 
mov sp, STACKP_OFFSET 

は、私がこれを行うことにより、スタック領域の1024バイトを割り当てるのですか? 0x00900に他のものをロードするのは適切ですか? 0x00900はスタックデータの直後にあるはずです。

答えて

1

0x500と0x900の間に何もロードしていない限り、これは1024バイトのスタックスペースを提供します。また、スタックを上書きすることなく0x900にデータを格納することは安全です。覚えておくべきことの1つは、スタックとデータセグメントが異なる場合、spまたはbp以外のレジスタを使用してスタック上のデータにアクセスするには、セグメントプレフィックスを使用する必要があることです。

+0

プレフィックスとはどういう意味ですか? – TheFuzz

+0

@TheFuzzセグメントプレフィックスを追加して、デフォルト以外のセグメントからデータをロードします。スタックセグメントを使って 'bx'から' ss'という接頭辞を追加してデータをロードすることができます: 'mov ax、ss:[bx]'。 – ughoavgfhw

+0

スタック・データにアクセスするために 'bp'や' sp'以外のレジスタを使用するのはなぜですか?申し訳ありませんが、私はかなり理解していません。 – TheFuzz

関連する問題