汇编语言写比赛计时器,程序运行,屏幕显示00:00:00,并开始按秒计时。每按下一次空格键,在下一行显示当前暂停的时刻,最多可计10次暂停时间。按下Q键,程序退出在dosbox运行
时间: 2024-03-16 20:47:37 浏览: 21
好的,我来给您编写这个汇编语言程序。
首先,我们需要使用INT 10h中断来进行屏幕显示操作。我们可以使用AH寄存器来指定不同的操作,如显示字符、清屏等。具体的操作码可以查阅相关资料。
下面是程序的具体实现:
```
.model small
.stack 100h
.data
msg db '00:00:00$' ; 存储显示的时间
paused_msg db 'Paused at 00:00:00$' ; 存储暂停时的时间
time db 0 ; 存储当前时间,单位为秒
paused_times db 0 ; 存储暂停的时间,最多10次
paused_flags db 0 ; 存储是否处于暂停状态的标志位,0表示未暂停,1表示已暂停
paused_count db 0 ; 存储暂停次数,最多10次
.code
mov ax, @data
mov ds, ax ; 初始化数据段
mov ah, 0 ; 清屏
mov al, 3
int 10h
mov ah, 9 ; 显示时间
mov dx, offset msg
int 21h
mov ah, 2 ; 设置光标位置
mov bh, 0
mov dh, 2
mov dl, 0
int 10h
; 主循环
main_loop:
mov ah, 1 ; 检测键盘输入
int 21h
cmp al, ' ' ; 判断是否按下空格键
je pause ; 如果按下空格键,则暂停计时
cmp al, 'q' ; 判断是否按下Q键
je exit_program ; 如果按下Q键,则退出程序
jmp continue ; 如果未按下空格键或Q键,则继续计时
pause:
cmp paused_count, 10 ; 判断暂停次数是否超过10次
je continue ; 如果超过,则不再暂停
mov paused_flags, 1 ; 设置暂停标志位
mov ah, 0 ; 获取系统时间
int 1Ah
mov paused_times[paused_count], time ; 存储暂停时的时间
mov ax, paused_count ; 显示暂停次数
add ax, 1
mov bh, 0
mov bl, 10
div bl
add al, '0'
mov byte ptr paused_msg+11, al
mov ax, paused_count
mov bh, 0
mov bl, 10
div bl
add al, '0'
mov byte ptr paused_msg+12, al
mov ax, paused_count
mov bh, 0
and al, 0Fh
add al, '0'
mov byte ptr paused_msg+13, al
mov dx, offset paused_msg
mov ah, 9 ; 显示暂停时的时间和次数
int 21h
add paused_count, 1 ; 暂停次数加1
jmp continue
continue:
; 计时器逻辑
cmp paused_flags, 0 ; 判断是否已暂停
je update_time ; 如果未暂停,则更新时间
mov ah, 0 ; 获取系统时间
int 1Ah
add time, 1 ; 时间加1秒
cmp time, 86400 ; 判断是否超过一天
jne update_time ; 如果未超过,则更新时间
mov time, 0 ; 如果超过,则重置时间为0
jmp update_time
update_time:
; 更新显示的时间
mov ah, 0
mov bl, time
mov cl, 6
div cl
mov byte ptr msg+7, ah ; 显示小时
mov byte ptr msg+9, al ; 显示分钟
mov ah, 0
mov bl, time
mov cl, 60
div cl
mov byte ptr msg+12, al ; 显示秒数
; 更新光标位置
mov ah, 2
mov bh, 0
mov dh, 2
mov dl, 0
int 10h
; 继续循环
jmp main_loop
exit_program:
mov ah, 4Ch
xor al, al
int 21h
end main_loop
```
程序的逻辑比较简单,主要就是一个计时器,每秒钟加1,然后更新屏幕上的时间显示。当用户按下空格键时,根据当前是否处于暂停状态来进行暂停或继续计时的操作,并在下一行显示当前暂停的时刻和暂停次数。最多可以暂停10次。
编译汇编程序的命令为:
```
tasm timer.asm
tlink timer.obj
```
编译后得到的可执行文件为timer.exe,可以在dosbox中运行。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://img-home.csdnimg.cn/images/20210720083646.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)