Menu
CoddyTech

改行の重要性

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

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

改行なし:

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

改行なしの例:

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

各文字列はそれぞれ独立した行に出力されます。

改行の動作:

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

よくある改行の間違い:

間違い結果
改行がまったくないテキストが1行につながって表示される
最後の文字列の末尾にだけ改行があるすべての文字列が1行につながって表示され、その後カーソルが次の行に移動する
文字列の途中に改行がある予期しない場所で改行される

安全なルール:

独立した行に表示したい各文字列の末尾には、必ず 0x0a を追加します。

challenge icon

チャレンジ

改行を含まない3つの文字列が与えられます。これらを別々の3行に表示するのが課題です。

文字列は次のとおりです。

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

要件:

  • 各文字列の末尾に改行(0x0a)を付けて定義する
  • 各文字列の長さを自動的に計算する
  • writeシステムコールを使って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: 正常に終了する
quiz icon腕試し

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

基礎のすべてのレッスン

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