db
это "определить байт", и этот код будет производить эти байты (в шестнадцатеричном формате):
74 68 69 73 20 69 73 20 74 65 78 74 00
«Строка» в кавычках разделена на коды символов ASCII (я полагаю, что UTF8 в NASM тоже возможен, поэтому один символ может выдавать несколько байтов) для отдельных символов, а последнее значение «0» просто компилируется как что, как ноль.
т.е. db 1, 2, 3
даст 3 байта машинного кода 01 02 03
.
Ноль ставится после последней буквы как «string nul terminator» для использования другим кодом, который принимает строки, оканчивающиеся на ноль (например, MessageBoxA
code).
«Переменная» является концепцией достаточно высокого уровня в программировании, и машина не поддерживает ее напрямую, во время компиляции вы получаете «символ / символическое имя» paramText
, что соответствует адресу памяти первого Байт, определенный после него (0x74
) =, может использоваться во время компиляции для работы с этим адресом. Затем db
создает фактический двоичный машинный код =, который будет существовать во время выполнения в качестве значений, загружаемых в память ОС. И последний ноль является частью «переменного содержимого» в этом контексте (а не «после него»), если вы хотите так думать об этом.
Но это просто двоичные значения в памяти компьютера. «Переменная» логика (включая тип и / или форматирование) создается кодом, который манипулирует памятью, и языком программирования + компилятором, позволяющим такие конструкции в исходном коде, но сам ЦП не знает об этой концепции и работает только с битами (обычно сгруппированными в байты, слова, ...).
РЕДАКТИРОВАТЬ: на самом деле вы можете использовать C-подобные строковые экранированные значения и в NASM, но строка должна быть заключена в обратные галочки, например:
paramText: db `this is text\0`
Кавычки и апострофы не сканируют строковый литерал на предмет escape-последовательности, и компилируют «\ 0» в виде двух символов. Но использование «, 0» в качестве определения следующего байта легче запомнить, чем запомнить разницу между заданными строками обратного кавычка / кавычки, которая является специфической для NASM функцией и поддерживается не всеми сборщиками x86.