【问题标题】:Stack size required for bios interrupt callbios 中断调用所需的堆栈大小
【发布时间】:2011-01-07 11:02:49
【问题描述】:

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

【问题讨论】:

    标签: stack overflow interrupt bios


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

        在理想情况下,BIOS 应该有自己的堆栈,但许多 BIOS 依赖于您提供的堆栈。

        【讨论】:

          【解决方案4】:

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

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

          【讨论】:

            猜你喜欢
            • 2017-06-26
            • 2012-06-26
            • 1970-01-01
            • 1970-01-01
            • 2016-04-06
            • 1970-01-01
            • 2013-03-22
            • 2011-11-21
            • 2021-11-15
            相关资源
            最近更新 更多