每次仔细看遍书都会有收获。今天记录下子程序调用。其实呢,就是lcall或者acall到一个address,然后这时候其实sp指针是有动作的哦,然后通过ret可以将sp指针的变化弹到pc指针,回到程序,这个过程就是程序的调用啦。
- ORG 1000H
- Father: MOV A, #0FFH
- LCALL Son ;调用子程序
- LJMP Father
- Son: ANL A, #0FH ;高位清零
- RET ;返回主程序
过程是这样子的,首先father进程把FFH赋值给累加器A,然后调用子程序,这时候PC=(PC)+3 ; SP=(SP)+1 ;(SP)=(PC)L ; SP=(SP)+1 ;(SP)=(PC)H ; 然后开始跳到子程序son,在RET的时候,SP先弹值到(PC)H,然后SP-1,再弹值到(PC)L,最后SP-1回到初值,这样子,PC就又变为LJMP语句所在的地址了,也就是从LJMP开始继续执行。
PUSH与POP哇,LCALL/ACALL与RET哇一定要成对使用避免错误产生~~~
Comments (2)
Comments are closed.