dosbox汇编语言写比赛计时程序,程序运行,屏幕显示00:00:00,并开始按秒计时。每按下一次空格键,在下一行显示当前暂停的时刻,最多可计10次暂停时间。按下Q键,程序退出。
时间: 2024-03-17 10:45:46 浏览: 132
一个倒计时的程序,时间到则关闭系统(9KB)
好的,我明白了你的要求。以下是程序的代码:
```
.model small
.stack 100h
.data
hour db 0
minute db 0
second db 0
count db 0
.code
main proc
mov ax, @data
mov ds, ax
mov ah, 0
int 1ah ; 获取系统时间
mov hour, ch
mov minute, cl
mov second, dh
mov ah, 2h
mov dl, 0 ; 清屏
int 21h
mov ah, 9h
lea dx, prompt1 ; 显示提示信息
int 21h
lea dx, time ; 显示初始时间
mov ah, 9h
int 21h
mov ah, 1h
int 21h ; 等待用户按键
cmp al, 20h ; 判断是否是空格键
jne start
pause:
mov ah, 2h
mov dl, 0 ; 清屏
int 21h
mov ah, 9h
lea dx, prompt2 ; 显示提示信息
int 21h
lea dx, time ; 显示当前时间
mov ah, 9h
int 21h
inc count
cmp count, 10 ; 判断是否已经暂停了10次
je end
mov ah, 1h
int 21h ; 等待用户按键
cmp al, 20h ; 判断是否是空格键
je start
end:
mov ah, 2h
mov dl, 0 ; 清屏
int 21h
mov ah, 9h
lea dx, prompt3 ; 显示退出信息
int 21h
mov ah, 4ch
int 21h ; 退出程序
start:
mov ah, 2h
mov dl, 0 ; 清屏
int 21h
inc second ; 秒数加1
cmp second, 60
jne time1
mov second, 0
inc minute ; 分钟数加1
cmp minute, 60
jne time1
mov minute, 0
inc hour ; 小时数加1
time1:
mov ah, 0
int 1ah ; 获取系统时间
mov ch, hour
mov cl, minute
mov dh, second
lea dx, time
mov ah, 9h
int 21h
mov ah, 1h
int 21h ; 等待用户按键
cmp al, 20h ; 判断是否是空格键
je pause
cmp al, 71h ; 判断是否是Q键
jne start
jmp end
prompt1 db 'Press SPACE to start timing.', 0ah, 0dh, '$'
prompt2 db 'Press SPACE to resume timing or Q to quit, maximum 10 pauses allowed.', 0ah, 0dh, '$'
prompt3 db 'Program terminated.', 0ah, 0dh, '$'
time db 'Time: 00:00:00', 0ah, 0dh, '$'
main endp
end main
```
解释:
1. 首先,使用 `int 1ah` 中断获取系统时间,并将小时数、分钟数、秒数存储在 `hour`、`minute`、`second` 变量中。
2. 调用 DOS 中断 `int 21h` 的 2号功能,将屏幕清空。
3. 显示提示信息,询问用户是否开始计时。
4. 如果用户按下空格键,则开始计时,并在屏幕上显示当前时间。计时每秒加1,如果秒数达到60,则加1分钟;如果分钟数达到60,则加1小时。
5. 如果用户按下空格键,则暂停计时,并在屏幕上显示当前时间。
6. 如果用户按下Q键,则退出程序。
7. 如果用户已经暂停了10次,则不再允许暂停,直接退出程序。
希望这个程序能够满足你的要求。
阅读全文