用汇编保存下CMOS内容后的不解(附源码),信息到底在哪里?

本文探讨了通过I/O接口读取CMOS时间的具体实现方式,并分享了一段用于读取和保存CMOS信息的源代码。作者在实验过程中发现了一些与预期不符的现象,特别是关于Alarm时间位的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

公开的I/O接口,70h,71h,甚至72h,73h我也试过,结果内容和70h,71h一样,在我改动BIOS设置后,发现两次的文件没有什么变化(时间变化除外),按国外的CMOS Memory Map,应该每个时间位后面跟一个Alarm时间位,事实上我打开前后,此位一直为零,是不是一旦开机,BIOS自动为此位清零?目前具体的东西不太清除,还不该尝试在这些Alarm位上写东西,因为我测试过两台电脑,都是AMI的BIOS,在BIOS中打开Alarm后没有发现如期的改动。请高人指点。

以下为我保存CMOS信息的源代码,大家可以放心尝试一下,假如你的结果和我说的不一样,请告诉我,比如在改动BIOS中Alarm后,生成的文件中各时间位后是否真的有响应变化。

assume cs:code,ds:data;,ss:stack

;stack segment stack

; db 2 dup(?)

;stack ends

data segment

biosdata db 126 dup(?)

filename db 'NowBios.txt',0

strcantcreate db 'Why can not create a file?','$'

strcantclose db 'Why can not close a file?','$'

strcantwrite db 'Why can not write the file?','$'

data ends

code segment

start: mov ax,data

mov ds,ax;以上两句确定数据段ds

mov cx,7Dh;此句确定readbios循环次数

mov bx,offset biosdata;确定写入的地点

mov al,0;从端口此位置开始读

readbios: out 70h,al;写入要从71h开始读的地址

mov ah,al;保存al

mov al,0

in al,71h;从端口71h(bios CMOS端口)读数据

mov ds:[bx],al;保存在地址段

mov al,ah;恢复al

inc al

inc bx;al++,bx++下一次读下一个

loop readbios

mov dx,offset filename;确定创建的文件名

mov cx,0

mov ah,3ch; 定义接口,创建文件

stc;CF位标志以确定以下中断成功进行

int 21h

jc errcantcreate;创建失败就输出错误信息

mov dx,offset biosdata;确定写入文件的信息从哪个地址开始

mov bx,ax;保存文件句柄

mov cx,7Dh;确定写入多少数据

stc;CF位标志以确定以下中断成功进行

mov ah,40h;将数据段的内容写入文件

int 21h

jc errcantwrite

mov ah,3eh;关闭文件

int 21h

jc errcantclose

jmp theend

errcantcreate: mov dx,offset strcantcreate

mov ah,9

int 21h

jmp theend

errcantclose: mov dx,offset strcantclose

mov ah,9

int 21h

jmp theend

errcantwrite: mov dx,offset strcantwrite

mov ah,9

int 21h

jmp theend

theend: mov ax,4c00h

int 21h

code ends

end start

不想编译的可以下载以下网址编译好的程序

http://disk24.sh.com/?vagr

http://groups.google.com/group/jiutianfile/files

最后生成的是16位的文件,通过UltraEdit查看就可以了,具体应该的含义可以参考CMOS Memory Map,希望你能告诉我你的电脑是否符合上述CMOS Memory Map。谢了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值