📄 clock.asm
字号:
STACK segment para stack 'stack'
db 256 dup (0)
stack ends
data segment para public 'data'
count db 100
tenh db '1'
hour db '3',20h
tenm db '1'
minute db '0'
db ':'
tens db '5'
second db '0',0dh,'$'
data ends
code segment para public 'code'
start proc far
assume cs:code
push ds
xor ax,ax
push ax
mov ah,01
int 21h
cli
cld
mov ax,0000h
mov ds,ax
mov si,0020h
lodsw
mov bx,ax
lodsw
push ax;seg
push bx;offset
mov ax,data
mov ds,ax
assume ds:data
mov ax,0000h
mov es,ax
mov di,0020h
mov ax,offset timer
stosw
mov ax,cs
stosw
mov al,00110110b
out 43h,al
mov ax,11932
out 40h,al
mov al,ah
out 40h,al
in al,21h
push ax
mov al,0fch
sti
forever: mov dl,0ffh
mov ah,06
int 21h
jz disp
cmp al,20h
jz exit
disp:mov dx,offset tenh
mov ah,9
int 21h
mov al,second
waitcha: cmp al,second
jz waitcha
jmp forever
exit: cli
cld
pop ax
out 21h,ax
mov al,36h
out 43h,al
mov al,0
out 40h,al
out 40h,al
mov ax,0
mov es,ax
mov di,4*8
pop ax
stosw
pop ax
stosw
sti
ret
start endp
timer:push ax
push cx
sti
mov al,count
dec al
mov count,al
jnz int_ret
mov count,100
mov al,second
add al,1
aaa
mov second,al
jnc int_ret
mov al,tens
adc al,0
aaa
and al,0fh
mov tens,al
cmp al,6
jnz int_ret
mov al,0
mov tens,al
mov al,minute
add al,1
aaa
mov minute,al
jnc int_ret
mov al,tenm
adc al,0
aaa
and al,0fh
mov tenm,al
cmp al,6
jnz int_ret
mov al,0
mov tenm,al
mov al,tenh
mov cl,4
shl al,cl
mov cl,al
mov al,hour
and al,0fh
or al,cl
add al,1
daa
cmp al,24h
jz reseth
mov ch,al
mov cl,4
shr al,cl
or al,30h
mov tenh,al
mov al,ch
and al,0fh
or al,30h
mov hour,al
jmp int_ret
reseth: mov tenh,'0'
mov hour,'0'
int_ret:
mov al,second
and al,0fh
or al,30h
mov second,al
mov al,tens
and al,0fh
or al,30h
mov tens,al
mov al,tenm
and al,0fh
or al,30h
mov tenm,al
mov al,minute
and al,0fh
or al,30h
mov minute,al
cli
mov al,20h
out 20h,al
pop cx
pop ax
iret
code ends
end start
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -