2011-07-10 48 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而不覆盖堆栈是安全的。需要注意的一件事是,如果堆栈和数据段不同,如果要访问除了spbp以外的任何寄存器的堆栈数据,则需要使用段前缀。

+0

你是什么意思的前缀? – TheFuzz

+0

@TheFuzz您可以添加一个段前缀,以便从默认段以外的段加载数据。您可以通过添加一个'ss'前缀来使用堆栈段从'bx'加载数据:'mov ax,ss:[bx]'。 – ughoavgfhw

+0

为什么以及何时使用“bp”和“sp”以外的寄存器来访问堆栈数据?对不起,我不是很理解。 – TheFuzz

相关问题