qik*_*qik 9 assembly bootloader
我不明白这段代码:
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
Run Code Online (Sandbox Code Playgroud)
在设置堆栈指针之前,我们要做什么操作呢?
我认为最后一行的评论总结如下:
buffer: ; Disk buffer begins (8k after this, stack starts)
Run Code Online (Sandbox Code Playgroud)
内存布局如下所示:
+-------------------+ <-- 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
Run Code Online (Sandbox Code Playgroud)
有关段落的评论略显迟钝; 我发现以字节为单位更容易思考,其中16个字节构成一个段落.
这些神奇数字的原因:
请注意,代码中的数字4096 = 4KB正常显示,因为SP寄存器需要一个以字节为单位的值.所有其他值都在段落中,因为它们与SS有关,后者是段寄存器.