#assembly #nasm #x86-16
#сборка #nasm #x86-16
Вопрос:
Согласно документации NASM, следующее позволяет мне определить 64 000 неинициализированных байтов на метке Vid
:
Vid resb 64000
Согласно последующей документации, это должно позволить мне вместо этого инициализировать эти байты в 0xFF:
Vid db 64000 dup (FFh)
Это, однако, приводит к ошибке error: comma expected after operand 1
.
Я также пытался:
- Добавление двоеточия после имени символа
Vid
- Использование
0
или вопросительный знак для значения по умолчанию вместо FF (хотя FF — мое предполагаемое значение) - Использование меньшего количества байтов, например
64
- Корректировка заглавных букв
- Переставляю мой исходный файл так, чтобы эта директива отображалась в разных разделах и т. Д.
- Добавление запятых между 64000, dup и (FFh) — что, очевидно, не работает
Я не могу найти в Интернете ничего, что указывало бы на то, что этот синтаксис изменился или что есть какие-либо случаи, когда он не должен работать.
В качестве важного фона я компилирую в bin
файл и имею cpu 8086
директиву в своем исходном коде.
Комментарии:
1. Понятия не имею, что вы нашли
dup
в документации nasm. Это синтаксис masm. nasm используетtimes
2. @Jester раздел 3.2.1 здесь . Я предполагаю, что ошибка «начинается с NASM 2.15», поскольку этой версии, похоже, меньше года.
3. Мило! Это то, что я получаю за то, что браузер кэширует ссылку на старое руководство. Итак, возникает вопрос, использует ли Итан достаточно новую версию nasm?
4. Это то же сообщение об ошибке, которое я получаю от nasm 2.14.02. Так что действительно, ответ, по-видимому, звучит так: «обновите или используйте синтаксис TIMES».
5. @hobbs Это документация, на которую я смотрел, действительно, я должен был использовать TIMES в своей версии!
Ответ №1:
Преобразование комментария в ответ: DUP
был добавлен в NASM только с версией 2.15 (выпущен в июне 2020 года). Для совместимости со старыми версиями используйте ВРЕМЯ, например times 64000 db 0xff
.