code:cret - ikarishinjieva/unixV6-code-analyze-chs GitHub Wiki

Source

1428 /* -------------------------*/

1429 .globl cret

  • 进入cret函数前,R5存储的是待恢复栈的栈顶指针SP

1430 cret:

1431     mov r5,r1

  • 将待恢复栈的栈顶指针复制给R1

1432     mov -(r1),r4

1433     mov -(r1),r3

1434     mov -(r1),r2

  • 恢复存储在待恢复栈中的R4,R3,R2的值

1435     mov r5,sp

1436     mov (sp)+,r5

  • 将栈顶指针指向待恢复栈的栈顶
  • 退栈恢复被保护在栈中的r5(即下一个待退栈顶指针),至此待恢复的栈退出完毕
  • 参考环境指针

1437     rts pc
  • 退栈将PC恢复至函数调用前的状态
  • RTS指令参考编程技巧

1438

Ref

⚠️ **GitHub.com Fallback** ⚠️