我正在研究一个用于学习目的的小型引导程序。是否有关于bios中断调用所需的(自由)堆栈大小的规范/信息?
答案 0 :(得分:1)
在进入中断处理程序之前,所有寄存器都与远端返回地址一起被推送到堆栈,将寄存器大小加起来并添加存储返回地址所需的空间以获得最小的堆栈大小。
请注意,如果在中断处理程序中将更多数据推入堆栈,则需要更多空间
答案 1 :(得分:0)
从http://www.o3one.org/hwdocs/bios_doc/pci_bios_21.pdf(第3页的“呼叫约定”)看起来BIOS调用最多可以使用1024字节的堆栈空间。我的谷歌搜索没有发现任何其他来源。
答案 2 :(得分:0)
我注意到如果你使用int 0x13,你应该有一个至少4096字节的堆栈。现代BIOS通常具有AHCI兼容的int 0x13处理程序,并且由于AHCI非常复杂,因此BIOS int 0x13需要大量的堆栈空间。
在完美的世界中,BIOS应该拥有自己的堆栈,但许多BIOS依赖于您提供的堆栈。
答案 3 :(得分:0)
简单的答案是,在加载引导扇区之前,BIOS用于进行中断调用的堆栈(包括用于从USB闪存驱动器加载引导扇区的int 13h)足以用于引导扇区使用。
幸好的答案是BIOS中断(除了较新的膨胀PCI)设计为在最小空间内执行,因此无需在引导扇区中设置堆栈。