8086汇编 按4键显示时间 首先提示用户对时,即用户输入时,分,秒(以空格或冒号分隔,以回车结束),然后,在屏幕上不断显示时间,格式为:××(时):××(分):××(秒),最好定点显示。用户按任一键,重新对时,按ESC键,返回主菜单。
时间: 2024-05-08 22:22:08 浏览: 14
以下是用8086汇编语言实现的按4键显示时间的程序:
```
assume cs:code, ds:data
data segment
time db 8, 0, 0, 0 ; 存储时、分、秒的数组
time_str db 9 dup('$') ; 存储时间字符串的数组
prompt db 'Please input the time (hh:mm:ss): $'
menu db 0ah, '1. Set Time', 0ah, '2. Exit', 0ah, 'Choose: $'
data ends
code segment
start:
mov ax, data
mov ds, ax
call clear_screen ; 清屏
; 显示菜单
mov ah, 09h
lea dx, menu
int 21h
; 等待用户选择
mov ah, 01h
int 21h
cmp al, '1'
jne exit
set_time:
; 提示用户输入时间
call clear_screen
mov ah, 09h
lea dx, prompt
int 21h
; 读取用户输入
mov si, offset time_str
mov cx, 9
call read_string
; 解析用户输入
mov si, offset time_str
mov cl, 2
call parse_time ; 解析时
mov cl, 2
call parse_time ; 解析分
mov cl, 2
call parse_time ; 解析秒
; 显示时间
call clear_screen
call show_time
; 不断显示时间
mov ah, 00h
int 16h
cmp ah, 03h ; 检测是否按下任意键
je set_time
cmp ah, 1bh ; 检测是否按下ESC键
jne $-1
jmp start
exit:
mov ah, 4ch
int 21h
clear_screen:
mov ah, 06h
mov al, 0
mov bh, 07h
mov cx, 0a0h
mov dx, 0000h
int 10h
ret
read_string:
mov ah, 01h
int 21h
cmp al, 0dh ; 检测是否按下回车键
je end_read_string
mov [si], al
inc si
dec cx
jnz read_string
end_read_string:
mov [si], '$'
ret
parse_time:
xor bh, bh
mov bl, [si]
inc si
cmp bl, '0'
jae @f
add bl, 10
@@:
shl al, 1
shl al, 1
add al, bl
dec cl
jnz parse_time
ret
show_time:
; 存储当前时间
mov ah, 2ch
int 21h
mov [time+1], ch
mov [time+2], cl
mov [time+3], dh
; 显示时间
lea si, time
mov cl, 3
mov dh, 0
mov dl, 0
mov bh, 0
mov ah, 02h
@@:
mov al, [si]
add al, 30h
mov ah, 0eh
int 10h
cmp dh, 2
je @F
cmp dh, 1
jne @F1
mov ah, 02h
mov dl, ':'
int 21h
@@:
cmp dh, 0
je @F2
add dl, 3
jmp @F3
@F1:
cmp dl, 9
jne @F2
mov ah, 02h
mov dl, ':'
int 21h
add dh, 1
mov dl, '0'
mov ah, 02h
int 21h
@@:
add dl, 1
@F2:
inc si
dec cl
cmp cl, 0
jnz @@
@F3:
mov ah, 02h
mov dl, '.'
int 21h
mov ah, 02h
mov dl, '0'
int 21h
mov ah, 02h
mov dl, 0dh
int 21h
mov ah, 02h
mov dl, 0ah
int 21h
ret
code ends
end start
```
该程序通过 BIOS 中断 2ch 获取当前时间,然后将时间格式化为字符串并显示在屏幕上。用户可以按下任意键重新设置时间,或按下 ESC 键返回主菜单。