写一个汇编语言写比赛计时器,按下空格键记忆当前时间,按下G键退出程序,dosbox运行
时间: 2024-03-16 21:45:26 浏览: 81
下面是一个汇编语言程序,可以实现一个比赛计时器。这个程序使用8086汇编语言编写,可以在DOSBox中运行。程序使用了INT 16h中断来读取键盘输入,并且使用了INT 10h中断来在屏幕上显示计时器的值。程序的计时器是以毫秒为单位的,并且支持按下空格键来记忆当前时间。
```
.model small
.stack 100h
.data
count dw 0 ;计时器计数器
.code
main proc
mov ax, @data
mov ds, ax
loop1:
mov ah, 0 ;读取键盘输入
int 16h
cmp al, ' ' ;如果按下空格键,则记忆当前时间
jne loop2
mov ah, 0
int 1ah ;获取当前时间
mov count, dx ;保存计数器值
jmp loop1
loop2:
mov ah, 0 ;读取键盘输入
int 16h
cmp al, 'g' ;如果按下G键,则退出程序
jne loop3
jmp done
loop3:
mov ah, 0 ;获取当前时间
int 1ah
sub dx, count ;计算时间差值
mov bx, dx ;将时间差值保存到bx中
mov ah, 0 ;清屏
mov al, 3
int 10h
mov ax, bx ;将时间差值保存到ax中
mov cx, 1000 ;将1000保存到cx中
div cx ;将时间差值除以1000,得到秒数
mov bx, ax ;将秒数保存到bx中
mov ax, bx ;将秒数保存到ax中
mov cx, 60 ;将60保存到cx中
div cx ;将秒数除以60,得到分钟数
mov dx, ax ;将分钟数保存到dx中
mov ax, bx ;将秒数保存到ax中
mov cx, 60 ;将60保存到cx中
div cx ;将秒数除以60,得到余下的秒数
mov ah, 2 ;将分钟数的十位数显示在屏幕上
mov bh, 0
mov dh, 0
mov dl, 0
mov al, dh
add al, 30h ;将数字转换为ASCII码
int 10h
mov ah, 2 ;将分钟数的个位数显示在屏幕上
mov bh, 0
mov dh, 0
mov dl, 1
mov al, dl
add al, 30h ;将数字转换为ASCII码
int 10h
mov ah, 2 ;将冒号显示在屏幕上
mov bh, 0
mov dh, 0
mov dl, 2
mov al, ':'
int 10h
mov ah, 2 ;将余下的秒数的十位数显示在屏幕上
mov bh, 0
mov dh, 0
mov dl, 3
mov al, ah
add al, 30h ;将数字转换为ASCII码
int 10h
mov ah, 2 ;将余下的秒数的个位数显示在屏幕上
mov bh, 0
mov dh, 0
mov dl, 4
mov al, dl
add al, 30h ;将数字转换为ASCII码
int 10h
jmp loop1 ;跳转到循环开始处
done:
mov ah, 4ch ;退出程序
int 21h
main endp
end main
```
这个程序的基本思路是,使用INT 16h中断来读取键盘输入,并判断用户是否按下了空格键或G键。如果按下了空格键,则使用INT 1ah中断获取当前时间,并将时间保存到计数器中。如果按下了G键,则退出程序。程序进入一个无限循环,在循环中使用INT 1ah中断获取当前时间,并计算与计数器的时间差值。程序将时间差值转换为分钟数和余下的秒数,并将它们显示在屏幕上。程序等待用户按下空格键或G键,以继续计时或退出程序。
阅读全文