Menu
CoddyTech

.data セクション

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

第2章では、メモリから値を読み込み、メモリに値を保存しました。では、そのメモリはどこから来たのでしょうか?num1、num2、resultを作成したのは誰でしょうか?

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

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

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

構文:

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

必要な理由:

.data セクションがない場合.data セクションがある場合
扱うデータがありません数値、文字列、変数を作成できます
メモリアドレスが不明ですmyNumber や message のようなラベルを使用できます
コードをテストできません作成したデータを読み込んだり保存したりできます

簡単な例:

section .data
    age db 25           ; 値が25の"age"という名前のバイトを作成する
    price dw 1000       ; 値が1000の"price"という名前のワードを作成する
    name db 'Bob'       ; 文字B、o、bからなる"name"という名前の文字列を作成する

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

第0章で学んだ2ファイル構成を思い出してください:

ファイル内容
data.asmデータ定義を含むsection .data
main.asm%include "data.asm"の後に、コードを含むsection .text

プログラムの実行時に起こること:

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

重要なルール:

ルール説明
データをまとめておくsection .dataを複数回開くこともできます(アセンブラが各部分を結合します)が、data.asm内のセクションを1つにすると読みやすくなります
ラベルは一意でなければならないageラベルを2つ作ることはできません
コードの実行前にデータが作成される_startが始まるときには、すでに使用できます

次のレッスンでは、db、dw、dd、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腕試し

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

基礎のすべてのレッスン

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