【问题标题】:Possible to use bios interrupts in your code on linux?可以在 linux 上的代码中使用 bios 中断吗?
【发布时间】:2014-06-13 20:05:01
【问题描述】:

我在 Linux 中用汇编语言编写了一个简单的程序(使用 nasm),出于教育目的,我想使用 BIOS 中断而不是 linux 系统调用,这可能吗?

【问题讨论】:

  • 您可以使用 libx86,它在 x86 上使用 LRMI(Linux 实模式接口,与 DOS 上的 DPMI 相反),以及在 x86-64 上使用 x86 仿真。然后你打电话给LRMI_int(int_number, struct_with_registers)

标签: assembly nasm interrupt system-calls bios


【解决方案1】:

简短的回答是,不,这是不可能的。

更长的答案是 Linux 支持 virtual8086 模式(int vm86(unsigned long fn, struct vm86plus_struct *v86) 调用),它能够执行实模式代码(包括 BIOS 功能,如果设置正确)。然而; BIOS 期望许多不同的硬件处于特定/默认状态,并且 Linux(像所有好的操作系统一样)控制硬件并将其全部置于 BIOS 不可能期望的各种状态。因此,可能会调用 BIOS 函数,但您可以预期它们会崩溃、导致未知行为和/或破坏 Linux 本机设备驱动程序的正常运行。

还要注意,BIOS 功能无论如何都比 Linux 的本机设备驱动程序“非常差”(或者换句话说,如果它确实有效,您仍然不应该这样做);并且现在很多系统都使用 UEFI(在这种情况下根本不存在 BIOS 功能)。

【讨论】:

  • 这是“可能的”,因为 LRMI 存在:sourceforge.net/projects/lrmi 但是,我绝对同意在现代操作系统下使用 BIOS INTx 调用是一个坏主意,尤其是对于磁盘/屏幕/等常见任务键盘输入/输出。
【解决方案2】:

您可以组装 DOS 环境并使用 DOSBox 在 Linux 上运行它。或者,您可以为无操作系统(引导加载程序)编写它并在 VirtualBox 中运行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-24
    • 1970-01-01
    • 2012-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-01
    • 2011-09-05
    相关资源
    最近更新 更多