c语言函数boiskey,怎么用c语言读取bios信息

; 郑重声明:本程序读出并以十六进制形式显示CMOS中的前64个基本信息,然后清零。

; 因此,不会设置CMOS参数者,请不要编译、运行本程序。若因此而造成的任何损失,

; 责任自负。特此声明。

; 因为Windows有保护CMOS信息的功能,所以,在Windows下运行本程序,只能看到显

; 示出来的CMOS基本信息,而看不出被清零的结果;若要看到被清零的结果,请在纯

; DOS下运行本程序。

; 本程序通过编译,运行正确

Code Segment

Assume CS:Code,DS:Code

CR equ 000DH

LF equ 000AH

; -------------------------------------

; 功能:显示指定地址(Str_Addr)的字符串

; 入口:

; Str_Addr=字符串地址(要求在数据段)

; 用法: Output Str_Addr

; 用法举例:Output PromptStr

Output MACRO Str_Addr

lea dx,Str_Addr

mov ah,9

int 21h

EndM

; -------------------------------------

; 功能:输出一个字符

; 入口:dl=要显示的字符

Output_Chr proc Near

push ax

mov ah,02h

int 21h

pop ax

ret

Output_Chr endp

; -------------------------------------

; 功能:输出回车换行

Output_CTLF proc Near

push ax

push dx

mov ah,02h

mov dl,0dh

int 21h

mov dl,0ah

int 21h

pop dx

pop ax

ret

Output_CTLF endp

; -------------------------------------

; Subroutine 延时指定的时钟嘀嗒数

; 入口:

; Didas=时钟嘀嗒数(1秒钟约嘀嗒18.2次,10秒钟嘀嗒182次。若延时不是秒的10数次倍,误差稍微大点)

Delay Proc Near

push dx

push cx

push ax

xor ax,ax

int 1ah

mov Times,dx

mov Times[2],cx

Read_Time: xor ax,ax

int 1ah

sub dx,Times

sbb cx,Times[2]

cmp dx,Didas

jb Read_Time

pop ax

pop cx

pop dx

ret

Times dw 0,0

Delay EndP

; -------------------------------------

; 功能:将AL中的低4位二进制数转换成十六进制显示的ASCII码

; 入口:AL

; 出口:AL=转换后的ASCII码

AL_ASCII Proc Near

cmp al,10 ;AL<10?

jb @@To_ASCII ;AL<10,按数字处理

add al,7 ;AL>=10,按大写字母处理

@@To_ASCII: add al,'0' ;转换成相应的数字或大写字母

ret

AL_ASCII EndP

; -------------------------------------

; 功能:将AL中的字节数据转换成十六进制显示的ASCII码,并在当前光标位置显示

; 入口:AL

; 出口:AX=转换后的ASCII码

Byte_ASCII Proc Near

push dx

push cx

push ax

mov cx,4

xor ah,ah ;将AH置0

shl ax,cl ;将AX左移4位

shr al,cl ;将AL右移4位

xchg ah,al

call AL_ASCII ;调用子程序,将AL中的值转换成相应的ASCII码

xchg ah,al

call AL_ASCII

mov dl,ah

call Output_Chr ;显示一个字符

mov dl,al

call Output_Chr

mov dl,'H'

call Output_Chr

mov dl,20h

call Output_Chr

pop ax

pop cx

pop dx

ret

Byte_ASCII EndP

; -------------------------------------

Didas equ 1 ;写入端口后延时50MS

Prompt_Str db 'CMOS basic information(heximal): ',CR,LF,CR,LF,'$'

Press_Key db 7,13,10,13,10,'Press any key to exit...$'

Start: push cs

pop ds

push cs

pop es ;使数据段、附加段与代码段同段

Output Prompt_Str ;提示显示CMOS内容

mov cx,64 ;CMOS内容字节数

xor al,al ;CMOS内存首地址

mov bl,8 ;每行显示8个字节的CMOS内容

Read_Byte: out 70h,al ;CMOS索引口地址

push ax ;入栈保存CMOS内存当前地址

in al,71h ;CMOS数据口地址

call Byte_ASCII ;将AL中的字节数据转换成十六进制显示的ASCII码,并在当前光标位置显示

pop ax

out 70h,al

push ax

xor al,al

out 71h,al ;清零

pop ax ;出栈恢复CMOS内存当前地址

inc al ;CMOS内存下一个地址

dec bl

jnz $+7

call Output_CTLF ;输出一个回车换行

mov bl,8

call Delay ;延时指定的时钟嘀嗒数

loop Read_Byte ;循环

Exit_Key: Output Press_Key

mov ah,1

int 21h

Exit_Proc: mov ah,4ch ;结束程序

int 21h

Code ENDS

END Start ;编译到此结束

取消

评论

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值