Menu
CoddyTech

db — определение байта

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

Самый простой способ создать данные в памяти — db: определить байт. Он создает один байт (8 бит) данных.

Синтаксис:

label db value
  • label: имя, которое вы присваиваете этому адресу памяти
  • db: директива определения байта
  • value: число или символ для сохранения (от 0 до 255)

Примеры:

section .data
    age db 25          ; Создаёт байт с именем "age", содержащий 25
    grade db 'A'       ; Создаёт байт с именем "grade", содержащий 65 (код ASCII для 'A')
    zero db 0          ; Создаёт байт с именем "zero", содержащий 0

Что можно хранить в одном байте:

ТипДиапазонПример
Небольшое числоот 0 до 255db 100
Символот 'A' до 'z'db 'X'
Код ASCIIот 0 до 255db 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-битный регистр, например alal (как bl, cl, dl) — это 8-битный регистр

Распространённая ошибка:

; Ошибка: попытка сохранить число, слишком большое для байта
section .data
    error db 300    ; 300 — слишком большое число (максимум 255)
challenge icon

Задание

Легко

Создай байт с именем 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
quiz iconПроверьте себя

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

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

Потренируйтесь самостоятельно: Песочница Assembly