1

これは、C とアセンブリを混合した PDP-11 コードです。以下では、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 (スタック ポインター) が元の値に復元されないことです。引数がスタックに格納された位置をまだ指しています。

4

2 に答える 2