Menu
Coddy logo textTech

.data セクション

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

第2章では、メモリから値をロードし、メモリに値をストアしました。しかし、そのメモリはどこから来たのでしょうか?誰が num1num2、そして result を作成したのでしょうか?

答えは.dataセクションです。これは、メモリ内に独自のデータを作成する場所です。

.dataセクションとは何ですか?

.dataセクションは、プログラムが実行される前にメモリに格納されるデータを定義する、アセンブリプログラムの一部です。

構文:

section .data
    ; ここにデータの定義を記述します

必要な理由:

.dataセクションがない場合.dataセクションがある場合
操作するデータがありません数値、文字列、変数を定義できます
メモリアドレスが不明ですmyNumbermessageのようなラベルを使用できます
コードのテストができません作成したデータをロードしたりストアしたりできます

簡単な例:

section .data
    age db 25           ; 値25を持つ"age"という名前のバイトを作成します
    price dw 1000       ; 値1000を持つ"price"という名前のワードを作成します
    name db 'Bob'       ; 文字B, o, bを持つ"name"という名前の文字列を作成します

ファイル内での配置場所:

第0章の2ファイルパターンを思い出してください:

ファイル内容
data.asmsection .data とデータ定義
main.asm%include "data.asm" に続いて section .text とコード

プログラムが実行されるときに何が起こるか:

  1. オペレーティングシステムがプログラムをメモリにロードします
  2. .dataセクションを読み取り、データを特定のメモリアドレスに配置します
  1. あなたのラベル (age, price, name) はアドレスになります
  2. あなたのコードは、[age], [price], [name] を使用してこれらのアドレスにアクセスできるようになります

重要なルール:

ルール説明
プログラムごとに1つの .data セクションすべてのデータを1か所にまとめます
ラベルは一意である必要があります2つの age ラベルを持つことはできません
データはコードが実行される前に作成されます_start が始まるときに使用できる状態になっています

次のレッスンでは、dbdwdd、および dq を使用して、さまざまな種類のデータを定義する方法を学びます。

challenge icon

チャレンジ

data.asm ファイルに以下のコードを記述してください:

  1. .data セクションを作成する
  2. 値が 5 の count という名前のバイトを作成する

自分で試してみよう

%include "data.asm"

section .text
    global _start

_start:
    ; countから値をalにロードする
    mov al, [count]
    
    ; 印刷用に保存する
    mov r12, rax
    
    ; ASCIIに変換して印刷する (0-9のみ)
    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腕試し

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

基礎のすべてのレッスン