Menu
Coddy logo textTech

Assembly Playground

コードスニペットを書いて、実行して、共有できます - セットアップ不要。

Coddymain.asm
Output
Click Run to see the output here.

ブラウザで Assembly をオンライン実行

これは NASM 構文で書かれた x86-64 コード向けの無料オンライン Assembly コンパイラです。プログラムを入力して「実行」を押すと、Coddy が nasm -f elf64 でアセンブルし、ld でリンクし、生成された Linux 実行ファイルをサーバー側で実行して、stdout、stderr、終了ステータスを表示します。インストールするものは何もありません。NASM も、リンカも、仮想マシンも、クロスコンパイラも不要です。

スターター プログラムは、標準入力から 1 行を読み取り、生の readwriteexit システムコールを使って挨拶を書き戻す、完全な _start エントリ ポイントです(libc は使いません)。これがアセンブリの本当の動き方です。引数を rax/rdi/rsi/rdx に移し、syscall を呼び出せば、あとはカーネルが処理します。エディタの下にある stdin パネルを使って、実行のたびにプログラムへ入力を渡してください。実際のバイナリにデータをパイプするのとまったく同じです。

この Assembly playground が役立つ理由

  • 本物の x86-64 NASM ツールチェーン。あなたのソースは Linux 上で nasm -f elf64 によってアセンブルされ、ld でリンクされます。ローカルで打ち込むのと同じコマンドなので、ここで動くものは実機で動くものと一致します。
  • 直接の Linux システムコール。スターターは libc を挟まずに syscall 命令を通じて readwriteexit を使うので、レジスタが引数や戻り値をどう運ぶかを正確に確認できます。
  • 標準入力のサポート。stdin パネルからプログラムにバイトを送り、システムコール 0 で読み取ります。定番の「名前を読み取って挨拶を表示する」演習やそれ以上に便利です。
  • セットアップ不要、即座のフィードバック。NASM のインストールも、覚えるべきリンカのフラグも、権限エラーもありません。ページを開けばエディタが使える状態です。アセンブラやリンカのエラーはそのまま出力に返ってきます。

Assembly playground で試せること

  • 単一の write システムコールで固定文字列を出力し、続けてきれいに exit(0) する。これは最小の完全な x86-64 プログラムであり、_startsyscall がどう組み合わさるかを最も速く確認できる方法です。
  • stdin から .bss バッファへ読み込み、末尾の改行を取り除いてそのまま返す。入力駆動のほぼすべてのアセンブリ演習の背後にあるパターンです。
  • 2 つの数をレジスタで加算し、その結果を手作業で ASCII 数字に変換して write できるようにする。アセンブリには print がなく、あるのはバイトとシステムコールだけだと学べます。

オンライン Assembly コンパイラ FAQ

この playground はどのアセンブラと構文を使いますか?
x86-64 Linux をターゲットに、Intel 構文の NASM(Netwide Assembler)を使います。コードは nasm -f elf64 でアセンブルされ、ld でリンクされます。AT&T/GAS 構文(%raxmovq のスタイル)から来た場合は、NASM の Intel スタイルに書き直してください。mov rax, 1section .textglobal _start のように。
これを使うのに NASM やリンカをインストールする必要はありますか?
いいえ。完全なツールチェーンはサンドボックス化されたコンテナ内でサーバー側で動作します。ブラウザで NASM を書いて「実行」を押せば、Coddy があなたに代わってアセンブルとリンクを行います。ローカルにインストールするものは何もありません。NASM も、ld も、Linux VM も不要です。
ここではアセンブリで入力をどう読み取りますか?
read システムコール(番号 0)を使います。rax に 0(sys_read)、rdi に 0(stdin)、rsi にバッファのアドレス、rdx に最大バイト数を入れ、syscall を実行します。エディタの下の stdin パネルに入力したものは、実行時にプログラムへ渡されます。スターターは、末尾の改行を取り除く処理を含め、完全なパターンを示しています。
なぜ私のプログラムには main ではなく _start が必要なのですか?
スターターが ld で、C ランタイムなしにリンクされるからです。main は libc の慣習で、C の起動コードが準備を整えたあとに呼び出します。素の ld リンクには libc がないため、カーネルは直接 _start ラベルへジャンプします。だからこそここではすべてのプログラムが global _start を定義します。最後に exit システムコール(番号 60)できれいに終了する責任はあなたにあります。
初心者でもこのコンパイラでアセンブリを学べますか?
はい。挨拶プログラムから始めて、文字列を変え、出力を観察しましょう。次に入力の読み取り、レジスタでの算術、数値を手作業でテキストへ変換することに挑戦してください。セットアップが不要で、実行のたびに即座のフィードバックが得られるので、素早く反復できます。これがレジスタ、メモリ、システムコールへの直感を養う最速の方法です。

Assemblyに役立つツール

Assembly プレイグラウンドと相性の良い、ブラウザベースの無料ツール - すべて Coddy の一部です。