code:0723 ~ 0750 - ikarishinjieva/unixV6-code-analyze-chs GitHub Wiki
0723 /* ------------------------- */
0724 .globl _savu, _retu, _aretu
savu0725 _savu:
- 保存 sp(栈顶指针) 和 R5(环境指针) 到指定位置
- 共传入一个参数 设为 sav
- sav : 用于保存 sp 和 R5 的位置
0726 bis $340,PS
0727 mov (sp)+,r1
0728 mov (sp),r0
0729 mov sp,(r0)+
- R1 ← 函数返回地址
- R1 ← sav
0730 mov r5,(r0)+
0731 bic $340,PS
- sav ← sp 和 r5
0732 jmp (r1)
0733
- 函数返回
aretu , retu0734 _aretu:
- aretu 和 retu 都将 保存的sp和R5的值 还原
- 不同的是,aretu 从输入参数中还原,而retu直接从指定进程(参数为指定进程的user地址)的u.usav中还原
0735 bis $340,PS
0736 mov (sp)+,r1
0737 mov (sp),r0
0738 br 1f
- 函数返回地址 → R1
- 参数 → R0
0739
- 转到 0745
0740 _retu:
0741 bis $340,PS
0742 mov (sp)+,r1
0743 mov (sp),KISA6
0744 mov $_u,r0LIONS源代码为
- 函数返回地址 → R1
- 参数 → KISA6,(参看KISA6寻址)
- 注:
0743 [[pdp11:MOV|mov]] (sp),r0
为笔误
0745 1:
0746 mov (r0)+,sp
0747 mov (r0)+,r5
0748 bic $340,PS
0749 jmp (r1)
0750
- 函数返回