RET指令

子程序的返回指令

RET是子程序的返回指令。

執行本指令時:

(SP)→PCH,然後(SP)—1→SP(SP)→PCL,然後(SP)—1→SP。

棧頂數據出棧賦值給ip寄存器。

執行過程


(SP)->PCH,然後(SP)-1->SP
(SP)->PCL,然後(SP)-1->SP
最終使sp-2

功能


從堆棧中退出pc的高8位和低8位位元組,把堆棧指針減2,從pc值處開始繼續執行程序。不影響任何標誌。
例子
主程序
MAIN:SETBP1.0;(1)開始主程序,P1.0口置1(P1.0口輸出為高,可以控制LED點亮)
LCALLDELAY;(2)此時當前堆棧指針加2,調用(6)DELAY延時子程序
CLRP1.0;(3)P1.0口清零(P1.0口輸出為低,可以控制LED熄滅)
LCALLDELAY;(4)此時當前堆棧指針加2,調用(6)DELAY延時子程序
LJMPMAIN;(5)跳轉到主程序,這樣LED實現循環點亮
子程序
DELAY:MOVR7,#250;(6)250-->R7
D1:MOVR6,#250;(7)250--->R6
D2:DJNZR6,D2;(8)(R6-1),等於零執行下一條,不等於零,則跳轉到D2
DJNZR7,D1;(9)(R7-1),等於零執行下一條,不等於零,則跳轉到D1
RET;(10)當前堆棧指針減2,返回到(3)CLRP1.0繼續執行MAIN主程序。
END.(11)程序結束(偽指令