以下是教育实模式 x86 操作系统 MikeOs 的代码开头。(mikeos.sourceforge.net) 据我了解,x86 堆栈向低内存“向下”增长,堆栈段寄存器 ss 指向堆栈段中可能的最低内存位置(偏移量 0)。那么,问题来了,为什么要在代码段中添加 4096bytes 才能创建 4K 堆栈呢?将 512 字节添加到代码段并将其存储在 ss 堆栈段中是否不够,因为引导扇区可能只有 512 字节长?
BITS 16
start:
mov ax, 07C0h ; Set up 4K stack space after this bootloader
add ax, 288 ; (4096 + 512) / 16 bytes per paragraph
mov ss, ax
mov sp, 4096
mov ax, 07C0h ; Set data segment to where we're loaded
mov ds, ax