Menu
Coddy logo textTech

全体を組み合わせる

CoddyのAssemblyジャーニー「基礎」セクションの一部 — レッスン 39/45。

writeシステムコールの4つの構成要素をすべて学習しました:

レジスタ保持する内容画面出力用の値
raxシステムコール番号1 (write)
rdiファイル記述子1 (stdout)
rsiバッファアドレス文字列のアドレス
rdxバイト数文字列の長さ

それでは、これらをすべて組み合わせてみましょう。

write システムコールの完全なパターン:

mov rax, 1          ; writeのシステムコール番号
mov rdi, 1          ; ファイルディスクリプタ (stdout)
mov rsi, msg        ; 文字列のアドレス
mov rdx, msgLen     ; 出力するバイト数
syscall             ; OSに出力を依頼する

完全に動作するプログラム:

section .data
    msg db 'Hello, World!', 0x0a
    msgLen equ $ - msg

section .text
    global _start

_start:
    mov rax, 1
    mov rdi, 1
    mov rsi, msg
    mov rdx, msgLen
    syscall

    mov rax, 60
    mov rdi, 0
    syscall

このプログラムの動作:

ステップ内容
1画面に "Hello, World!" を表示します
2新しい行に移動します
3コード 0 で正常に終了します

順序が重要です:

syscallを実行するに、レジスタを設定する必要があります。syscallの前に4つすべてが設定されている限り、mov命令の順序は重要ではありません。

challenge icon

チャレンジ

"Assembly is fun" というメッセージの後に改行を出力し、正常に終了する完全なプログラムを作成してください。

文字列とその長さはすでに定義されています。_start: の中にコードを記述するだけです。

自分で試してみよう

section .data
    msg db 'Assembly is fun', 0x0a
    msgLen equ $ - msg

section .text
    global _start

_start:
    ; TODO: writeシステムコールをセットアップして呼び出す
    ; rax=1, rdi=1, rsi=msg, rdx=msgLenを使用する

    ; TODO: 終了コード0で正常に終了する
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

基礎のすべてのレッスン