假设程序从DELAY子程序正常返回,也就是接着执行主程序的POP ACC语句。
此时SP = 60H。执行的时候会把60H的数据弹出到ACC,并且SP减1。
因为前面有
MOV A,#55H
MOV R0,#A10 ;A10已经定义为60H。所以R0 = 60H
MOV @R0,A ;所以(60H) = 55H
所以执行完POP ACC后,ACC的数据为55H,SP = 5FH
然后执行主程序的RET,就把5FH和5EH的数据弹出到PC,并且SP - 2
所以SP = 5FH - 2= 5DH
执行前SP=60H,但由于要执行RET,所有还要弹出两个字节,因此变成了5DH,至于A的值,因为60H中的值为55H,而执行前有POP ACC,此时将SP栈顶也就是60H的值弹出给A,所以是55H
因为是执行后,执行后就是把delay子函数执行后,A加1了,而A与R0是指针关系,A变了,A所指向的地址内容也变了