Строки с использованием 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 интерпретирует эти числа как символы при выводе.
Задание
ЛегкоСоздайте строку с именем 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В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Основы
1Машина
Что такое CPUПамятьРегистры против памятиКак работают инструкцииПаттерн двух файловАрхитектура x86-644Определение данных
Секция .datadb — определение байтаdw — определение словаdd — определение двойного словаdq — определение учетверенного словаСтроки с использованием dbСимвол $Итоги: сборка data.asm