Menu
CoddyTech

2つの文字列の出力

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

文字列を1つ出力する方法はすでに知っています。では、2つの別々の文字列を出力したい場合はどうでしょうか?たとえば、「Hello 」の後に「World!」を出力する場合です。

write システムコールを、それぞれの文字列に対して1回ずつ、2回呼び出すだけです。

仕組み:

; 1回目の出力
mov rax, 1
mov rdi, 1
mov rsi, firstMsg
mov rdx, firstLen
syscall

; 2回目の出力
mov rax, 1
mov rdi, 1
mov rsi, secondMsg
mov rdx, secondLen
syscall

例:

section .data
    first db 'Hello ', 0x0a
    firstLen equ $-first

    second db 'World!', 0x0a
    secondLen equ $-second

section .text
    global _start

_start:
    mov rax, 1
    mov rdi, 1
    mov rsi, first
    mov rdx, firstLen
    syscall

    mov rax, 1
    mov rdi, 1
    mov rsi, second
    mov rdx, secondLen
    syscall

    mov rax, 60
    mov rdi, 0
    syscall

出力:

Hello

World!

各文字列は 0x0a(改行)で終わるため、2つの文字列は別々の行に出力されます。

なぜ文字列を1つではなく2つ出力するのでしょうか?

理由例
再利用性名前を変えて同じ挨拶を出力する
柔軟性条件に基づいて異なるメッセージを出力する
整理異なるメッセージをメモリ内で分けて保持する

好きなだけ多くの文字列を出力できます。

文字列ごとに write システムコールを繰り返すだけです。

challenge icon

チャレンジ

2 つの文字列が与えられています。partOne の値は 'Good'、partTwo の値は 'bye' です。どちらも末尾に改行がすでに付いています。

出力が次のようになるように、partOne、続いて partTwo を表示するコードを書いてください。

Good

bye

データセクションと終了 syscall はすでに用意されています。2 つの write syscall だけを書く必要があります。

自分で試してみよう

section .data
    partOne db 'Good', 0x0a
    partOneLen equ $-partOne
    partTwo db 'bye', 0x0a
    partTwoLen equ $-partTwo

section .text
    global _start

_start:
    ; TODO: write syscallを使用してpartOneを出力する
    ; TODO: write syscallを使用してpartTwoを出力する

    mov rax, 60
    mov rdi, 0
    syscall
quiz icon腕試し

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

基礎のすべてのレッスン

自分で練習してみよう: Assemblyプレイグラウンド