TAKEO

TAKEO

スタックマシンとレジスタマシンの違いについて

スタックマシンとレジスタマシン比較表

項目スタックマシンレジスタマシン
アーキテクチャスタック(LIFO構造)を使用して演算を行うレジスタ(CPU内部の高速メモリ)を使用して演算を行う
データ操作方法スタックトップを操作(データをプッシュ・ポップ)レジスタに直接データをロードし、指定したレジスタを操作
命令形式シンプルで短い命令が多いより多くのオペランドを必要とする命令が多い
メモリの使用スタックを使用(メインメモリの一部)レジスタを使用(CPU内部)
PUSH 3, PUSH 4, ADDLOAD R1, 3, LOAD R2, 4, ADD R3, R1, R2
効率性命令数が少ないが、スタック操作が必要なため遅くなる場合がある高速だが、命令数が多いためコード量が増える場合がある
操作の柔軟性オペランドはスタックトップのみ任意のレジスタを指定して柔軟に操作可能
ハードウェア構造シンプル(スタックポインタの管理のみ)複雑(複数のレジスタとその制御が必要)
使用される場面仮想マシン(例: Java Virtual Machine)実際の物理CPU(例: x86, ARM)
コードの可読性簡潔だが、動作を追跡するのが難しいこともある複雑だが、操作の流れが明確
パフォーマンスメモリへのアクセスが多く、CPUレジスタを活用しないため遅い場合があるCPUレジスタを活用し、高速な演算が可能


スタックマシン

1+2=3の演算を例にイメージします。

  1. スタックの初期状態は空とします。
  2. スタックへ1を積みます
  3. スタックへ2を積みます
  4. スタックから1と2を取り出して加算し、結果である3をスタックにプッシュします。
  • 特徴
    • スタックマシンでは演算の対象がスタックトップに限定されており、演算命令にオペランドを指定しません。
    • 全ての計算は「スタックを操作する命令の順序」によって進められます。

レジスタマシン

1+2=3の演算を例にイメージします。

  1. 初期状態以下とします。

    • レジスタは空
    • レジスタはR1、R2、R3の3つ
    • 1+2 の各項はメモリに乗っているとする
  2. メモリからR1に1をロードする

  3. メモリからR2に2をロードする

  4. R1とR2の値を加算し結果である3をR3に格納する

  • 特徴
    • 演算の柔軟性: 任意のレジスタを指定して演算を行える。
    • 命令の具体性: 演算対象を明確に指定する必要があり、命令が少し長くなる。
    • 効率性: レジスタ間の操作は高速で、スタック操作のオーバーヘッドがない。