|
|
1
3
简单的答案是引导扇区有一个有效(可能很小)的堆栈,BIOS使用它。 令人高兴的是,3fh对于某些BIOS来说是一个有效的堆栈位置。在这种情况下,它是IVT的较低部分,这是因为这些中断向量没有被BIOS使用。这不是秘密。
|
|
|
2
1
我不相信BioSes会为你维持一个有效的堆栈。所以你应该在你的空闲内存中设置一个堆栈。我在引导加载程序中的一般启动顺序如下:
纳斯姆只做你说的。这是使用汇编的要点。每行汇编代码都有一个由计算机执行的操作码的1:1比例。因此,如果BIOS没有为您设置堆栈,并且您的汇编代码中没有在何处设置堆栈,那么堆栈将处于某种无效状态。纳斯姆 不会 插入魔术代码以设置堆栈。 |
|
|
3
0
我不熟悉NASM,但我很确定它将您的堆栈段寄存器(ss)设置为0以外的值,所以ss:sp指向完全不同的地方。 编辑:等等,是你的吗? 段 或 指针 设置为03FF? |
|
|
4
0
改变寄存器内容的不是汇编程序(通过可执行文件中的任何隐藏命令,在本例中是引导程序)。 根据英特尔手册,不是CPU导致SP包含如此奇怪的值。 http://www.intel.com/design/pentiumii/manuals/243192.htm 由于不存在运行代码的现有操作系统,导致SP(和其他寄存器)状态的唯一选项是BIOS。不幸的是,生物制品是封闭来源的“商业机密”,因此“为什么”的问题将留待回答。Coreboot http://www.coreboot.org/Welcome_to_coreboot 可能会给一些提示,为什么事情是这样的,但coreboot似乎做的事情有时非常不同于传统的生物。 |