在操作系统里,有时候需要从保护模式转换为实模式来调用BIOS一些功能。因此在硬件抽象层里,就需要提供这样的函数支持,这个函数代码如下:
#001 BOOLEAN
#002 NTAPI
#003 HalpBiosdisplayReset(VOID)
#004 {
#005 ULONG Flags = 0;
#006
#007 /* disable interrupts */
#008 Ke386SaveFlags(Flags);
#009 _disable();
#010
映射内存到虚拟8086的实模式。
#011 /* Map memory available to the V8086 real-mode code */
#012 HalpMapRealModeMemory();
#013
切换到实模式的中断处理。
#014 /* Use special invalid opcode and GPF trap handlers */
#015 HalpSwitchToRealModeTrapHandlers();
#016
配置实模式的IOPM和TSS。
#017 /* Configure the IOPM and TSS */
#018 HalpSetupRealModeIoPermissionsAndTask();
#019
#020 /* Now jump to real mode */
#021 HalpBiosCall();
#022
恢复中断处理函数。
#023 /* Restore kernel trap handlers */
#024 HalpRestoreTrapHandlers();
#025
恢复TSS和IOPM。
#026 /* Restore TSS and IOPM */
#027 HalpRestoreIoPermissionsAndTask();
#028
恢复低端内存。
#029 /* Restore low memory mapping */
#030 HalpUnmapRealModeMemory();
#031
恢复保存的状态寄存器。
#032 /* Restore interrupts if they were prevIoUsly enabled */
#033 Ke386RestoreFlags(Flags);
#034 return TRUE;
#035 }
上面函数是保存了现场状态后,就切换到虚拟8086实模式,这样才可以调用BIOS功能,这是由于在保护模式下不能运行BIOS的程序决定的。
原文地址:https://www.jb51.cc/react/308522.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。