以下是教育实模式x86操作系统MikeOs的代码开头(mikeos.sourceforge.net)。据我所知,x86堆栈向“下”增长,即向低内存增长,并且堆栈段寄存器ss指向栈段中最低可能的内存位置(偏移量为0)。因此,问题是,为什么需要在代码段中添加4096字节才能创建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
sp
初始化为0,然后将堆栈段向前移动吗?考虑一下当您尝试将某些内容推送到堆栈上时会发生什么。假设您正在推送一个字:sp
减2, 并且会回绕到 0xFFFE。假设ss == 1
。将要写入的地址将是(1 * 0x10) + 0xFFFE == 0x1000E
,而不是(1 * 0x10) - 2 == 0x0E
。 - Michael