概述
为了熟悉BIOS的各种中断功能,所以写来练练手。
注:以下所有中断均为BIOS中断,无DOS中断。
先说一下实现思路:
一、先能取得当前系统时间,查BIOS中断知道
7、时钟服务(Clock Service——INT 1AH)
00H —读取时钟“滴答”计数
01H —设置时钟“滴答”计数
02H —读取时间
03H —设置时间
04H —读取日期
05H —设置日期
06H —设置闹钟
07H —闹钟复位
0AH —读取天数计数
0BH —设置天数计数
80H —设置声音源信息
其中
(3)、功能02H
功能描述:读取时间
入口参数:AH=02H
出口参数:CH=BCD码格式的小时
CL=BCD码格式的分钟
DH=BCD码格式的秒
DL=00H——标准时间,否则,夏令时
CF=0——时钟在走,否则,时钟停止
调用1AH号中断的02H功能就可以得到当前系统的时间。
二、显示当前系统时间
查表
1、显示服务(Video Service——INT 10H)
00H —设置显示器模式
01H —设置光标形状
02H —设置光标位置
03H —读取光标信息式
04H —读取光标位置
05H —设置显示页
06H、07H —初始化或滚屏
08H —读光标处的字符及其属性
09H —在光标处按指定属性显示字符
0AH —在当前光标处显示字符
0BH —设置调色板、背景色或边框
0CH —写图形象素
0DH —读图形象素
0EH —在Teletype模式下显示字符
0FH —读取显示器模
10H —颜色
11H —字体
12H —显示器的配置
13H —在Teletype模式下显示字符串
1AH —读取/设置显示组合编码
1BH —读取功能/状态信息
1CH —保存/恢复显示器状态
其中
(19)、功能13H
功能描述:在Teletype模式下显示字符串
入口参数:AH=13H
BH=页码
BL=属性(若AL=00H或01H)
CX=显示字符串长度
(DH、DL)=坐标(行、列)
ES:BP=显示字符串的地址 AL=显示输出方式
0——字符串中只含显示字符,其显示属性在BL中。显示后,光标位置不变
1——字符串中只含显示字符,其显示属性在BL中。显示后,光标位置改变
2——字符串中含显示字符和显示属性。显示后,光标位置不变
3——字符串中含显示字符和显示属性。显示后,光标位置改变
出口参数:无
调用10H号中断的13H功能可以显示字符串,但是该功能入口参数是ASCII码,可是第一步中得到的是BCD码,所以必须有一个转码的过程。
一组BCD码4个位,可以直接转换为二进制数然后加上数字0的ASCII码即为该BCD对应数值的ASCII码。
三、动态显示当前时间
这是这程序的关键地方,实现方式,可以用程序查询当前时间若改变就重新显示当前时间,这只是最初的想法,并没有编码实现。理论上应该是可行的。
后来BIOS中断向量表,发现
8H号中断,是系统自动触发的中断,每隔1/18.2秒触发一次,这个时间远小于1秒,所以我们可以让这个中断的服务程序来刷新时钟的显示,
这个中断的的服务程序入口在
70H | 1CH | 28 | 指向每1/18.2秒时可执行的服务程序的入口。初始化时该向量指向一条IRET指令。用户可修改该向量,用户可修改该向量,使它指向自己的程序。 |
最后
以上就是无限哈密瓜为你收集整理的汇编语言裸机实现时钟程序-BCD转ASCII,修改中断向量表 的全部内容,希望文章能够帮你解决汇编语言裸机实现时钟程序-BCD转ASCII,修改中断向量表 所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复