我正在编写一个用于教育目的的小内核,我正在考虑在实模式下设置堆栈的好方法。 我从这里读到: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