加入收藏 | 设为首页
广告位出租
中国论文网 >> 计算机 >> 计算机应用 >> 实现在Windows下直接读写内存的方法

实现在Windows下直接读写内存的方法

发布时间:2006-09-15 00:25

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

DESCRIPTION’demonstrate an intergrated menu’

EXETYPEWINDOWS

STUB’WINSTUB.EXE’

CODEPRELOAD MOVEABLE DISCARDABLE

DATAPRELOAD MOVEABLE MULTIPLE

HEAPSIZE1024

STACKSIZE8192

EXPORTSWndProc

/*----------

MEMORY.RC

直接读写内存的资源定义文件

----------*/

#include "memory.h"
分页:[1] 2 3 4  下一页
版权申明:未经书面授权请勿转载本站信息!!作品版权归所属媒体与作者所有!!
发表评论: 匿名发表 用户名: 查看评论
您将承担一切因您的行为、言论而直接或间接导致的民事或刑事法律责任
留言板管理人员有权保留或删除其管辖留言中的任意内容
本站提醒:不要进行人身攻击。谢谢配合。
Copyright © 2006 Chinalww.com. All rights reserved.中国论文网 版权所有