汇编语言中的 Bios 中断

Bios Interrupts in assembly language

如何在 32 位架构上使用 NASM 以汇编语言调用中断。我尝试了很多次,但结果并不理想。

在 Linux "core dump error" 和 Windows 上,CMD 上没有任何反应。我深入阅读了一些内容,在 32 位用户应用程序中,运行 在环 3 级别下,内核和驱动程序在环 1 中 运行。我如何在用户级别执行此操作?

我在 YouTube 上关注某人,他在 Visual Studio 上使用 C++ 或 C(使用内联和外部汇编文件)工作得很好,但是当我在外部文件或内联中调用任何中断时,Visual Studio 说内存位置冲突错误。

Intel 32 位架构(环级)。

您不能在 Linux 或 Windows 等 OS 下使用 BIOS(或 DOS)中断。使用系统调用 (Linux) 或 WinAPI 库调用 (Windows).

在 Linux 和 Windows 下工作的汇编中没有用于与您自己的进程之外的系统交互的可移植 ABI; MacOS 也不兼容。


要使用 BIOS 中断:

  • 确保 BIOS 存在并且它所依赖的所有状态都没有被修改。如果计算机使用 UEFI 启动,则 BIOS 不存在。如果 OS 已经启动,它会破坏状态(例如 PIC 芯片配置、PIT 配置、PCI 配置 space、BIOS 数据区、IVT,...) BIOS依赖.

  • 确保您处于实模式或类似模式。如果你的代码是 32 位的,那么你需要切换回实模式,或者设置一个 virtual8086 任务(及其监视器),或者使用某种模拟器(例如解释 BIOS 的代码而不是直接执行)。

请注意,有一些特殊情况(例如旧的 "Advanced Power Management" API 已被 ACPI 取代,VESA BIOS 扩展)提供保护模式接口作为一个(有时是可选的)替代方案。这些大多是痛苦的(例如,涉及为“16 位保护模式”设置特殊描述符并将二进制 blob 复制到其中)并且几乎不值得麻烦。