Menu
Coddy logo textTech

Секция .data

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

Во второй главе вы загружали значения из памяти и сохраняли их в память. Но откуда взялась эта память? Кто создал 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]

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

ПравилоОбъяснение
Одна секция .data на программуПоместите все свои данные в одно место
Метки должны быть уникальнымиУ вас не может быть двух меток 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Проверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Основы