Menu
CoddyTech

db - バイトの定義

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

メモリ内にデータを作成する最も基本的な方法はdbです。バイトを定義するという意味です。1バイト(8ビット)のデータを作成します。

構文:

label db value
  • label: このメモリアドレスに付ける名前
  • db: バイト定義ディレクティブ
  • value: 格納する数値または文字(0~255)

例:

section .data
    age db 25          ; 25を格納する"age"という名前のバイトを作成する
    grade db 'A'       ; 65('A'のASCIIコード)を格納する"grade"という名前のバイトを作成する
    zero db 0          ; 0を格納する"zero"という名前のバイトを作成する

1バイトに格納できるもの:

型範囲例
小さな数値0 から 255db 100
文字'A' から 'z'db 'X'
ASCIIコード0 から 255db 65('A'と同じ)

1行に複数のバイト:

カンマを使って、複数のバイトを連続して定義できます:

section .data
    numbers db 5, 10, 15, 20    ; 4バイトを作成: 5, 10, 15, 20
    letters db 'A', 'B', 'C'    ; 3バイトを作成: 65, 66, 67

コードでバイトを使用する方法:

section .data
    myByte db 42

section .text
    mov al, [myByte]    ; 値 42 を al に読み込む
    add al, 1           ; al は 43 になる
    mov [myByte], al    ; 43 を myByte に書き戻す

重要なルール:

ルール説明
値は1バイトに収まる必要がある0~255(または1文字)
読み込みまたは格納には、alなどの8ビットレジスタを使うal(bl、cl、dlなど)は8ビットレジスタ

よくある間違い:

; 誤り: 1バイトに収まらない数値を格納しようとしている
section .data
    error db 300    ; 300は大きすぎる(最大255)
challenge icon

チャレンジ

簡単

.data セクションに、値が 15 の score というバイトを作成します。

正しい .data セクションと db ディレクティブを含む data.asm ファイルを記述します。

自分で試してみよう

%include "data.asm"

section .text
    global _start

_start:
    mov al, [score]
    
    mov r12, rax
    
    add al, 48
    mov [digit], al
    
    mov rax, 1
    mov rdi, 1
    mov rsi, digit
    mov rdx, 1
    syscall
    
    mov rax, 60
    mov rdi, 0
    syscall

section .bss
    digit resb 1
quiz icon腕試し

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

基礎のすべてのレッスン

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