这是 PDP-11 代码混合 C 和汇编。在下面,u.u_rsav 是一个数组指针,
savu(u.u_rsav);
这个函数的汇编代码是
_savu: bis $340,PS
mov (sp)+,r1
mov (sp),r0
mov sp,(r0)+
mov r5,(r0)+
bic $340,PS
jmp (r1)
似乎在进入过程之前,它首先推送参数,然后推送返回点 PC 值。因此,r1 存储 PC,r0 存储参数。我的困惑是 sp(堆栈指针)在汇编代码跳回调用点之前没有恢复到原始值。它仍然指向参数存储在堆栈中的位置。