Menu
Coddy logo textTech

2つの文字列の出力

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

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

各文字列につき1回ずつ、write syscallを単純に2回呼び出します。

仕組み:

; 最初のプリント
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!

1つではなく2つの文字列を出力する理由

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

文字列はいくつでも出力できます:

各文字列に対して write syscall を繰り返すだけです。

challenge icon

チャレンジ

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

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

Good

bye

data セクションと終了 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 システムコールを使って partOne を出力する
    ; TODO: write システムコールを使って partTwo を出力する

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

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

基礎のすべてのレッスン

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