8086汇编怎么实现延时?

用loop循环好像太烧cpu了,还有其他方法吗?
2024-12-01 17:26:57
推荐回答(3个)
回答1:

用IO指令,但是你得先做试验。
比如IO给软盘寻址,会有很明显的时间延迟。
没有软盘没关系的,IO寻址不存在什么错误不错误的,因为是否错误是要编程者自己去判定的,你不需要理他,只需要试验下时间有多久就可以了。

回答2:

cpu不就是用来执行指令的吗?不会烧的。
还有种方法,可以外接芯片(比如8253)定时中断

回答3:

; 本程序通过编译,运行正确
Code Segment
Assume CS:Code,DS:Code
; -----------------------------------------
; Subroutine 延时指定的时钟嘀嗒数
; 入口:
; Didas=时钟嘀嗒数(1秒钟约嘀嗒18.2次,10秒钟嘀嗒182次。若延时不是秒的10数次倍,误差稍微大点)
Delay Proc Near
push dx
push cx
xor ax,ax
int 1ah
mov cs:Times,dx
mov cs:Times[2],cx
Read_Time: xor ax,ax
int 1ah
sub dx,cs:Times
sbb cx,cs:Times[2]
cmp dx,Didas
jb Read_Time
pop cx
pop dx
ret
Times dw 0,0
Delay EndP
; -----------------------------------------
Didas equ 182 ;延时10秒
Start: call Delay ;这个延时子程序与CPU速度没有关系,通用的
Exit_Proc: mov ah,4ch ;结束程序
int 21h
Code ENDS
END Start ;编译到此结束