code:cret - ikarishinjieva/unixV6-code-analyze-chs GitHub Wiki
- 用于恢复函数现场
- 常用于函数调用的现场保护
- 入口要求R5为之前堆栈的栈顶指针
1428 /* -------------------------*/
1429 .globl cret
1430 cret:
- 进入cret函数前,R5存储的是待恢复栈的栈顶指针SP
1431 mov r5,r1
1432 mov -(r1),r4
- 将待恢复栈的栈顶指针复制给R1
1433 mov -(r1),r3
1434 mov -(r1),r2
1435 mov r5,sp
- 恢复存储在待恢复栈中的R4,R3,R2的值
1436 mov (sp)+,r5
1437 rts pc
- 将栈顶指针指向待恢复栈的栈顶
- 退栈恢复被保护在栈中的r5(即下一个待退栈顶指针),至此待恢复的栈退出完毕
- 参考环境指针
1438
- 退栈将PC恢复至函数调用前的状态
- RTS指令参考编程技巧