以下是教育实际代码的开头 模式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
答案 0 :(得分:2)
以下是内存映射,以便于分析:
-------------- <— 07C0:0 boot loader memory starts
| |
| 512 bytes | For the boot loader code
--------------
| | It could be use for whatever purpose the author has planned
| | for this memory area.
| 4096 + 512 | (Maybe for the OS? Or stage2 loader? Who knows, it doesn't matter.)
| |
-------------- <- 19C0:0 - Stack Segment(SS):Stack Pointer(SP) - Max of the stack
| | /\
| 4KB stack | || Stack grows
-------------- 19C0:1000 - Start of the stack(bottom)
答案 1 :(得分:1)
答案 2 :(得分:0)
你是对的。
没有理由将4096添加到ss。需要512(仅在代码后移动)。也许作者会为一些数据保留这些4k字节?