Menu
Coddy logo textTech

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

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

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

Синтаксис:

label db 'text here'

Пример:

section .data
    message db 'Hello'

Это создаёт 5 bytes в памяти: '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 (символ newline):

section .data
    message db 'Hello', 0x0a

Теперь string содержит 6 bytes: 'H','e','l','l','o', newline

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

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

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

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

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

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

challenge icon

Задание

Легко

Create string called greeting со значением 'Hi', followed by newline (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Проверьте себя

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

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

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