汇编语言实验14动态显示时间
建议先自己思考问题的答案,不懂则返回看书
编程:以“年/月/日 时:分:秒”的格式,显示当前的日期、时间。
死循环法:
assume cs:code
data segment
db 9,8,7,4,2,0
data ends
code segment
start:
mov bx,data
mov ds,bx
mov si,0
mov bx,0b800h
mov es,bx
mov di,160*12+30*2
mov cx,6
s0:
push cx
mov al,ds:[si]
push ax
inc si
out 70h,al
in al,71h
mov ah,al
mov cl,4
shr ah,cl
and al,00001111b
add ah,30h
add al,30h
mov byte ptr es:[di],ah
add di,2
mov byte ptr es:[di],al
add di,2
pop ax
cmp al,0
je over
cmp al,7h
je kongge
ja fanxiegang
jb maohao
fanxiegang:
mov ax,'/'
jmp next
maohao:
mov ax,':'
jmp next
kongge:
mov ax,' '
jmp next
next:
mov byte ptr es:[di],al
add di,2
over:
pop cx
loop s0
jmp start ;产生死循环,再从头开始执行程序
mov ax,4c00h
int 21h
code ends
end start
中断例程法:(按键盘上的 ‘T’按键产生中断显示时间)
assume cs:code
code segment
start:
push cs
pop ds
mov ax,0
mov es,ax
mov si,offset int9
mov di,204h
mov cx,offset int9ends-offset int9
cld
rep movsb
push es:[9*4]
pop es:[200h]
push es:[9*4+2]
pop es:[202h]
cli
mov word ptr es:[9*4],200h
mov word ptr es:[9*4+2],0
sti
mov ax,4c00h
int 21h
int9:
jmp short int9start
data db 9,8,7,4,2,0
int9start:
push ax
push bx
push cx
push es
push di
push si
in al,60h
pushf
call dword ptr cs:[200h]
cmp al,14h ;T
jne int9ret
mov si,206h
mov bx,0b800h
mov es,bx
mov di,160*12+30*2
mov cx,6
s0:
push cx
push es
mov bx,0
mov es,bx
mov al,es:[si]
pop es
push ax
inc si
out 70h,al
in al,71h
mov ah,al
mov cl,4
shr ah,cl
and al,00001111b
add ah,30h
add al,30h
mov byte ptr es:[di],ah
add di,2
mov byte ptr es:[di],al
add di,2
pop ax
cmp al,0
je over
cmp al,7h
je kongge
ja fanxiegang
jb maohao
fanxiegang:
mov ax,'/'
jmp next
maohao:
mov ax,':'
jmp next
kongge:
mov ax,' '
jmp next
next:
mov byte ptr es:[di],al
add di,2
over:
pop cx
loop s0
int9ret:
pop si
pop di
pop es
pop cx
pop bx
pop ax
iret
int9ends:
nop
code ends
end start