楼主的程序,不全。
楼主的程序,肯定是有错的,所以 RET 不能正常执行。
因此,讨论 RET 的用法,并无意义。
毛病,一定是在其它方面。
楼主应该把省略的代码,都显示出来。
ret指令用栈中的数据,修改IP的内容,从而实现近转移;
CPU执行ret指令时,进行下面两步操作:
(1)(IP)=((ss)*16+(sp))
(2)(sp)=(sp)+2
CPU执行ret指令时,相当于进行: pop IP,程序中ret指令执行后,(IP)=0,CS:IP指向代码段的第一条指令。
你仿真时在AJMP MAIN设个断点,就可以看到RET后程序会运行到这里,你Debug 看不到是因为单步步长有问题,比如Proteus里面的步进仿真,实际上不是逐个指令周期停下来的。
正常的应该跳回到AJMP MAIN.