我不明白这段代码:
mov ax, 07C0h ; Set up 4K of stack space above buffer
add ax, 544 ; 8k buffer = 512 paragraphs + 32 paragraphs (loader)
cli ; Disable interrupts while changing stack
mov ss, ax
mov sp, 4096
sti ; Restore interrupts
在设置堆栈指针之前,我们要做什么操作呢?
答案 0 :(得分:9)
我认为最后一行的评论总结了它:
buffer: ; Disk buffer begins (8k after this, stack starts)
内存布局如下所示:
+-------------------+ <-- 07C0:0000, where the BIOS loads the boot sector
| 512 bytes of code |
+-------------------+
| 8KB set aside for |
| a disk buffer |
+-------------------+ <-- SS:0000
| 4KB of stack |
+-------------------+ <-- SS:1000 = SS:SP
关于段落的评论有点迟钝;我发现以字节为单位更容易思考,其中16个字节构成一个段落。
这些神奇数字的原因:
请注意,代码中的数字4096 = 4KB正常,因为SP寄存器需要一个以字节为单位的值。所有其他值都在段落中,因为它们与SS有关,这是一个段寄存器。