发布网友 发布时间:2022-04-22 10:02
共2个回答
热心网友 时间:2023-09-21 01:43
以下是不采用中断的程序。供参考。
DATAS SEGMENT
MESSAGE DB 'The message is ABC'
DB 0DH,0AH,'$'
DATAS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS
START:
MOV AX,DATAS
MOV DS,AX
MOV DX,OFFSET MESSAGE
MOV CX,5 ; 循环5次
@1:
MOV AH,9
INT 21H
MOV AX,18*5
CALL DELAY_PROC
LOOP @1
MOV AX,4C00H ; 返回DOS,主程序结束
INT 21H
DELAY_PROC PROC NEAR ; 延迟子程式, 延迟 ax/18秒
PUSH ES
PUSH DX
MOV DX,40H
MOV ES,DX
MOV DX,ES:[006CH] ;取系统1/18秒计数
ADD DX,AX ; 延时 x/18
DELAY10:
CMP ES:[006CH],DX ;时限到了?
JBE DELAY10 ;没
POP DX
POP ES
RET
DELAY_PROC ENDP
CODES ENDS
END START
热心网友 时间:2023-09-21 01:44
好久没有玩过汇编了,我猜代码是不是只执行一次,就结束了,里面已经包含了显示和延时,那你在最后加一个jmp START 是不是就实现了5秒一次?死循环,也可以做一个变量递减到零就退出吧