我不明白这段代码:
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
代码。但是什么是“4K”?千字节?一世
没有得到它:)
在设置堆栈指针之前,我们需要进行所有这些操作吗?
最佳答案
我认为对最后一行的评论总结如下:
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有关,SS是段寄存器。
关于assembly - MikeOS引导加载程序中的堆栈段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3231607/