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

九天雁翎 2008-03-26 03:21:12
公开的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。谢了

...全文
285 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
sandezi3 2008-07-17
  • 打赏
  • 举报
回复
额。。很早之前的帖子了。。。。
你的程序没有任何问题,主要是ALARM设置确实没有变。。。这个很正常,如果你仅仅在BIOS里面打开ALARM,而没有去设置ALARM的时间,BIOS是不会自动去设置的。这个需要你自己来设置的~ 所以每次开机都是0,正常现象:)
现在的新的BIOS里面在setup选项里面有设置ALARM的时间的选项,这边设置了也OK~ 但是我怀疑你用来测试的机器是老的BIOS啦,不支持这个功能。。。
knowledge_Is_Life 2008-05-01
  • 打赏
  • 举报
回复
我也想知道,正在找這方面的資料~~~~~
meiZiNick 2008-05-01
  • 打赏
  • 举报
回复
好像没那么简单,呵呵.
九天雁翎 2008-04-07
  • 打赏
  • 举报
回复
好的,谢谢大家,我到DOS里面试试
nosachow 2008-04-01
  • 打赏
  • 举报
回复
想问一下楼主你的程序是在OS(非DOS)下执行的吧,这样做就犯了一个原则性错误,在OS下你是没法取得对ring0的访问的,就是说IO port和memory都访问不到,所以你执行两次程序的内容是一样的。在DOS下执行你的程序试试。
xtdumpling 2008-03-28
  • 打赏
  • 举报
回复
1.mask NMI
2.I/O delay
3.也许BIOS设置Alarm默认时间是全零。
Alarm被设置的条件:a.BIOS设置RTC; b.应用程序设置RTC(?)

你可以试着在CMOS setup里面设置RTC,再读出来看看.
beijingbeerman 2008-03-27
  • 打赏
  • 举报
回复
mark
九天雁翎 2008-03-27
  • 打赏
  • 举报
回复
对了,看了你的程序,还是通过70H,71H,我的程序只是比你少了两个延时,不过也可以读出数据,你能具体说说你的程序和我的程序到底区别在哪里吗?
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


这样的读取是可以读到内容的,你可以去试试,问题是有时间
00h Seconds
02h Minutes
04h Hours
06h Day of Week
07h Day of Month
08h Month
09h Year

就是Alarm位不变而已
九天雁翎 2008-03-27
  • 打赏
  • 举报
回复
谢谢ui_ppoppopp ,我试试
ui_ppoppopp 2008-03-26
  • 打赏
  • 举报
回复
请如下读写 0x70/0x71

mov al, (address+0x80) ; mask NMI
out 0x70, al
jmp short $+2 ; I/O delay
in al, 0x71
jmp short $+2
; save al value ~~~~

请去下载INTEL ICH8的文档,参阅 9.6.2 章节。
http://www.intel.com/design/chipsets/datashts/313056.htm
9.6.2 Indexed Registers (LPC I/F—D31:F0)
The RTC contains two sets of indexed registers that are accessed using the two
separate Index and Target registers (70/71h or 72/73h), as shown in Table 111.
Table 111. RTC (Standard) RAM Bank (LPC I/F—D31:F0)
Index Name
00h Seconds
01h Seconds Alarm
02h Minutes
03h Minutes Alarm
04h Hours
05h Hours Alarm
06h Day of Week
07h Day of Month
08h Month
09h Year
0Ah Register A
0Bh Register B
0Ch Register C
0Dh Register D
0Eh–7Fh 114 Bytes of User RAM
用户 昵称 2008-03-26
  • 打赏
  • 举报
回复
有没有cmos的资料,也想研究一下大家

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧