code:0723 ~ 0750 - ikarishinjieva/unixV6-code-analyze-chs GitHub Wiki

Source

0723 /* ------------------------- */

0724 .globl _savu, _retu, _aretu

savu
  • 保存 sp(栈顶指针) 和 R5(环境指针) 到指定位置
  • 共传入一个参数 设为 sav
    • sav : 用于保存 sp 和 R5 的位置
0725 _savu:

0726     bis $340,PS

0727     mov (sp)+,r1

0728     mov (sp),r0

  • R1 ← 函数返回地址
  • R1 ← sav
0729     mov sp,(r0)+

0730     mov r5,(r0)+

  • sav ← sp 和 r5
0731     bic $340,PS
0732     jmp (r1)
  • 函数返回
0733
aretu , retu
  • aretu 和 retu 都将 保存的sp和R5的值 还原
  • 不同的是,aretu 从输入参数中还原,而retu直接从指定进程(参数为指定进程的user地址)的u.usav中还原
0734 _aretu:

0735     bis $340,PS

0736     mov (sp)+,r1

0737     mov (sp),r0

  • 函数返回地址 → R1
  • 参数 → R0
0738     br 1f
  • 转到 0745
0739

0740 _retu:

0741     bis $340,PS

0742     mov (sp)+,r1

0743     mov (sp),KISA6

  • 函数返回地址 → R1
  • 参数 → KISA6,(参看KISA6寻址
  • 注:
LIONS源代码为0743 [[pdp11:MOV|mov]] (sp),r0为笔误
0744     mov $_u,r0
0745 1:

0746     mov (r0)+,sp

0747     mov (r0)+,r5

0748     bic $340,PS

0749     jmp (r1)
  • 函数返回
0750

Ref

Caller

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