プログラムカウンターシミュレーター

PC トレース

loop: のようなラベル、LOAD や ADD などの順次命令、BR label や BR +8 などの分岐に加え、JMP、CALL、RET、HALT を使用できます。

この学習用シミュレーターは、空でない各命令行にアドレスを割り当て、簡易的なプログラムカウンター(PC)の動きを追跡します。コード行、文、トークンのカウンターではなく、プログラミング言語のコンパイルや実行もしません。

命令リストを追跡する方法

  1. 1

    短いリストを入力

    1行に1つの固定長命令を記述し、必要なら loop: のようなASCIIラベルを使います。

  2. 2

    アドレスモデルを選択

    開始アドレス、1・2・4・8バイトの命令サイズ、16/24/32ビット幅、表示形式を設定します。

  3. 3

    追跡方法を設定

    認識される全分岐を一律に「分岐する」または「分岐しない」とし、1〜80ステップを選んで遷移を確認します。

対応するモデル

リスト項目 動作
LOADADDなどその他のopcode 選択した固定命令サイズ分だけ進む
BRBRABRANCHBEQBNEBGTBGEBLTBLEBZBNZJZJNZ 一律の分岐する/しない設定を適用
JMPJUMPGOTO ラベルまたは数値アドレスへ移動
CALLJSRBL / RETRETURN 模擬リターンアドレスを追加 / 取り出す
HALTHLTSTOP 現在のPCで停止

分岐先にはASCIIラベル、10進アドレス、0x付き16進アドレスを使えます。+8のように符号がある値は次の順次PCからの相対値、符号なしは絶対値です。アドレスは選択ビット幅で周回します。//;以降はコメントです。オペランドは表示するだけで評価しません。

制限とプライバシー

  • 入力は1,800文字で切り詰められ、200命令で解析を止めます。
  • 追跡は1〜80ステップです。すべての条件分岐が一つの共通設定を使います。
  • レジスター、メモリー、フラグ、パイプライン、遅延スロット、命令エンコード、可変長命令はエミュレートしません。
  • 通常モードではLivewireでリストをこのサイトへ送り、ステップ式モードではURLにも入ります。機密コードは貼り付けないでください。

よくある質問

いいえ。命令行にアドレスを割り当ててPCを追跡するもので、ソース行、文、トークンは数えません。

いいえ。少数の汎用的な制御opcodeだけを認識します。それ以外はPCを進めるだけで、オペランドは実行しません。

次の順次PCにオフセットを加えます。0x1000で4バイト命令なら分岐先は0x100Cです。

Livewire表示のためこのサイトへ送られ、ステップ式モードではURLにも入ります。外部解析APIは使いませんが、機密コードは避けてください。

関連ツール