📄 clock.asm
字号:
data SEGMENT
COUNT DW 1
FLAG DB 1
MESS DB 30h,30h,':',30h,30h,':',30h,30h,0dh,24h
info1 DB 0dh,0ah,'1. Set Time$'
info2 DB 0dh,0ah,'2. Continue$'
info3 DB 0dh,0ah,'3. Quit$'
info4 DB 0dh,0ah,'MENU$'
info5 DB 0dh,0ah,'Choice:$'
infohour DB 0dh,0ah,'Please enter hour:',0dh,0ah,'$'
infominu DB 0dh,0ah,'Please enter minute:',0dh,0ah,'$'
infoseco DB 0dh,0ah,'Please enter second:',0dh,0ah,'$'
hour DB 3,?,3 dup('$')
minute DB 3,?,3 dup('$')
second DB 3,?,3 dup('$')
data ends
code segment
assume cs:code,ds:data
time proc near
push ds
push ax
push cx
push dx
mov ax,data
mov ds,ax
sti
cmp flag,1
jnz exit
dec count
jnz exit
mov dx,offset mess
mov ah,09h
int 21h
lea si,mess
inc byte ptr[si+7]
cmp byte ptr[si+7],39h
jbe next
inc byte ptr[si+6]
mov byte ptr[si+7],30h
next:
cmp byte ptr[si+6],35h
jbe next1
inc byte ptr[si+4]
mov byte ptr[si+6],30h
next1:
cmp byte ptr[si+4],39h
jbe next2
inc byte ptr[si+3]
mov byte ptr[si+4],30h
next2:
cmp byte ptr[si+3],35h
jbe next3
inc byte ptr[si+1]
mov byte ptr[si+3],30h
next3:
cmp byte ptr[si+1],39h
jbe next4
inc byte ptr[si]
mov byte ptr[si+1],30h
next4:
cmp byte ptr[si],31h
jbe next5
cmp byte ptr[si+1],34h
jnz next5
mov byte ptr[si],30h
mov byte ptr[si+1],30h
next5:
mov count,18
exit: cli
pop dx
pop cx
pop ax
pop ds
iret
time endp
main proc far
push ds
xor ax,ax
push ax
mov ax,data
mov ds,ax
mov ax,351ch
int 21h
push es
push bx
push ds
pushf
lea si,mess
mov ah,2ch
int 21h
call convert
popf
mov dx,offset time
mov ax,seg time
mov ds,ax
mov ax,251ch
int 21h
pop ds
in al,21h
and al,0feh
out 21h,al
delay:
mov ah,0h
int 16h
cmp al,1bh
jz menu
jmp delay
menu:
push ax
mov flag,0
mov dl,0ah
mov ah,02h
int 21h
mov dl,0dh
int 21h
lea dx,info4
mov ah,09h
int 21h
lea dx,info1
int 21h
lea dx,info2
int 21h
lea dx,info3
int 21h
lea dx,info5
int 21h
reenter:
mov ah,08h
int 21h
sub al,30h
cmp al,1
jz set1
cmp al,2
jnz nextset1
jmp set2
nextset1:
cmp al,3
jnz nextset2
jmp set3
nextset2:
jmp reenter
set1:
lea dx,infohour
mov ah,09h
int 21h
rehour:
lea dx,hour
mov ah,0ah
int 21h
cmp hour+1,2
jnz rehour
cmp hour+2,30h
jb rehour
cmp hour+2,32h
ja rehour
cmp hour+3,30h
jb rehour
cmp hour+3,39h
ja rehour
cmp hour+2,32h
jne nospecial
cmp hour+3,33h
ja rehour
nospecial:
mov al,hour+2
mov byte ptr[si],al
mov al,hour+3
mov byte ptr[si+1],al
lea dx,infominu
mov ah,09h
int 21h
reminute:
lea dx,minute
mov ah,0ah
int 21h
cmp minute+1,2
jnz reminute
cmp minute+2,30h
jb reminute
cmp minute+2,35h
ja reminute
cmp minute+3,30h
jb reminute
cmp minute+3,39h
ja reminute
mov al,minute+2
mov byte ptr[si+3],al
mov al,minute+3
mov byte ptr[si+4],al
lea dx,infoseco
mov ah,09h
int 21h
resecond:
lea dx,second
mov ah,0ah
int 21h
cmp second+1,2
jnz resecond
cmp second+2,30h
jb resecond
cmp second+2,35h
ja resecond
cmp second+3,30h
jb resecond
cmp second+3,39h
ja resecond
mov al,second+2
mov byte ptr[si+6],al
mov al,second+3
mov byte ptr[si+7],al
mov dl,0ah
mov ah,02h
int 21h
mov dl,0dh
int 21h
mov dl,0ah
int 21h
mov dl,0dh
int 21h
mov flag,1
jmp delay
set2:
mov dl,0ah
mov ah,02h
int 21h
mov dl,0dh
int 21h
mov dl,0ah
int 21h
mov dl,0dh
int 21h
mov flag,1
jmp delay
set3:
mov flag,0
pop ax
pop dx
pop ds
ret
convert proc near
push ax
mov al,ch
mov ah,0
call sixteentoten
mov [si],al
mov [si+1],ah
mov al,cl
mov ah,0
call sixteentoten
mov [si+3],al
mov [si+4],ah
mov al,dh
mov ah,0
call sixteentoten
mov [si+6],al
mov [si+7],ah
pop ax
ret
sixteentoten proc near
push cx
mov cl,10
div cl
add ax,3030h
pop cx
ret
sixteentoten endp
convert endp
main endp
code ends
end main
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -