Menu
Coddy logo textTech

db による文字列

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

すでにご存知の通り、db は単一のバイトを定義します。しかし、db は文字列、つまり連続した複数のバイトを定義することもできます。

構文:

label db 'text here'

例:

section .data
    message db 'Hello'

これにより、メモリ内に5バイトが作成されます: 'H', 'e', 'l', 'l', 'o'

メモリ内で何が起きているか:

アドレスバイトASCII値
message'H'72
message+1'e'101
message+2'l'108
message+3'l'108
message+4'o'111

改行の追加:

文字列を出力して次の行に移動するには、0x0a(改行文字)を追加します:

section .data
    message db 'Hello', 0x0a

現在、文字列は6バイトです:'H','e','l','l','o', 改行

複数の文字列:

section .data
    hello db 'Hello', 0x0a
    goodbye db 'Goodbye', 0x0a

なぜこれが重要なのか:

文字列は、アセンブリで使用する最も一般的なデータです。write システムコール(第5章で学びます)は、指定された長さに達するまでメモリからバイトを読み取ることによって文字列を出力します。

重要な注意点:

文字列は単なるバイト列です。CPUは 'H' が文字であることを認識していませんし、気にすることもありません。それは単なる数値の72です。write システムコールは、出力時にこれらの数値を文字として解釈します。

challenge icon

チャレンジ

簡単

.data セクション内に、値 'Hi' に続けて改行 (0x0a) を持つ、greeting という名前の文字列を作成してください。

自分で試してみよう

%include "data.asm"

section .text
    global _start

_start:
    ; writeシステムコールを使用して文字列を出力する
    mov rax, 1
    mov rdi, 1
    mov rsi, greeting
    mov rdx, 3           ; 'H', 'i', 改行 = 3バイト
    syscall
    
    ; 終了
    mov rax, 60
    mov rdi, 0
    syscall
quiz icon腕試し

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

基礎のすべてのレッスン