我想请教一下有关汇编语言延时子程序的问题?下面的子程序有点看不懂,请大家帮忙解释一下,谢谢!

DELY1: PUSH AX     ;延时子程序
PUSH CX
MOV CX,30H
DLY1: CALL DELY2
LOOP DLY1
POP CX
POP AX
RET
DELY2: PUSH CX
MOV CX,8000H
LOOP $
POP CX
RET

这个代码其实还是很清楚明了的。
DELY1: PUSH AX ;延时子程序,这里PUSH AX 其实可以不要的,因为AX没有做任何改动
PUSH CX ; 因为使用了CX来计数,所以先保存CX进堆栈
MOV CX,30H ; 循环30H也就是48次
DLY1: CALL DELY2 ; 在次调用一个延时子程序
LOOP DLY1 ; 循环,48次,不到次数则继续循环
POP CX ; 恢复被保护的原来CX的值
POP AX ; 恢复被保护的原来AX的值
RET ; 过程返回
DELY2: PUSH CX ; 内部调用的过程,也需要把CX当前的值保护进堆栈
MOV CX,8000H ; 循环8000H也就是32768次
LOOP $ ; $ 表示当前地址,也就是自己的地址,32768次循环不到则原地踏步
POP CX ; 恢复被保护的CX的值
RET ; 过程返回
温馨提示:答案为网友推荐,仅供参考
相似回答