NASM Крис касперски - Assembler

Узнай цену своей работы

Формулировка задачи:

Не даёт покое статья Криса Касперски хоть написана в ~2010 году.
К минусам NASM'а можно отнести отсутствие поддержки уникода, платформы AMD x86-64, формата отладочной информации CodeView и некоторые странности синтаксиса. В частности, команда "mov eax, 1" не оптимизируется и транслятор умышленно оставляет место для 32-разрядного операнда. Если же мы хотим получить "короткий" вариант, размер операнда необходимо специфицировать явно: "mov eax, byte 1", что очень сильно напрягает или… использовать опцию "-On" для автоматической оптимизации
Непосредственная трансляция примеров из SDK/DDK под NASM'ом невозможна, так что разрабатывать на нем драйвера под Windows может только очень крутой поклонник или извращен. NASM - один из лучших ассемблеров под Liux/BSD, а вот под Windows его позиции уже не так сильны (в основном из-за неполной совместимости с MASM'ом).
С YASM такая же вещь
Вот основные отличительные черты YASM'а от его предшественника: поддержка платформы AMD x86-64, большое количество исправленных ошибок (которых в NASM'е "нет"), оптимизированный парсер, переваривающий синтаксис как NASM, так и GAS, более полная поддержка COFF (DJGPP) и Win32 obj выходных файлов, генерация отладочной информации в формате CodeView, интернационализация (выполненная через GNU-библиотеку gettext), и прочие мелкие улучшения, которых вполне достаточно, чтобы потеснить NASM особенно в мире UNIX-подобных систем, где GAS-синтаксис по-прежнему играет ведущую роль
Под Windows же YASM не имеет никаких ощутимых преимуществ перед MASM'ом за исключением того, что поддерживает возможность генерации двоичных файлов, особенно удобных для создания shell-кода, но бесполезных для разработчика драйверов.
повторюсь статья написана ~2010 года. И nasm и yasm развивались.Вопрос такой: исправлены ли некоторые из этих проблем? (ниже год опубликования статьи криса касперски)

Решение задачи: «NASM Крис касперски»

textual
Листинг программы
dw __utf16__('Hello world! Привет, друг!'),0
dd __utf32__('Hello world! Привет, друг!'),0

Объяснение кода листинга программы

  1. В коде определяется двойное слово (word), которое названо Hello world! Привет, друг! и записано в формате UTF-16. Значение переменной: Hello world! Привет, друг!.
  2. За двойным словом следует 0, которое является конечным нулем (null-terminator), обозначающим конец строки.
  3. В коде определяется двойное число (double word), которое названо Hello world! Привет, друг! и записано в формате UTF-32. Значение переменной: Hello world! Привет, друг!.
  4. За двойным числом следует 0, которое является конечным нулем (null-terminator), обозначающим конец строки.

Оцени полезность:

11   голосов , оценка 3.727 из 5