Bios使用汇编语言打扰

时间:2019-05-08 03:56:34

标签: assembly

请有人告诉我如何在32位体系结构上使用NASM以汇编语言调用中断。我尝试了很多次,但结果不理想。 在Linux上出现“核心转储错误”,而在Windows上CMD没有任何反应。 我深入了解到,在32位用户应用程序中,它们在环3级下运行,而内核和驱动程序在环1中运行。 如果有人知道如何在用户级别执行此操作。 我跟着你管某人,他在c ++或c(带内联和外部程序集文件)的可视stdio上工作得很好,但是当我在外部文件或内联中调用任何中断时,Visual Studio会显示内存位置冲突错误

英特尔32位体系结构(环级)

1 个答案:

答案 0 :(得分:0)

要使用BIOS中断,请执行以下操作:

  • 确保BIOS存在并且其依赖的所有状态都未被修改。如果计算机使用UEFI引导,则BIOS不存在。如果操作系统已启动,则它会破坏BIOS所依赖的状态(例如PIC芯片配置,PIT配置,PCI配置空间,BIOS数据区域,IVT等)。

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

请注意,在某些特殊情况下(例如,由ACPI(VESA BIOS扩展)取代了旧的“高级电源管理” API),其中提供了一种保护模式接口(有时是可选的)。这些操作大多很麻烦(例如,涉及为“ 16位保护模式”设置特殊的描述符,并将二进制blob复制到其中),而且几乎没有麻烦。