AsmWalker は、C言語とアセンブラの対応を1命令ずつ確認しながら学べるブラウザ学習ツールです。
| アーキテクチャ | コンパイラ | 構文 |
|---|---|---|
| ARM Cortex-M | ARM GCC 11.2.1 / 13.2.0 / 14.3.0 / 15.2.0 | ARM 構文 |
| x86-64 | x86-64 GCC 14.2.0 | Intel 構文(-masm=intel) |
| RISC-V RV32IM | GCC 13.2.0 (-march=rv32im -mabi=ilp32) | RISC-V ASM 構文 |
コンパイルには Compiler Explorer(Godbolt) の公開 API を利用しています。 エディタに入力した C コードをブラウザから Godbolt API に送信し、返ってきたアセンブラテキストをツール内でパース・実行しています。
Godbolt API が返すのは純粋なアセンブラテキストです。アドレス情報は含まれません。
アセンブラパネルに表示される 0x401000 のようなアドレスは、Godbolt が付与したものではなく、
ツール内部で生成した仮想アドレスです。
各アーキテクチャの基底アドレスから、命令インデックスに固定サイズを掛けて計算します:
仮想アドレス = 基底アドレス + 命令インデックス × 4
| アーキテクチャ | 基底アドレス | 例(0番目の命令) |
|---|---|---|
| x86-64 | 0x401000 | 命令0=0x401000, 命令1=0x401004 … |
| ARM Cortex-M | 0x08000000 | 命令0=0x08000000, 命令1=0x08000004 … |
| RISC-V RV32 | 0x00010000 | 命令0=0x00010000, 命令1=0x00010004 … |
実際の命令長はアーキテクチャによって異なります:
| アーキテクチャ | 実際の命令長 | このツールでの扱い |
|---|---|---|
| x86-64 | 1〜15 バイト(可変長) | 4 バイト固定 |
| ARM Thumb2 | 2 または 4 バイト混在 | 4 バイト固定 |
| RISC-V RV32I | 4 バイト固定(C拡張除く) | 4 バイト固定 |
call 命令の「戻り先アドレス」と、その次の命令のアドレス表示が一致するよう、
ステップ実行エンジンで整合性を保つ処理を行っています。
Godbolt から受け取ったアセンブラテキストをツール独自のパーサーで解析し、 命令列と仮想マシン状態(レジスタ・スタック・フラグ)のスナップショット配列を生成します。 ステップ移動はこのスナップショット配列を前後に参照するだけで、再実行は行いません。
対応命令(x86-64): MOV / LEA / PUSH / POP / ADD / SUB / IMUL / IDIV / AND / OR / XOR / SHL / SHR / CMP / TEST / JMP / Jcc / CALL / RET / LEAVE ほか
対応命令(ARM): MOV / LDR / STR / ADD / SUB / MUL / CMP / B / BL / BX / PUSH / POP / LSL / LSR ほか
対応命令(RISC-V RV32IM): ADD / ADDI / SUB / LUI / AUIPC / AND / OR / XOR / SLL / SRL / SRA / SLT / LW / SW / BEQ / BNE / BLT / BGE / JAL / JALR / CALL / RET / MUL / DIV ほか
アセンブラの仕組みをより深く理解するための解説ページを用意しています。
| ガイド | 内容 |
|---|---|
| マシン語とアセンブラ、そしてPC | マシン語の正体・アセンブラとの1対1対応・プログラムカウンタの役割と分岐命令 |
| アセンブラの読み方 | MOV / ADD / LDR / CMP / PUSH など代表的な命令の読み方と構文解説 |
| スタックの仕組み | PUSH/POP の正体・スタックポインタ・ローカル変数の確保と解放 |
| 関数呼び出しの仕組み | 引数の渡し方・戻り先アドレス・スタックフレーム・戻り値の返し方 |
| 条件分岐とフラグレジスタ | Z/N/C/V フラグ・CMP/TEST・if-else・ループの翻訳パターン |
| ポインタとアセンブラ | C のポインタがアセンブラでどう見えるか・間接参照・配列アクセス |
| フロントエンド | Vue 3 + TypeScript + Tailwind CSS |
| エディタ | CodeMirror 6 |
| ビルドツール | Vite |
| コンパイル API | Godbolt Compiler Explorer API |
| ホスティング | Vercel(Serverless Function で CORS プロキシ) |