汇编语言中的 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 复制到其中)并且几乎不值得麻烦。
如何在 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 复制到其中)并且几乎不值得麻烦。