




下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实现在Windows下直接读写内存的方法 Windows以它一致的图形用户界面、完善的内存管理等特点,已被广大用户所接受,但在Windows下,机已运行在保护模式,虽然Windows已提供了一整套的内存管理函数,用户还是不可访问指定地址的内存,致使许多中、小型开发的计算机插件无法在Windows下使用,因为编写驱动程序是很费事的。他们仅希望能直接读、写电路板所占的内存即可。本文介绍的是在Windows 3.1下,用Borland C+ 3.1编程环境,实现用户对内存直接读
2、写的方法,读者不难将它移植到其它编程语言。 1.利用Windows提供的各个段选择符标号,在C源程序中将选择符标号说明为外部变量。其对照表如下: 表1 2.利用宏定义MAKELONG(段内偏移量,&段选择符标号)即可得到一个长指针。 3.经上述方法得到的指针与C语言中定义的指针是一样的。 4.如果使用的段是D000H或E000H或其它上位内存时,需改动Windows的系统配置文件SYSTEM.INI,利用字符编辑器,在386Enh小节中加入EmmExclude=xxxxyyyy一行,禁止Windows使用这段存储空间。值xxxx和yyyy是16位内存范围。如开发的插件占用D
3、000H段的64K,则应加入这样一行:EmmExclude=d000-dfff。 利用这一方法,已使我们自己开发的电路板(占用D000H段),在Windows控制下成功地运行了。考虑到读者没有相应的硬件,这里以读取中断向量、计算机ROM的制造时间和对DOS用户通讯区的读写为例,详见以下程序。对于DOS用户通讯区的内容,读者可用DOS的DEBUG程序检查(D命令)和修改(E命令)。DOS的用户通讯区在004000F0H处开始,共计16个字节。在修改时请注意:从004000F0H开始存放可显示ASCII码字符串,并以0结尾。 ; MEMORY.DEF 模块定义文件 NAME M
4、emory DESCRIPTIONdemonstrate an intergrated menu EXETYPEWINDOWS STUBWINSTUB.EXE CODEPRELOAD MOVEABLE DISCARDABLE DATAPRELOAD MOVEABLE MULTIPLE HEAPSIZE1024 STACKSIZE8192 EXPORTSWndProc /*- MEMORY.RC 直接读写内存的资源定义文件 -*/ #include "memory.h" MemoryMenu
5、60;MENU BEGIN POPUP"取中断向量&I" BEGIN MENUITEM "int 0&3h", IDM-INT03H MENUITEM "int &10h", IDM-INT10H MENUITEM "int &21h", IDM-INT21H END POPUP "ROM区域&R" BEGIN MENUITEM "制造时
6、间&T", IDM-TIME MENUITEM "取用户通讯区&U", IDM-READ MENUITEM "存用户通讯区&S", IDM-WRITE END MENUITEM "a退出&X", IDM-EXIT END /*- MEMORY.H 直接读写内存的头文件 -*/ #define IDM-INT03H 101 #define IDM-INT10H102 #define IDM-INT21H10
7、3 #define IDM-TIME201 #define IDM-READ202 #define IDM-WRITE203 #define IDM-EXIT300 /*- MEMORY.C 用户对固定内存直接读写的表演程序 -*/ #include<windows.h> #include "memory.h" #include <dos.h> int PASCAL WinMain(HANDLE,HANDLE,LPSTR,int); long FAR
8、PASCAL WndProc(HWND,UINT,UINT,LONG); /*-WinMain()-*/ int PASCAL WinMain(HANDLE hInstance,HANDLE hPrevInstance ,LPSTR lpszCmdLine,int nCmdShow) MSG msg; HWND hWnd; WNDCLASS wndclass; if (! hPrevInstance) wndclass.style=CS-HREDRAW | CS-V
9、REDRAW; wndclass.lpfnWndProc=WndProc; wndclass.cbClsExtra=0; wndclass.cbWndExtra=0; wndclass.hInstance=hInstance; wndclass.hIcon=LoadIcon(NULL,IDI-APPLICATION); wndclass.hCursor=LoadCursor(NULL,IDC-ARROW); wndclass.hbrBackground=GetStockObject(WHITE-BRUSH); wndclass.lpszMenuName="MemoryMenu&quo
10、t; wndclass.lpszClassName="直接读写存储器" if (! RegisterClass (&wndclass) return FALSE; hWnd=CreateWindow( "直接读写存储器", "直接读写存储器", WS-OVERLAPPEDWINDOW, CW-USEDEFAULT, CW-USEDEFAULT, CW-USEDEFAULT, CW-USEDEFAULT, NULL, NULL, hInstance, NULL); if (!
11、160;hWnd) return FALSE; ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); while (GetMessage(&msg,N ULL,0,0)1 TranslateMessage(&msg);DispatchMessage(&msg);return msg.wParam;/*-WndProc()-*/long FAR PASCAL WndProc (HWND hWnd, UINT
12、 message, UINT wParam,LONG lParam)HDChDC;HPEN hOldPen,hNewPen;RECTrect;TEXTMETRICtm;PAINTSTRUCTps;UINT i;char Strbuf50;WORD far * InterruptVector;char far * bios;extern WORD-0000H;extern WORD-0040H;extern WORD-F000H;switch (message)case WM-COMMAND:switch (wParam)case IDM-INT03H:InterruptVector=(WORD
13、 far *)MAKELONG(0,&-0000H);wsprintf(Strbuf,"向量地址:%04X:%04XHn",*(InterruptVector+0x06),*(InterruptVector+0x07);MessageBox (hWnd,Strbuf,"int 03h", MB-OK | MB-ICONSTOP);return 0;case IDM-INT10H:InterruptVector=(WORD far *)MAKELONG(0,&-0000H);wsprintf(Strbuf,"向量地址:%04X:%
14、04XHn",*(InterruptVector+0x20),*(InterruptVector+0x21);MessageBox (hWnd,Strbuf,"int 10h",MB OK | MB-ICONSTOP);return 0;case IDM-INT21H:InterruptVector=(WORD far *)MAKELONG(0,&-0000H);wsprintf(Strbuf,"向量地址:%04X:%04XHn",*(InterruptVector+0x42),*(InterruptVector+0x43);Messa
15、geBox (hWnd,Strbuf,"int 21h",MB-OK | MB-ICONSTOP);return 0;case IDM-TIME:bios=(char far *)MAKELONG(0xfff5,&-F000H);MessageBox (hWnd,bios,"ROM制造时间",MB-OK | MB-ICONSTOP);return 0;case IDM-READ:bios=(char far *)MAKELONG(0xF0,&-0040H);MessageBox (hWnd,bios,"取用户通讯区内容",MB-OK | MB-ICONSTOP);return 0;case IDM-WRITE:bios=(char far *)MAKELONG(0xF0,&-0040H);for(i=0;i<10;i+) *(bios+i)='A'+i; *(bios+10)=0;MessageBox (hWnd,"Write 'A'-'J'char string !",&quo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 冰雪旅游项目2025年投资可行性区域旅游市场前景研究报告
- 智慧社区2025年大数据精准营销模型构建成果鉴定与社区服务创新报告
- 直接展示幼儿园数学试题及答案
- 建筑施工安全教育培训效果评估试题及答案
- 物理知识的深度2025年试题及答案
- 工业废气催化燃烧技术在冶金行业应用现状与环保策略报告
- 文艺团笔试题目及答案
- 有色金属资源循环利用产业链现状与2025年市场潜力分析报告
- 短视频平台内容监管与行业监管法律法规研究报告
- 施工现场安全数据分析试题及答案
- 电音节策划方案
- 贝恩杯案例分析大赛初赛题目
- 2023年江苏省南京市中考语文默写题复习(附答案解析)
- 全国各省市邮编对照表
- 行政区域代码表Excel
- YS/T 837-2012溅射靶材-背板结合质量超声波检验方法
- 烧烤类菜单表格
- DB11∕T 583-2022 扣件式和碗扣式钢管脚手架安全选用技术规程
- 酒水购销合同范本(3篇)
- 海康威视系统图标
- 印染厂管理手册
评论
0/150
提交评论