Секция .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.asm | section .data с вашими определениями данных |
main.asm | %include "data.asm" за которым следует section .text с вашим кодом |
Что происходит при запуске вашей программы:
- Операционная система загружает вашу программу в память
- Она считывает секцию
.dataи помещает ваши данные по определенным адресам памяти
- Ваши метки (
age,price,name) становятся адресами - Ваш код теперь может обращаться к этим адресам, используя
[age],[price],[name]
Важные правила:
| Правило | Объяснение |
|---|---|
Одна секция .data на программу | Поместите все свои данные в одно место |
| Метки должны быть уникальными | У вас не может быть двух меток 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