Битва трансляторов Крис Касперски Хакер, номер #092, стр. 092-118-7 Из мелких недочетов можно назвать невозможность автоматической генерации короткого варианта инструкции «push imm8» и отсутствие контроля над соответствием транслируемых инструкций типу указанного процессора (команда «cpuid» под «.486» ассемблируется вполне нормально, а ведь не должна). Непосредственная трансляция примеров из SDK/DDK под NASM'ом невозможна, так что разрабатывать на нем драйвера под Windows может только очень крутой поклонник или извращенец. NASM — один из лучших ассемблеров под Liux/BSD, а вот под Windows его позиции уже не так сильны (в основном из-за неполной совместимости с MASM'ом). YASM Когда развитие NASM'а приостановилось, его исходные тексты легли в основу нового транслятора — YASM, что в зависимости от настроения может расшифровываться и как Yes, it's an assembler, и как Your favorite assembler, и как Yet another assembler, и даже как Why an assembler (последнее – шутка). Вот основные отличительные черты YASM'а от его предшественника: поддержка платформы AMD x86-64, оптимизированный парсер, переваривающий синтаксис как NASM, так и GAS, более полная поддержка COFF (DJGPP) и Win32 obj выходных файлов, генерация отладочной информации в формате CodeView, интернационализация (выполненная через GNU-библиотеку gettext) и прочие мелкие улучшения, которых вполне достаточно, чтобы потеснить NASM в мире UNIX-подобных систем, где GAS-синтаксис по-прежнему играет ведущую роль. Под Windows же YASM не имеет никаких ощутимых преимуществ перед MASM'ом, за исключением того, что поддерживает возможность генерации двоичных файлов, особенно удобных для создания shell-кода, но бесполезных для разработчика драйверов. |