欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

怎么在windows环境下调用bios中的代码(或程序)

更新时间: 2014-01-05 03:17:30 责任编辑: Author_N1

 

如何在windows环境下调用bios中的代码(或程序)?
这个问题困扰了我很久。早先的dos系统工作在实模式下,所有对地址的操作都是确确实实的对相应物理内存地址的操作。如:jmp 0010:7c00,确实是跳转到7d00这个物理地址上了。并且dos下bios代码的地址同物理内存地址一起参与编址。因此假如bios rom被编址为ffff:0000 - ffff:ffff(只是假如),那么调用bios rom中的代码就可以call ffff:0100这样去调用(假如这个ffff:0100存储了低级格式化程序)。或者使用Bios中断也可以调用bios rom中的代码。而windows下使用了虚拟地址,物理地址对应用程序是不可见的。应用程序被安装在一个4GB的框架中。实际的物理内存由操作系统管理(即物理地址到虚拟地址的映射)。那么该如何在windows下访问bios rom中的代码?
系统自带了一个debug命令行工具,使用这个工具居然就可以访问bios中的代码。。。。注意,我的系统是纯32的xp系统(win7下也可以)。它是怎么做到的?具体工作原理是什么?windows下bios代码是不是也被 映射到了某个区域?如果是,是神马时候映射到物理内存的?是加电时?还是什么时候?这个问题的背后是windows系统内存管理这样一个大机制。有时候越想越头晕。。。!!求大神解答!在这里小弟先谢谢了! 
--参考方法--
当时IBM认为我们的内存不可能超过1MB 所以把所有的硬件的映射地址都固定了
所以现在1MB一下的内存还是DOS时代的那个样子

至于为什么windows还能调用BIOS的中断只是兼容而已,利用了CPU的虚拟8086模式就可以了,但是有些中断还是不能使用的,例如INT13(硬盘中断)
--参考方法--
注意,我的系统是纯32的xp系统(win7下也可以)。它是怎么做到的?具体工作原理是什么?windows下bios代码是不是也被 映射到了某个区域?如果是,是神马时候映射到物理内存的?是加电时?还是什么时候?这个问题的背后是windows系统内存管理这样一个大机制。有时候越想越头晕。。。

1、32位保护模式下,启动了一个 V86模式,然后,利用虚拟内存管理模块,将 0xf0000 这个物理内存映射到你V86模式对应的这个地址。
2、C0000-FFFFF这段代码,CPU加电后一直存在,由芯片组控制映射的。ICH8\ICH9这些手册中有说明。
3、你就把C0000-FFFFF看成一个物理内存,操作系统当然有权利访问任何物理内存,也提供了函数MmMapIOxx..
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 03:17:30
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/20456/
本文WWW.DOC100.NET DOC100.NET版权所有。