Menu
CoddyTech

Секция .data

Часть раздела Основы путешествия по Assembly на Coddy. Урок 23 из 45.

В главе 2 ты загружал значения из памяти и сохранял значения в памяти. Но откуда взялась эта память? Кто создал num1, num2 и result?

Ответ — это секция .data. Здесь ты создаёшь собственные данные в памяти.

Что такое секция .data?

Секция .data — это часть вашей программы на ассемблере, где вы определяете данные, которые будут храниться в памяти до запуска программы.

Синтаксис:

section .data
    ; Здесь разместите определения данных

Зачем это нужно:

Без секции .dataС секцией .data
Вам не с чем работатьВы можете создавать числа, строки и переменные
Адреса памяти неизвестныВы можете использовать метки, например myNumber или message
Вы не можете проверить свой кодВы можете загружать и сохранять созданные вами данные

Простой пример:

section .data
    age db 25           ; Создать байт с именем "age" и значением 25
    price dw 1000       ; Создать слово с именем "price" и значением 1000
    name db 'Bob'       ; Создать строку с именем "name", содержащую буквы B, o, b

Где это размещается в ваших файлах:

Вспомните шаблон с двумя файлами из главы 0:

ФайлСодержимое
data.asmsection .data с определениями ваших данных
main.asm%include "data.asm", за которым следует section .text с вашим кодом

Что происходит при запуске программы:

  1. Операционная система загружает вашу программу в память
  2. Она считывает секцию .data и размещает ваши данные по определённым адресам памяти
  1. Твои метки (age, price, name) становятся адресами
  2. Теперь твой код может обращаться к этим адресам с помощью [age], [price], [name]

Важные правила:

ПравилоОбъяснение
Храни данные вместеТы можешь открыть section .data несколько раз (ассемблер объединит части), но один раздел в data.asm легче читать
Метки должны быть уникальнымиНельзя иметь две метки age
Данные создаются до запуска кодаОни готовы к использованию, когда начинается _start

В следующих уроках ты узнаешь, как определять разные типы данных с помощью db, dw, dd и dq

challenge icon

Задание

Напиши код в файле data.asm, чтобы:

  1. Создать секцию .data
  2. Создать байт с именем count со значением 5

Попробуйте сами

%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