Menu
Coddy logo textTech

改行の重要性

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

文字列の末尾に 0x0a (newline) を追加してきましたが、もしこれを忘れてしまうとどうなるでしょうか?

改行なし:

テキストは表示されますが、カーソルは同じ行に留まります。今後の出力は、そのすぐ隣に表示されます。

改行なしの例:

section .data
    first db 'Hello'
    firstLen equ $ - first
    second db 'World'
    secondLen equ $ - second

section .text
    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

出力:

HelloWorld

スペースも改行もありません。すべてが連結されています。

改行あり:

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

出力:

Hello World

各文字列がそれぞれの行に出力されます。

newline の役割:

文字ASCII効果
0x0a10カーソルを次の行の先頭に移動します

改行に関するよくある間違い:

間違い結果
改行が全くないテキストが1行に繋がってしまう
最後の文字列の末尾にのみ改行がある前の文字列が繋がり、最後の文字列だけが次の行に送られる
文字列の途中に改行がある意図しない場所で改行される

安全なルール:

単独の行に表示したいすべての文字列の末尾には、必ず 0x0a を追加してください。

challenge icon

チャレンジ

改行を含まない3つの文字列が与えられます。それらを3行に分けて出力するのがあなたのタスクです。

文字列は以下の通りです:

文字列
word1'Apple'
word2'Banana'
word3'Cherry'

要件:

  • 末尾に改行(0x0a)を付けて各文字列を定義すること
  • 各文字列の長さを自動的に計算すること
  • write システムコール(syscall)を使用して3つの文字列をすべて出力すること
  • コード 0 で正常終了すること

自分で試してみよう

section .data
    ; TODO: word1 を指示に記載された1番目のテキストと改行で定義する
    ; TODO: word2 を指示に記載された2番目のテキストと改行で定義する
    ; TODO: word3 を指示に記載された3番目のテキストと改行で定義する
    ; TODO: 各文字列の長さを計算する

section .text
    global _start

_start:
    ; TODO: word1 を出力する
    ; TODO: word2 を出力する
    ; TODO: word3 を出力する

    ; TODO: クリーンに終了するsection .data
    word1 db 'Apple', 0x0a
    word1Len equ $ - word1
    word2 db 'Banana', 0x0a
    word2Len equ $ - word2
    word3 db 'Cherry', 0x0a
    word3Len equ $ - word3

section .text
    global _start

_start:
    mov rax, 1
    mov rdi, 1
    mov rsi, word1
    mov rdx, word1Len
    syscall

    mov rax, 1
    mov rdi, 1
    mov rsi, word2
    mov rdx, word2Len
    syscall

    mov rax, 1
    mov rdi, 1
    mov rsi, word3
    mov rdx, word3Len
    syscall

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

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

基礎のすべてのレッスン