db — определение байта
Часть раздела Основы путешествия по Assembly на Coddy. Урок 24 из 45.
Самый простой способ создать данные в памяти — db: определить байт. Он создает один байт (8 бит) данных.
Синтаксис:
label db valuelabel: имя, которое вы присваиваете этому адресу памятиdb: директива определения байтаvalue: число или символ для сохранения (от 0 до 255)
Примеры:
section .data
age db 25 ; Создаёт байт с именем "age", содержащий 25
grade db 'A' ; Создаёт байт с именем "grade", содержащий 65 (код ASCII для 'A')
zero db 0 ; Создаёт байт с именем "zero", содержащий 0Что можно хранить в одном байте:
| Тип | Диапазон | Пример |
|---|---|---|
| Небольшое число | от 0 до 255 | db 100 |
| Символ | от 'A' до 'z' | db 'X' |
| Код ASCII | от 0 до 255 | db 65 (то же, что и 'A') |
Несколько байтов в одной строке:
Можно определить несколько байтов подряд, используя запятые:
section .data
numbers db 5, 10, 15, 20 ; Создаёт 4 байта: 5, 10, 15, 20
letters db 'A', 'B', 'C' ; Создаёт 3 байта: 65, 66, 67Как использовать байт в коде:
section .data
myByte db 42
section .text
mov al, [myByte] ; Загрузить значение 42 в al
add al, 1 ; al становится равным 43
mov [myByte], al ; Записать 43 обратно в myByteВажное правило:
| Правило | Объяснение |
|---|---|
| Значение должно помещаться в 1 байт | От 0 до 255 (или один символ) |
Для загрузки или сохранения используйте 8-битный регистр, например al | al (как bl, cl, dl) — это 8-битный регистр |
Распространённая ошибка:
; Ошибка: попытка сохранить число, слишком большое для байта
section .data
error db 300 ; 300 — слишком большое число (максимум 255)Задание
ЛегкоСоздай байт с именем score со значением 15 в секции .data.
Запиши файл data.asm с правильной секцией .data и директивой db.
Попробуйте сами
%include "data.asm"
section .text
global _start
_start:
mov al, [score]
mov r12, rax
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-644Определение данных
Секция .datadb — определение байтаdw — определение словаdd — определение двойного словаdq — определение учетверенного словаСтроки с использованием dbСимвол $Итоги: сборка data.asmПотренируйтесь самостоятельно: Песочница Assembly