用C写的一个读取BIOS时间的程序

/*
FileName: TIMEBIOS.C
Author  : Crystal.Chen
E-Mail  : crystal.chen.cc@gmail.com
Descrip : Get the BIOS time.
Version : 0.1
*/

#include <STDIO.H>
#include <BIOS.H>
#include <TIME.H>
#include <CONIO.H>

int main(void)
{
        long int bios_time;

        /* Clear screen at the beginning of program. */
        clrscr();

        cprintf("The number of clock ticks since midnight is:\r\n");
        cprintf("The number of seconds since midnight is:\r\n");
        cprintf("The number of minutes since midnight is:\r\n");
        cprintf("The number of hours since midnight is:\r\n");
        textcolor(9);
        cprintf("\r\nPress any key to quit:");

        textcolor(12);

        while(!kbhit()) {
                bios_time = biostime(0, 0L);

                gotoxy(50, 1);
                cprintf("%lu", bios_time);

                gotoxy(50, 2);
                cprintf("%.4f", bios_time / CLK_TCK);

                gotoxy(50, 3);
                cprintf("%.4f", bios_time / CLK_TCK / 60);

                gotoxy(50, 4);
                cprintf("%.4f", bios_time / CLK_TCK / 3600);
        }

        return 0;

}


引自:不详


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一个简单的汇编语言程序,可以实现电子秒表功能: ``` ; 电子秒表程序 ORG 100h ; 程序从100h地址开始 ; 定义常量 SECOND equ 1000 ; 每秒钟的计数值 KEY equ 60 ; 按键扫描码 ; 初始化 mov al, 0 ; 秒表计数器清零 mov bl, 0 ; 分钟计数器清零 mov cl, 0 ; 小时计数器清零 mov dh, 0 ; 显示小时数的十位清零 mov dl, 0 ; 显示小时数的个位清零 mov bh, 0 ; 显示分钟数的十位清零 mov ch, 0 ; 显示分钟数的个位清零 mov ah, 2 ; 设置光标位置 mov bh, 0 ; 页码 mov dh, 0 ; 行号 mov dl, 0 ; 列号 int 10h ; 调用BIOS中断显示光标 ; 主循环 loop: ; 检测按键 mov ah, 0 ; 设置功能号 int 16h ; 调用BIOS中断读取键盘输入 cmp ah, 0 ; 判断是否有键按下 je tick ; 如果没有键按下,则计时器加1秒 cmp al, KEY ; 判断是否按下开始/暂停键 je pause ; 如果按下开始/暂停键,则跳转到pause处理 cmp al, 1 ; 判断是否按下复位键 je reset ; 如果按下复位键,则跳转到reset处理 jmp loop ; 否则继续循环 ; 计时器加1秒 tick: inc al ; 秒表计数器加1 cmp al, 60 ; 判断是否达到1分钟 jl show_sec ; 如果没有,直接显示秒数 mov al, 0 ; 秒表计数器清零 inc bl ; 分钟计数器加1 cmp bl, 60 ; 判断是否达到1小时 jl show_min ; 如果没有,直接显示分钟数 mov bl, 0 ; 分钟计数器清零 inc cl ; 小时计数器加1 cmp cl, 24 ; 判断是否达到1天 jl show_hr ; 如果没有,直接显示小时数 mov cl, 0 ; 小时计数器清零 ; 显示小时数 show_hr: mov dh, cl ; 更新显示小时数的十位 shr dh, 4 ; 将高4位移到低4位 and dh, 0fh ; 取低4位 add dh, 30h ; 转换为ASCII码 mov dl, cl ; 更新显示小时数的个位 and dl, 0fh ; 取低4位 add dl, 30h ; 转换为ASCII码 mov ah, 2 ; 设置光标位置 mov bh, 0 ; 页码 mov dh, 0 ; 行号 mov dl, 8 ; 列号 int 10h ; 调用BIOS中断显示光标 ; 显示分钟数 show_min: mov bh, 0 ; 页码 mov ch, bl ; 更新显示分钟数的十位 shr ch, 4 ; 将高4位移到低4位 and ch, 0fh ; 取低4位 add ch, 30h ; 转换为ASCII码 mov cl, bl ; 更新显示分钟数的个位 and cl, 0fh ; 取低4位 add cl, 30h ; 转换为ASCII码 mov ah, 2 ; 设置光标位置 mov bh, 0 ; 页码 mov dh, 0 ; 行号 mov dl, 11 ; 列号 int 10h ; 调用BIOS中断显示光标 ; 显示秒数 show_sec: mov bh, 0 ; 页码 mov ah, 2 ; 设置光标位置 mov dh, 0 ; 行号 mov dl, 14 ; 列号 mov al, al ; 更新显示秒数的个位 and al, 0fh ; 取低4位 add al, 30h ; 转换为ASCII码 int 10h ; 调用BIOS中断显示光标 jmp loop ; 继续主循环 ; 暂停处理 pause: mov ah, 0 ; 设置功能号 int 16h ; 调用BIOS中断读取键盘输入 cmp al, KEY ; 判断是否按下开始/暂停键 jne pause ; 如果没有,则继续等待 jmp loop ; 否则回到主循环 ; 复位处理 reset: mov al, 0 ; 秒表计数器清零 mov bl, 0 ; 分钟计数器清零 mov cl, 0 ; 小时计数器清零 mov dh, 0 ; 显示小时数的十位清零 mov dl, 0 ; 显示小时数的个位清零 mov bh, 0 ; 显示分钟数的十位清零 mov ch, 0 ; 显示分钟数的个位清零 mov ah, 2 ; 设置光标位置 mov bh, 0 ; 页码 mov dh, 0 ; 行号 mov dl, 8 ; 列号 int 10h ; 调用BIOS中断显示光标 mov ah, 2 ; 设置光标位置 mov bh, 0 ; 页码 mov dh, 0 ; 行号 mov dl, 11 ; 列号 int 10h ; 调用BIOS中断显示光标 mov ah, 2 ; 设置光标位置 mov bh, 0 ; 页码 mov dh, 0 ; 行号 mov dl, 14 ; 列号 int 10h ; 调用BIOS中断显示光标 jmp loop ; 回到主循环 ; 程序结束 mov ah, 4ch ; 设置功能号 int 21h ; 调用DOS中断结束程序 ``` 这个程序使用了BIOS中断来读取键盘输入和显示输出。程序在主循环中不断计时,并且检测是否有键按下。如果检测到开始/暂停键,程序会进入暂停处理;如果检测到复位键,程序会进入复位处理;否则,程序会继续计时并且更新显示。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值