本連載はHisa Ando氏による連載「コンピュータアーキテクチャ」の初掲載(2005年9月20日掲載)から第72回(2007年3月31日掲載)までの原稿を再掲載したものとなります。第73回以降、最新のものにつきましては、コチラにて、ご確認ください。

サブルーチンコールを行うJMS命令は、戻りアドレスをIX0に格納する仕様である。呼ばれたサブルーチンの中で、子供のサブルーチンを呼ぶ場合は、IX0の内容を退避し、子供のサブルーチンから戻った時にIX0を復元してからIX0を指定してJIN命令を発行すればリターンが出来る。従って、最大3重のネスティングしか出来ない4004と違って、退避するメモリ領域さえあれば何重のネスティングが行われても処理が可能である。但し、IX0レジスタの内容をアキュムレータ経由でメモリに書き出すには6命令が必要であり、また、メモリからIX0レジスタに戻すのに6命令を必要とするので、4004に比べて、多重にサブルーチンを呼び出す場合はこの12命令がオーバヘッドとなる。しかし、呼び出されるサブルーチンが100命令以上を実行するようなものであれば、我慢できるオーバヘッドである。また、子供のサブルーチンを呼び出さないサブルーチンの場合は、IX0を別の用途に使ってしまわなければ、IX0をメモリに退避する必要はなく、そのままJIN IX0でリターンが出来る。

JCN命令は8ビットのアドレス指定部しかなく、256命令の範囲内にしかジャンプできないが、4004のようにそのJCN命令を含む256命令語のページ内のアドレス指定とする方法と、8ビットの指定を-128~127のオフセットと見て、JCN命令の次の命令のアドレスを指すPCにこれを加算して飛び先のアドレスとする方法が考えられる。後者をPC相対アドレスと呼び、ページの切れ目を意識する必要が無いと言う利点があり、最初にあげたIBM 1130はこの方式を用いている。しかし、PC相対アドレスで飛び先のアドレスを計算するにはPCの値と符号拡張したオフセットの値を加算する必要があり、PCにインクレメンタではなく、12ビットのアダーや加算結果を保持するメモリアドレスレジスタなどを装備する必要がある。

ここでは、4004からハードウェアをあまり増やさないという前提でアーキテクチャを考えているので、4004と同様に、JCN命令は同一ページ内へのジャンプを行う仕様とした。しかし、MJアーキテクチャでは4004から52ビット分のレジスタを削減しているので、その分のトランジスタで、PC相対アドレスを計算するアダーなどを作るという手も考えられる。

更に、アキュムレータとキャリーフラグの操作を行うACC命令群も必須の命令である。このアキュムレータ命令としてMJアーキテクチャでは、次の命令を定義する。

  • NOP:ノーオペレーション
  • CLC、STC、CMC:キャリーCYのクリア、セット、反転
  • CLA、CMA、C2A:アキュムレータのクリア、否定、2's Complement
  • CLB:アキュムレータとキャリーをクリア
  • IAC、DAC:アキュムレータを+1、-1
  • TCC:キャリーをアキュムレータに入れ、キャリーをクリア
  • RAL、RAR:シフト命令
  • DAA、TCS:十進補正命令
  • KBP:キーボードエンコーディング

この命令定義は4004のアキュムレータ命令とほぼ同じであり、変更点は、NOPとアキュムレータの内容を2の補数化するC2A命令、アキュムレータだけをクリアするCLA命令を追加し、RAMチップを指定するDCL命令は不用であるので削除している点である。

4004では、オペランドが無く何の動作もしないNOP命令に4ビットの命令コードの1つを割り当てるという勿体無いことをしているが、MJアーキではNOPは4ビットの命令コードの1つであるACC命令の16種のサブ命令の中の1つとしており、8ビットの命令語を有効に利用している。

MJアーキのACC命令は4004と比べて命令が2種類増加しているが、4004は14種のアキュムレータ命令しか定義していないので、これで合計16種であり、全部入るスペースはある。