汇编延时子程序1S
这里给出一个使用8253计时器的汇编延时子程序,可以实现1秒的延时。
delay:
mov al, 0B6h ; 设置8253计时器为工作状态3,二进制计数器
out 43h, al ; 将指令发送给8253的控制端口
mov ax, 0 ; 计时器初值为0
out 40h, al ; 将计时器初值的低8位发送给8253的计数器0
mov al, ah
out 40h, al ; 将计时器初值的高8位发送给8253的计数器0
mov cx, 0 ; 循环计数器清0
delay_loop:
in al, 40h ; 读取8253的计数器0的值
test al, 01h ; 检查计数器是否溢出
jz delay_loop ; 若未溢出,继续循环
dec cx ; 循环计数器减1
jnz delay_loop ; 若循环计数器不为0,跳转到delay_loop继续循环
ret ; 返回
使用方法:
在需要延时的地方调用该子程序即可,例如:
call delay ; 延时1秒
注意:该延时子程序只是大概的延时,具体时间可能会因为CPU速度、调用该子程序前后的代码等因素而有所偏差。如果需要更精确的延时,可以考虑使用其他方法,如使用外部晶振、调整8253的计时频率等
原文地址: https://www.cveoy.top/t/topic/cnBt 著作权归作者所有。请勿转载和采集!