Секция .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.asm | section .data с определениями ваших данных |
main.asm | %include "data.asm", за которым следует section .text с вашим кодом |
Что происходит при запуске программы:
- Операционная система загружает вашу программу в память
- Она считывает секцию
.dataи размещает ваши данные по определённым адресам памяти
- Твои метки (
age,price,name) становятся адресами - Теперь твой код может обращаться к этим адресам с помощью
[age],[price],[name]
Важные правила:
| Правило | Объяснение |
|---|---|
| Храни данные вместе | Ты можешь открыть section .data несколько раз (ассемблер объединит части), но один раздел в data.asm легче читать |
| Метки должны быть уникальными | Нельзя иметь две метки age |
| Данные создаются до запуска кода | Они готовы к использованию, когда начинается _start |
В следующих уроках ты узнаешь, как определять разные типы данных с помощью db, dw, dd и dq
Задание
Напиши код в файле data.asm, чтобы:
- Создать секцию
.data - Создать байт с именем
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В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Основы
1Машина
Что такое CPUПамятьРегистры против памятиКак работают инструкцииПаттерн двух файловАрхитектура x86-64Потренируйтесь самостоятельно: Песочница Assembly