📄 1111.asm
字号:
data segment
m2 DB '0' ;分的十位
m1 DB '0' ;分的个位
DB ':' ;间隔
s2 DB '0' ;秒的十位
s1 DB '0' ;秒的个位
DB ':' ;间隔
ms2 DB '0' ;百分秒位
ms1 DB '0' ;十分秒位
ROW DB 0 ;行数
data ends
STACK SEGMENT
DW 16 DUP(0)
STACK ENDS
code segment
assume cs:code,ds:data,SS:STACK
start:
call clall2 ;调用清全屏
ag: call clear ;调用清显示部分屏幕
call list ;调用显示
call second ;调用一秒延时
MOV AH,0BH ;检测有键按下否?
INT 21H
CMP AL,00H ;AL=0,无键按下
JZ ag ;无键按下,转ag
MOV AH,08H ;有键,读键值AL
INT 21H
cmp al,'n'
jnz end1
nao: call dingshi ;调用定时子程序
jmp ag
end1: cmp al,'s'
jnz g1
call far ptr mb
jmp ag
g1: cmp al,1bh
jnz ag
mov ah,4ch
int 21h
;--------------------------------------------------日期
list proc near
push ax
push bx
push cx
push dx
mov ah,2ah
int 21h ;系统功能调用,读系统日期
push dx ;将DX入栈
mov dl,0
again1: sub cx,03e8h ;CX保存年,将CX-1000
js next1 ;CX为负跳next1
inc dl ;否则DL+1
jmp again1 ;跳至CX-1000
next1: add cx,03e8h ;CX+1000送CX
add dl,30h
mov ah,02h
int 21h ;显示DL,即CX的千位
mov dl,0 ;DL清零
again2: sub cx,0064h ;将CX-100
js next2
inc dl
jmp again2
next2: add cx,0064h
add dl,30h
mov ah,02h
int 21h ;显示DL,即CX的百位
mov dl,0
again3: sub cx,000ah ;将CX-10
js next3
inc dl
jmp again3
next3: add cx,000ah
add dl,30h
mov ah,02h
int 21h ;显示DL,即DX的十位
add cl,30h
mov dl,cl
mov ah,02h
int 21h ;显示CL的个位
mov dl,'-'
mov ah,02h
int 21h ;显示“-”
pop dx ;弹出DX
mov bl,dl ;将DL送BL
mov dl,0 ;将DL清零
again4: sub dh,000ah ;DH存月,将DH-10
js next4
inc dl
jmp again4
next4: add dh,000ah
add dl,30h
mov ah,02h
int 21h ;显示DH的十位,即月的十位
add dh,30h
mov dl,dh
mov ah,02h
int 21h ;显示DH的个位
mov dl,'-'
mov ah,02h
int 21h
mov dl,0
again5: sub bl,000ah ;DL存天
js next5
inc dl
jmp again5
next5: add bl,000ah
add dl,30h
mov ah,02h
int 21h
add bl,30h
mov dl,bl
mov ah,02h
int 21h
mov dl,' ' ;显示空格
mov ah,02h
int 21h
;--------------------------------------时间
mov ah,2ch ;系统功能调用,读系统时间
int 21h
push dx
mov dl,0
a1: sub ch,000ah ;CH存小时
js n1
inc dl
jmp a1
n1: add ch,000ah
add dl,30h
mov ah,02h
int 21h
add ch,30h
mov dl,ch
mov ah,02h
int 21h
mov dl,':'
mov ah,02h
int 21h ;显示“:”
mov dl,0
a2: sub cl,000ah ;CL存分钟
js n2
inc dl
jmp a2
n2: add cl,000ah
add dl,30h
mov ah,02h
int 21h
add cl,30h
mov dl,cl
mov ah,02h
int 21h
mov dl,':' ;显示“:”
mov ah,02h
int 21h
pop dx
mov dl,0
a3: sub dh,000ah ;DH存秒
js n3
inc dl
jmp a3
n3: add dh,000ah
add dl,30h
mov ah,02h
int 21h
add dh,30h
mov dl,dh
mov ah,02h
int 21h
pop dx
pop cx
pop bx
pop ax
ret
list endp
;------------------------------------定时程序
dingshi proc near
push ax
push bx
push cx
push dx
call clear ;调用清显示部分屏幕
mov dl, 'i'
mov ah,02h
int 21h
mov dl, 'n'
mov ah,02h
int 21h
mov ax,data
mov dx,ax
mov ah,01h
int 21h
sub al,30h
mov bh,al
mov ah,01h
int 21h
sub al,30h
mov bl,al
mov dl,':'
mov ah,02h
int 21h
mov ah,01h
int 21h
sub al,30h
mov dh,al
mov ah,01h
int 21h
sub al,30h
mov dl,al ;存输入数据,BHBL:DHDL
push dx
;----------------------------------------小时的十位的判断
shi10: mov ah,2ch
int 21h
mov dl,0
dao1: sub ch,0ah
js dao2
inc dl
jmp dao1
dao2:
cmp bh,dl ;判断小时的十位
jnz shi10
;-----------------------------------------小时的个位的判断
shi: mov ah,2ch
int 21h
mov dl,0
dao3: sub ch,0ah
js dao4
jmp dao3
dao4: add ch,0ah
cmp ch,bl ;判断小时的个位
jnz shi
;--------------------------------------------分钟的十位的判断
fen10: mov ah,2ch
int 21h
mov dl,0
dao5: sub cl,0ah
js dao6
inc dl
jmp dao5
dao6: mov bl,dl ;将DL中的分的十位送BL
pop dx ;将输入的DH,DL弹出
cmp bl,dh ;判断分的十位
push dx
jnz fen10
;--------------------------------------------------分钟的个位判断
fen: mov ah,2ch
int 21h
mov dl,0
dao7: sub cl,0ah
js dao8
jmp dao7
dao8: add cl,0ah
pop dx
cmp cl,dl ;判断分的个位
push dx
jnz fen
pop dx
mov dl,'s'
mov ah,02h
int 21h
mov dl,'t'
mov ah,02h
int 21h
mov dl,'o'
mov ah,02h
int 21h
mov dl,'p'
mov ah,02h
int 21h ;定时结束,显示STOP
pop dx
pop cx
pop bx
pop ax
ret
dingshi endp
;-------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -