読者です 読者をやめる 読者になる 読者になる

PDP-11のサブルーチン呼び出しと復帰について

PDP-11のサブルーチン呼び出しと復帰には,"スタックは使わない".
じゃぁ,戻り番地はどこに格納されるのかというと,レジスタに保存される.
このレジスタをリンクレジスタというらしい.

PDP-11だけでなくARMもこのタイプらしい.でもPDP-11はちょっと変わってて,リンクレジスタの内容を
"スタックに退避する"(呼び出し時),"スタックから戻す"(復帰時)ようになっている.いやちょっとまて,それってさっきと言ってることがちがくないか??

要するにまとめると

という事らしい.

図を見るほうが早いから載せる.
PDP-11の場合

jsr r5, 0x76                     STACK
+------+ 2.COPY +------+ 1.PUSH +-----+
|PC(R7)|------->|  R5  |------->| TOP |
+------+        +------+        +-----+

rts r5                           STACK
+------+ 1.COPY +------+ 2.POP  +-----+
|PC(R7)|<-------|  R5  |<-------| TOP |
+------+        +------+        +-----+

ARMの場合(ARM自体良く知らないので,想像)

jsr r5, 0x76
+------+ 1.COPY +------+
|PC(R7)|------->|  R5  |
+------+        +------+

rts r5
+------+ 1.COPY +------+
|PC(R7)|<-------|  R5  |
+------+        +------+

x86の場合(x86自体良く知らないので,想像)

jsr 0x76         STACK
+------+ 1.PUSH +-----+
|PC(R7)|------->| TOP |
+------+        +-----+


rts              STACK
+------+ 1.POP  +-----+
|PC(R7)|<-------| TOP |
+------+        +-----+