| 实现在Windows下直接读写内存的方法
| | 初中计算机论文windows以它一致的初中计算机论文图形用户界面、完善的初中计算机论文内存管理等特点,已被广大用户所接受,但在windows下,计算机已运行在保护模式,虽然windows已提供了一整套的内存管理函数,用户还是不可访问指定地址的内存,致使许多中、小型企业开发的计算机插件无法在windows下使用,因为编写驱动程序是很费事的。他们仅希望能直接读、写电路板所占的内存即可。本文介绍的是在windows 3.1下,用borland c++ 3.1编程环境,实现用户对内存直接读写的方法,读者不难将它移植到其它编程语言。 1.利用windows提供的各个段选择符标号,在c源程序中将选择符标号说明为外部变量。其对照表如下: 表1 2.利用宏定义makelong(段内偏移量,&段选择符标号)即可得到一个长指针。 3.经上述方法得到的指针与c语言中定义的指针是一样的。 4.如果使用的段是d000h或e000h或其它上位内存时,需改动windows的系统配置文件system.ini,利用字符编辑器,在[386enh]小节中加入emmexclude=xxxxyyyy一行,禁止windows使用这段存储空间。值xxxx和yyyy是16位内存范围。如开发的插件占用d000h段的64k,则应加入这样一行:emmexclude=d000-dfff。 利用这一方法,已使我们自己开发的电路板(占用d000h段),在windows控制下成功地运行了。考虑到读者没有相应的硬件,这里以读取中断向量、计算机rom的制造时间和对dos用户通讯区的读写为例,详见以下程序。对于dos用户通讯区的内容,读者可用dos的debug程序检查(d命令)和修改(e命令)。dos的用户通讯区在0040∶00f0h处开始,共计16个字节。在修改时请注意:从0040∶00f0h开始存放可显示ascii码字符串,并以0结尾。 ; memory.def 模块定义文件 name memory descriptiondemonstrate an intergrated menu exetypewindows stubwinstub.exe codepreload moveable discardable datapreload moveable multiple heapsize1024 stacksize8192 exportswndproc /*---------- memory.rc 直接读写内存的资源定义文件 ----------*/ #include memory.h memorymenu menu begin popup取中断向量[&i]
| | | |
|