在写一个操作系统时,时间和日期的显示功能是必不可少的,如果我们要写一个基于命令行的操作系统,通常要提供给用户两个有关时间日期的命令,即date和time。而在实模式下,可以方便地通过BIOS调用从CMOS获取当前时间及日期,然后加以处理并显示出来。BIOS中断0x1A是有关时间日期的调用,其中子功能0x02是获取当前时间,子功能0x04是获取当前日期:
需要注意的是,这两个BIOS调用的返回值是组合的BCD码,也就是说,在显示时我们需要先进行处理。所谓组合的BCD码,就是用二进制中的4位来表示一位十进制数,比如十进制数13,在二进制中表示为0x0D,而在组合式BCD码中表示为0x13。这样在组合式BCD码中一个字节就表示两位十进制数。
有了这些资料,再写date和time两个命令就比较轻松了,以下是WarmOS中的代码:
下面是显示时间的汇编代码:
下面是显示日期的代码,因为原理相似,不再详细注释,只注明寄存器值变化
好了,这样就可以为系统加上两个命令了,不过这只是在实模式下,在保护模式又另当别论了。