Menu
Coddy logo textTech

Строки с использованием db

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

Вы уже знаете, что db определяет один байт. Но db также может определять строку — несколько байтов подряд.

Синтаксис:

label db 'text here'

Пример:

section .data
    message db 'Hello'

Это создает 5 байт в памяти: 'H', 'e', 'l', 'l', 'o'

Что происходит в памяти:

АдресБайтЗначение ASCII
message'H'72
message+1'e'101
message+2'l'108
message+3'l'108
message+4'o'111

Добавление новой строки:

Чтобы вывести строку и перейти на следующую строку, добавьте 0x0a (символ новой строки):

section .data
    message db 'Hello', 0x0a

Теперь строка содержит 6 байт: 'H','e','l','l','o', символ новой строки

Несколько строк:

section .data
    hello db 'Hello', 0x0a
    goodbye db 'Goodbye', 0x0a

Почему это важно:

Строки — это наиболее распространенный тип данных, который вы будете использовать в ассемблере. Системный вызов write (о котором вы узнаете в главе 5) выводит строки, считывая байты из памяти до тех пор, пока не будет достигнута указанная вами длина.

Важное примечание:

Строки — это просто байты. Процессор не знает и ему всё равно, что 'H' — это буква. Это просто число 72. Системный вызов write интерпретирует эти числа как символы при выводе.

challenge icon

Задание

Легко

Создайте строку с именем greeting со значением 'Hi', за которой следует символ новой строки (0x0a), в секции .data.

Попробуйте сами

%include "data.asm"

section .text
    global _start

_start:
    ; Вывести строку, используя системный вызов write
    mov rax, 1
    mov rdi, 1
    mov rsi, greeting
    mov rdx, 3           ; 'H', 'i', новая строка = 3 байта
    syscall
    
    ; Выход
    mov rax, 60
    mov rdi, 0
    syscall
quiz iconПроверьте себя

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

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