5

我正在开发一个用于学习目的的小型引导加载程序。是否有任何关于 bios 中断调用所需的(免费)堆栈大小的规范/信息?

4

4 回答 4

1

在进入中断处理程序之前,所有寄存器与远返回地址一起被推入堆栈,将寄存器大小相加并添加存储返回地址所需的空间以获得最小堆栈大小。

请注意,如果您在中断处理程序中将更多数据推入堆栈,您将需要更多空间

于 2010-01-20T20:32:05.183 回答
0

我注意到如果你使用int 0x13你应该有一个至少 4096 字节的堆栈。现代 BIOS 通常具有与AHCI兼容的 int 0x13 处理程序,并且由于 AHCI 相当复杂,BIOS int 0x13 需要大量堆栈空间。

在完美的世界中,BIOS 应该有它自己的堆栈,但是许多 BIOS 依赖于您提供的堆栈。

于 2010-02-26T12:08:38.130 回答
0

http://www.o3one.org/hwdocs/bios_doc/pci_bios_21.pdf(第 3 页上的“调用约定”)看来,BIOS 调用最多可以使用 1024 字节的堆栈空间。我的谷歌搜索没有出现任何其他来源。

于 2010-01-20T20:30:05.420 回答
0

简单的答案是 BIOS 在加载引导扇区之前用于进行中断调用(包括 int 13h 以从 USB 闪存驱动器加载引导扇区)的堆栈足以供引导扇区使用。

令人高兴的答案是 BIOS 中断(除了较新的膨胀 PCI)被设计为在最小空间内执行,因此无需在引导扇区中设置堆栈。

于 2010-08-26T21:55:46.953 回答