プログラムカウンターシミュレーター
loop: のようなラベル、LOAD や ADD などの順次命令、BR label や BR +8 などの分岐に加え、JMP、CALL、RET、HALT を使用できます。
この学習用シミュレーターは、空でない各命令行にアドレスを割り当て、簡易的なプログラムカウンター(PC)の動きを追跡します。コード行、文、トークンのカウンターではなく、プログラミング言語のコンパイルや実行もしません。
命令リストを追跡する方法
-
1
短いリストを入力
1行に1つの固定長命令を記述し、必要なら loop: のようなASCIIラベルを使います。
-
2
アドレスモデルを選択
開始アドレス、1・2・4・8バイトの命令サイズ、16/24/32ビット幅、表示形式を設定します。
-
3
追跡方法を設定
認識される全分岐を一律に「分岐する」または「分岐しない」とし、1〜80ステップを選んで遷移を確認します。
対応するモデル
| リスト項目 | 動作 |
|---|---|
LOAD、ADDなどその他のopcode |
選択した固定命令サイズ分だけ進む |
BR、BRA、BRANCH、BEQ、BNE、BGT、BGE、BLT、BLE、BZ、BNZ、JZ、JNZ |
一律の分岐する/しない設定を適用 |
JMP、JUMP、GOTO |
ラベルまたは数値アドレスへ移動 |
CALL、JSR、BL / RET、RETURN |
模擬リターンアドレスを追加 / 取り出す |
HALT、HLT、STOP |
現在のPCで停止 |
分岐先にはASCIIラベル、10進アドレス、0x付き16進アドレスを使えます。+8のように符号がある値は次の順次PCからの相対値、符号なしは絶対値です。アドレスは選択ビット幅で周回します。//と;以降はコメントです。オペランドは表示するだけで評価しません。
制限とプライバシー
- 入力は1,800文字で切り詰められ、200命令で解析を止めます。
- 追跡は1〜80ステップです。すべての条件分岐が一つの共通設定を使います。
- レジスター、メモリー、フラグ、パイプライン、遅延スロット、命令エンコード、可変長命令はエミュレートしません。
- 通常モードではLivewireでリストをこのサイトへ送り、ステップ式モードではURLにも入ります。機密コードは貼り付けないでください。
よくある質問
いいえ。命令行にアドレスを割り当ててPCを追跡するもので、ソース行、文、トークンは数えません。
いいえ。少数の汎用的な制御opcodeだけを認識します。それ以外はPCを進めるだけで、オペランドは実行しません。
次の順次PCにオフセットを加えます。0x1000で4バイト命令なら分岐先は0x100Cです。
Livewire表示のためこのサイトへ送られ、ステップ式モードではURLにも入ります。外部解析APIは使いませんが、機密コードは避けてください。
関連ツール
バイナリからASCIIへの変換ツール
バイナリ(スペース区切りのバイト、または長いビット列)を貼り付けると、それが表すASCIIテキストを取得できます。7ビットと8ビットのエンコードに対応。
BinaryからHexへのコンバーター
バイナリ入力を大文字の16進数値に変換します。0と1以外は無視され、先頭の0は保持されません。
Base64 → Hex 変換ツール
Base64文字列を、その背後にあるバイトの16進表現へ変換します。トークン、鍵、証明書、JWTの確認に便利です。
ASCII 2進数変換ツール
任意のASCII文字列を2進数表現に変換します。各文字は8ビットになり、スペース区切りで出力されるため、プロトコルトレースや宿題にそのまま貼り付けられます。
BBCodeからHTMLへのコンバーター
BBCode(掲示板マークアップ)をきれいなHTMLへ変換します。装飾タグ、リスト、引用、コード、画像、リンク、表に対応。
2進数から10進数へ変換
2進数を瞬時に10進数へ変換します。各ビットがどのように寄与するかが分かる位取り展開を表示します。