【求助】诡异的内存检测,高手帮忙看看。
dos吧
全部回复
仅看楼主
level 1
fjcweil9906 楼主
程序看不出毛病。
电脑是好的,双核Intel cpu,2G内存,运行dos、xp正常。
但是在 dos下 使用汇编写入内存会死机。
段地址为 0x09、0x20、0x40 都一样死机。
以下都只检测1段:0x9。
不能通过的内存主要在 0x300--0x400;0xA080 到 0xB000
表现为死机。
我试过两台电脑都是这样。
所以说诡异。
测试程序:
mov ax,0x09;//0x20 0x40 准备测试其他段 //常规内存 0--0x09
mov ds,ax
;//这里 sp=7bfc ss=cs=0 ds=9
mov cx,0x8000;0x8000 ;循环次数。
mov bx,0x7400 ;//ds=8 ;//0x8000 0x0000 要检测的内存首地址。
looprw_1:
mov ax,0x55aa
mov [bx],ax
mov ax,[bx]
cmp ax,0x55aa
je add_bx_1
jne err_rw1
add_bx_1:
add bx,2
cmp bx,0x0000;//结束地址。
je ok_rw1 ;//检测结束。
loop looprw_1 ;//继续检测。
ok_rw1:
call disp_str_ram_ok ;显示提示信息“内存正确”
jmp end_rw1
err_rw1:
call disp_str_ram_err ;显示提示信息“内存错误”
ret
2015年07月29日 13点07分 1
level 1
fjcweil9906 楼主
上面那个 mov bx,0x7400 ;//ds=8 的注释应该是ds=9
2015年07月29日 14点07分 2
level 1
fjcweil9906 楼主
好像和中断没有关系。读写内存之前,使用 cli 关闭中断,结果仍然死机。
不知道是否和双核有关系。
2015年07月30日 01点07分 3
level 1
真的哎。
起始地址为0,终止地址也为0,程序将检测段内全部内存。增加段循环,可以检测多段。
2015年08月07日 01点08分 4
level 1
你把系统核心区给改写了,还问为什么死机?
2015年08月09日 12点08分 5
我觉得系统核心区不会被改着,请看看楼下。
2015年08月28日 12点08分
level 1
fjcweil9906 楼主
0段到9段属于640k常规内存。640k=0xA0000。不知道哪些段可供用户使用?
我的程序运行在 0:A000,开机运行到 mbr,还没有进入 dos,
我的显示程序会调用bios中断int 16h,
bios中断程序在 F000段到 FFFF段,应该不会改着。
我看了中断向量表,int 0 到 int 19h 的程序入口地址基本都是 F000:xxxx 少数是 C000:xxxx 。
2015年08月28日 12点08分 6
显示程序会调用bios中断int 10h.int 0 到 int 1fh 的程序入口地址基本都是 F000:xxxx 少数是 C000:xxxx 。
2015年08月28日 13点08分
level 1
fjcweil9906 楼主
我不使用BIOS中断显示字符,而用这种显示,发现结果仍然一样。
mov ax,0xb800 ; 使gs指向显示内存
mov gs,ax ;
mov ah, 0Fh ; 0000: 黑底 1111: 白字
;mov al, 'K'
mov [gs:((80 * 1 + 39) * 2)], ax ; 屏幕第 1 行, 第 39 列。
2015年08月28日 13点08分 7
level 1
fjcweil9906 楼主
即使我完全不使用软中断INT6 INT10。
仅仅用 in al,60 读取键盘,用上面直接写显存的方法显示字符。
检测内存仍然一样的结果:死机。
按道理,本检测程序以外的内存都可以被改写。----至少可以改写640k常规内存啊。
为什么 1---20h段的内存都不能全部改写,每段里面总有些内存一写就死机。
这些段检测地址 0---4000h 好像都没有问题,但是整段检测(0--ffff)就有问题。
2015年11月21日 03点11分 9
level 1
fjcweil9906 楼主
发现即使使用了cli,我的 mbr 程序的寄存器ax、ds、es等等仍然被系统程序改变了。
导致我的代码被修改或者写入存储器的数据与ds、es改变后读出的数据不一致。
如何才能完全禁止后台的系统程序?
2015年11月22日 15点11分 10
测试程序是写入mbr运行的。用虚拟机测试。
2015年11月22日 15点11分
level 8
你真的有见过这么标准的
十五字

2015年11月24日 05点11分 11
1