用汇编语言编写数字时钟程序问题
时间:2011-12-21
来源:互联网
在屏幕上显示一数字时钟,能够实现时间的校准,能够实现定时,即当定时时间到后计算机的BP喇叭给出提示。
作者: alissa2 发布时间: 2011-12-21
别人的代码:
;*****************************
;数据定义
data segment
count dw 0
hour dw 0
min dw 0
sec dw 0
row db 0
clom db 0
data ends
;*****************************
code segment
;------------------------------------------
;非驻留部分
main proc far
assume cs:code,ds:data
start:
push ds
sub ax,ax
push ax
mov ax,data
mov ds,ax
;读系统时间
mov ah,2ch
int 21h
mov bh,0
mov bl,ch
mov hour,bx
mov bh,0
mov bl,cl
mov min,bx
mov bh,0
mov bl,dh
mov sec,bx
;保存原来的中断1CH
mov al,1ch
mov ah,35h
int 21h
push es
push bx
push ds
mov count,18
;设置新的中断1CH
mov dx,offset clock1
mov ax,seg clock1
mov ds,ax
mov al,1ch
mov ah,25h
int 21h
;程序驻留 用DOS中的31H号中断
mov ah,31h
mov al,0
int 21h
;恢复中断1CH
pop ds
pop dx
pop ds
mov al,1ch
mov ah,25h
int 21h
main endp
;--------------------------------
;驻留部分
;时钟中断程序
clock1 proc near
mov ax,data
mov ds,ax
;寄存器进栈
push ax
push bx
push cx
push dx
push ds
push es
dec count
jnz exit
;保存光标 用INT 10H中的3号中断
mov bh,0
mov ah,3
int 10h
mov row,dh
mov clom,dl
;设置光标 用INT 10H中的2号中断
mov bh,0
mov dh,0
mov dl,72
mov ah,2
int 10h
;计数和进位处理
inc sec
cmp sec,60
jnz noclear
mov sec,0
inc min
cmp min,60
jnz noclear
mov min,0
inc hour
cmp hour,24
jnz noclear
mov hour,0
noclear:
call show
mov count,18
;恢复光标 用INT 10H中的2号中断
mov ah,02h
mov bh,0
mov dh,row
mov dl,clom
int 10h
;寄存器出栈
exit:
pop es
pop ds
pop dx
pop cx
pop bx
pop ax
iret
clock1 endp
;---------------------------------
;显示时间子程序
show proc near
mov ax,hour
call bindec
mov bx,0
mov al,':'
mov ah,0eh
int 10h
mov ax,min
call bindec
mov bx,0
mov al,':'
mov ah,0eh
int 10h
mov ax,sec
call bindec
ret
show endp
;----------------------------------------
;将2为位数的整数转换为字符显示
bindec proc near
mov cx,10d
call decdiv
mov cx,1
call decdiv
ret
bindec endp
;-------------------------------------------
decdiv proc near
mov dx,0
div cx
;显示单个字符用INT 10H中的0E号中断
mov bx,0
add al,30h
mov ah,0eh
int 10h
mov ax,dx
ret
decdiv endp
;---------------------------------------------
code ends
;*******************************
end start
;*****************************
;数据定义
data segment
count dw 0
hour dw 0
min dw 0
sec dw 0
row db 0
clom db 0
data ends
;*****************************
code segment
;------------------------------------------
;非驻留部分
main proc far
assume cs:code,ds:data
start:
push ds
sub ax,ax
push ax
mov ax,data
mov ds,ax
;读系统时间
mov ah,2ch
int 21h
mov bh,0
mov bl,ch
mov hour,bx
mov bh,0
mov bl,cl
mov min,bx
mov bh,0
mov bl,dh
mov sec,bx
;保存原来的中断1CH
mov al,1ch
mov ah,35h
int 21h
push es
push bx
push ds
mov count,18
;设置新的中断1CH
mov dx,offset clock1
mov ax,seg clock1
mov ds,ax
mov al,1ch
mov ah,25h
int 21h
;程序驻留 用DOS中的31H号中断
mov ah,31h
mov al,0
int 21h
;恢复中断1CH
pop ds
pop dx
pop ds
mov al,1ch
mov ah,25h
int 21h
main endp
;--------------------------------
;驻留部分
;时钟中断程序
clock1 proc near
mov ax,data
mov ds,ax
;寄存器进栈
push ax
push bx
push cx
push dx
push ds
push es
dec count
jnz exit
;保存光标 用INT 10H中的3号中断
mov bh,0
mov ah,3
int 10h
mov row,dh
mov clom,dl
;设置光标 用INT 10H中的2号中断
mov bh,0
mov dh,0
mov dl,72
mov ah,2
int 10h
;计数和进位处理
inc sec
cmp sec,60
jnz noclear
mov sec,0
inc min
cmp min,60
jnz noclear
mov min,0
inc hour
cmp hour,24
jnz noclear
mov hour,0
noclear:
call show
mov count,18
;恢复光标 用INT 10H中的2号中断
mov ah,02h
mov bh,0
mov dh,row
mov dl,clom
int 10h
;寄存器出栈
exit:
pop es
pop ds
pop dx
pop cx
pop bx
pop ax
iret
clock1 endp
;---------------------------------
;显示时间子程序
show proc near
mov ax,hour
call bindec
mov bx,0
mov al,':'
mov ah,0eh
int 10h
mov ax,min
call bindec
mov bx,0
mov al,':'
mov ah,0eh
int 10h
mov ax,sec
call bindec
ret
show endp
;----------------------------------------
;将2为位数的整数转换为字符显示
bindec proc near
mov cx,10d
call decdiv
mov cx,1
call decdiv
ret
bindec endp
;-------------------------------------------
decdiv proc near
mov dx,0
div cx
;显示单个字符用INT 10H中的0E号中断
mov bx,0
add al,30h
mov ah,0eh
int 10h
mov ax,dx
ret
decdiv endp
;---------------------------------------------
code ends
;*******************************
end start
作者: leetow2003 发布时间: 2011-12-24
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28