使用汇编语言编写程序:
2. 实现秒表,即从0秒开始进行计时,随着时间经过变更显示的秒数(例如经过10秒则显示10,最多100秒。可以有0.1秒以内的误差。)提示:变更已显示的内容可以清屏后重新显示,清屏可以用 MOV AX,3
INT 10H
DATAS SEGMENT
;此处输入数据段代码
counter db 0
counter1 db 0
counter2 db 0
delay_count equ 60000 ; 延迟计数器的值,根据实际需要调整
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
;此处输入代码段代码
mov ax, 3 ; 清屏
int 10h
mov bx, 0
ptf_2: ;百位
mov dl, [counter2]
add dl, '0' ; 转换为ASCII码
mov ah, 02h
int 21h ; 调用BIOS中断显示字符
ptf_1: ;十位
mov dl, [counter1]
add dl, '0' ; 转换为ASCII码
mov ah, 02h
int 21h ; 调用BIOS中断显示字符
ptf_0: ;个位
mov dl, [counter] ; 将计数器的值加载到dl寄存器
add dl, '0' ; 转换为ASCII码
mov ah, 02h
int 21h ; 调用BIOS中断显示字符
mov di, 30 ; 延迟一段时间
set_cx:
mov cx, delay_count ; 初始化延迟计数器
delay_loop:
dec cx ; 计数器减1
jnz delay_loop ; 如果计数器不为0,则继续循环延迟
dec di
jnz set_cx
inc [counter]
mov ax, 3 ; 清屏
int 10h
cmp [counter2], 1 ;检查是否超过100秒
je reset_c
cmp [counter], 10 ; 检查计时器0是否超过10秒
jne ptf_2 ; 如果未超过10秒
cmp [counter], 10
je ad_1
ad_1: ;十位进位
inc [counter1]
mov [counter], 0
cmp [counter1], 10
je ad_2
jmp ptf_2
ad_2: ;百位进位
inc [counter2]
mov [counter1], 0
jmp ptf_2
reset_c: ;重置时间为000
mov [counter], 0
mov [counter1], 0
mov [counter2], 0
jmp ptf_2
MOV AH,4CH
INT 21H
CODES ENDS
END START