我正在为教育目的编写一个小内核,并且正在考虑一种在实模式下设置堆栈的好方法。我从这里读到:http ://wiki.osdev.org/Memory_Map_%28x86%29 地址0x07E00到0x7FFFF保证可以免费使用。
因此,如果我将堆栈段设置为0x0900,这将使堆栈的范围从0x0900 << 4到0x0900 << 4 + 0xFFFF即0x09000到0x18FFF这意味着我将获得一个安全的0x10000字节的堆栈空间,对吧?
而且我可以将我的堆栈指针设置为 0,它也会在下一次推送时“下溢”到 0xFFFE?分割让我有点困惑。
这是代码的相关部分的外观:
BITS 16
ORG 0x0000
mov ax, 0x07C0
mov ds, ax ; ds = origin of code
mov ax, 0xB800
mov es, ax ; es = origin of video memory
mov ax, 0x0900
mov ss, ax
mov ax, 0
mov sp, ax