用汇编语言写出体育比赛计时程序,程序运行,屏幕显示00:00:00,并开始按秒计时。每按下一次空格键,在下一行显示当前暂停的时刻,最多可计10次暂停时间。按下Q键,程序退出。使用dosbox
时间: 2024-03-17 08:42:29 浏览: 142
以下是用汇编语言编写的体育比赛计时程序:
```
.model small
.stack 100h
.data
timer db 0
pause_time db 0,0,0,0,0,0,0,0,0,0
pause_count db 0
keyval db 0
.code
main proc
mov ax, @data
mov ds, ax
mov ah, 0
int 16h ;清空键盘缓冲区
mov ah, 2
mov bh, 0
mov dh, 12
mov dl, 30
int 10h ;设置光标位置
mov ax, 0b800h
mov es, ax
mov di, 12*160+30*2
mov al, '0'
mov ah, 00110000b
stosw ;在指定位置显示“00:00:00”
stosw
stosw
stosw
stosw
stosw
mov pause_count, 0 ;初始化暂停时间和计数器
mov ah, 1
int 16h ;等待用户输入
mov keyval, al
cmp al, 'q'
je quit ;如果用户输入“q”,跳转到退出程序
count:
mov ah, 2
mov bh, 0
mov dh, 12
mov dl, 30
int 10h ;重新设置光标位置
mov ax, 0b800h
mov es, ax
mov di, 12*160+30*2
call show_timer ;显示当前计时器时间
cmp pause_count, 10
je count ;如果暂停次数达到10次,直接跳回计时
mov ah, 1
int 16h ;等待用户输入
mov keyval, al
cmp al, ' '
jne count ;如果用户输入不是空格键,直接跳回计时
inc pause_count ;如果是空格键,增加暂停次数
mov si, pause_count
dec si ;计算暂停时间应该存储的位置
mov al, timer
mov pause_time[si], al ;将当前计时器时间存储到暂停时间数组中
jmp count ;跳回计时
show_timer:
mov al, timer
mov bl, 10
div bl ;计算秒数
mov bh, 0
mov cl, 10
div cl ;计算分钟数
mov ch, 0
mov dl, al
add dl, '0'
mov dh, cl
add dh, '0' ;将分钟数和秒数转换成字符
mov si, 4
mov di, 12*160+33*2
mov ax, 0b800h
mov es, ax
rep stosw ;在指定位置显示计时器时间
inc timer ;增加计时器时间
ret
quit:
mov ah, 4ch
int 21h ;退出程序
main endp
end main
```
在 DOSBox 中编译和运行该程序的命令如下:
```
tasm timer.asm
tlink timer.obj
timer.exe
```
该程序会在屏幕上显示一个计时器,初始值为“00:00:00”,每按下一次空格键,会在下一行显示当前暂停的时刻,最多可计10次暂停时间。按下“q”键,程序退出。
阅读全文