51单片机日记:说说长调短调及返回

 

每次仔细看遍书都会有收获。今天记录下子程序调用。其实呢,就是lcall或者acall到一个address,然后这时候其实sp指针是有动作的哦,然后通过ret可以将sp指针的变化弹到pc指针,回到程序,这个过程就是程序的调用啦。

 

  1.                ORG        1000H 
  2. Father:        MOV        A,        #0FFH 
  3.                LCALL      Son                   ;调用子程序 
  4.                LJMP       Father 
  5. Son:           ANL        A,        #0FH        ;高位清零 
  6.                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哇一定要成对使用避免错误产生~~~

奶牛 | 2012年06月4日
  • maplebeats 2012年06月4日 at 10:06 下午
    我擦,这是51单片机?怎么和我们学得相差这么多
    • 奶牛 2012年06月4日 at 10:41 下午
      是哇~~~
Comments are closed.