【发布时间】:2011-01-07 11:02:49
【问题描述】:
我正在开发一个用于学习目的的小型引导加载程序。是否有任何关于 bios 中断调用所需的(免费)堆栈大小的规范/信息?
【问题讨论】:
标签: stack overflow interrupt bios
我正在开发一个用于学习目的的小型引导加载程序。是否有任何关于 bios 中断调用所需的(免费)堆栈大小的规范/信息?
【问题讨论】:
标签: stack overflow interrupt bios
在进入中断处理程序之前,所有寄存器连同远返回地址一起被推入堆栈,将寄存器大小相加并添加存储返回地址所需的空间以获得最小堆栈大小。
请注意,如果您在中断处理程序中将更多数据推入堆栈,您将需要更多空间
【讨论】:
从http://www.o3one.org/hwdocs/bios_doc/pci_bios_21.pdf(第 3 页的“调用约定”)看来,BIOS 调用最多可以使用 1024 字节的堆栈空间。我的谷歌搜索没有出现任何其他来源。
【讨论】:
简单的答案是 BIOS 在加载引导扇区之前用于进行中断调用(包括用于从 USB 闪存驱动器加载引导扇区的 int 13h)的堆栈足以供引导扇区使用。
令人高兴的答案是 BIOS 中断(除了较新膨胀的 PCI)被设计为在最小空间内执行,因此无需在引导扇区中设置堆栈。
【讨论】: