您的位置:首页 > 其它

汇编语言:以“年/月/日 时:分:秒”的格式,显示当前的日期、时间。

2012-09-14 16:33 726 查看
题目:访问cmos ram,用汇编语言编程,以“年/月/日 时:分:秒”的格式,显示当前的日期、时间。

我编写的程序是用直接写显存的方式,在屏幕中间显示系统的当前时间。

但是,有两点遗憾:1.这个时间是静态的,即程序访问cmos ram当时的时间,不是动态显示时间。

2.而且,没有清屏的程序,所以,当你显示过后,就会一直显示在屏幕上面。

我以后会改进的。

下面是我运行的结果:



我写的源代码在下面,里面有我的注释:

assume cs:code

code segment

start:  mov ax,0

mov al,9

mov si,0

mov cx,6    ;这里设置循环次数

s:      push cx

push ax

out 70h,al  ;将al送入端口70h

in al,71h   ;从端口71h处读出单元内容,放在al中 |  ax=00000000 12345678
;                                             |
mov ah,al          ;这里我举个例子====>       |  ax=12345678 12345678
mov cl,4    ;                                 |
;       |
shr ah,cl                  ;                  |  ax=00001234 12345678
;                                                     |
and al,00001111b  ;ax分成两个表示BCD码值的数据|  ax=00001234 00005678

add ah,30h

add al,30h        ;BCD码+30h=10进制数对应的ASCII码

mov bx,0b800h

mov es,bx

mov byte ptr es:[160*12+40*2][si],ah     ;显示十位数码

mov byte ptr es:[160*12+40*2+2][si],al   ;显示个位数码

pop ax

dec ax            ;指向前一数据单元

jmp s1

s0:     pop cx

add si,6

loop s

mov ax,4c00h

int 21h

s1:     cmp ax,10

ja s0

cmp ax,0

je s0

cmp ax,6      ;这里是判断插入符号(/,:)的位置

ja s2         ;ax>6,为年/月/日

je s3         ;ax=6,为日结尾

jb s4         ;ax<6,为时:分:秒

s2:     mov byte ptr es:[160*12+40*2+4][si],'/'  ;添加'/'

jmp s0

s3:     sub ax,2                                 ;打出一个空格

jmp s0

s4:     sub ax,1

mov byte ptr es:[160*12+40*2+4][si],':'  ;添加':'

jmp s0

code ends

end start


就是这些,我希望大家有什么建议和意见不妨给我留言或者评论,作为一个初学者,我很期盼您的指点,也很愿意分享我的发现和心得。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: