PDP-8
PDP-8では汎用スタックをアーキテクチャ上サポートしていないため、サブルーチンを呼び出すときや割り込みが発生したときのコンテキスト(プログラムカウンタやACなどのレジスタ値)をセーブする方法が確立されていない。その代わり、リターンアドレスとしてのプログラムカウンタ値がターゲットサブルーチンの先頭ワードに格納される。従って、間接ジャンプ命令でサブルーチンから戻ることができる。
以下のプログラムはサブルーチンを使うように改造した "Hello world" である。JMS命令でサブルーチンに飛び込むと、OUT1:の位置にある0が書き換えられる。


リエントラント性や再帰呼び出しを実現しようとすると、プログラマは自分でコールスタックを用意し、リターンアドレスをスタックにセーブしなければならない。また、ROMを使うのも困難である(プログラムが書き換え可能でないとサブルーチンを使えないため)。ROMにプログラムを格納する場合、以下のような回避方法があった。
実行時にはRAMにコピーする
RAMも一部内蔵したROMを使い、各ワードにフラグを設定してRAMを代替に使用するかどうかを指定する(要するに非常に特殊なメモリを使用する)。
サブルーチンを全く使わない。またはJMS命令の代わりに次のようなコードを使い、書き換え可能なメモリにリターンアドレスを置く。


JMS命令を使用するとデバッグが難しくなる。例えば、リターンアドレスの書き換えによって無限ループに陥ることもあるし、サブルーチンのアドレスを間違うとサブルーチンの先頭ではないワードをリターンアドレスで書き換えてしまうこともある。こういった誤りは実行してみないとわからないこともある。
マネージャは完全なPDP-8エミュレータを含んでいる必要がある(8命令のマシンなので難しくはない)。CIF命令をトラップした際、マネージャは次のジャンプ命令までの命令列をエミュレートする必要がある。実際、ジャンプ命令はCIF命令の直後にあるのが一般的で、エミュレーションで性能が大きく低下することはないが、小さな設計上の欠陥への対策としては大きい。
PDP-8/Aのころメモリ価格はさらに下落し、32Kワード以上も可能なレベルとなった。そこでPDP-8/Aでは8フィールド以上を扱える新たな命令群が追加された。フィールド番号は命令にハードコーディングされるのではなく、ACで指定できるようになった。しかし、そのころにはPDP-8は市場から消えつつあり、この新機能を使うよう修正された主要ソフトウェアはごく一部だけだった。
基本的なDMA方式 (three-cycle data break) がサポートされている。これにはプロセッサの支援が必要だった。本来ならば各I/Oデバイスが持つべき回路を共通化してプロセッサ側に置き、プロセッサがDMAアドレスレジスタとワードカウントレジスタを設定する。その後の3メモリサイクルでプロセッサはワードカウントを更新し、転送アドレスを更新し、最後に実際のI/Oデータワードをやりとりする。初期のPDP-8から備えられていた機能であるが、PDP-8/Eのころにはこの回路は非常に安価になったので、"one-cycle data break"が一般化した。これは個々のI/Oデバイス側にハードウェアによるDMAアドレスレジスタとワードカウントレジスタを持たせ、ディスクドライブや磁気テープなど高速I/Oデバイスとメモリ間でプロセッサを介さず直接メモリへの読み・書きをするDMAを行うものであり、実質3倍の転送性能となった。