assembler x86-64 имеет возможность создавать 16, 32 и 64 битные программы. Выходной формат: двоичные или объектные COFF файлы. Ассемблер поддерживает простые и системные инструкции, инструкции математического сопроцессора, а также технологии: MMX, 3DNow!, SSE1, SSE2, SSE3, SSE4A, SSE4.1, SSE4.2. Имеет высокую скорость компиляции. скачать
DEADHUNT а синтаксис у него какой? Синтаксис чем-то на nasm похож судя по римеру. При попытке собрать мой исходник, написанный под masm и отлично им компилируемый, вылетает с ошибкой. В общем вы описали бы синтаксис. Падает даже на таком исходнике: Код (Text): .586 .MMX _TEXT SEGMENT PAGE PUBLIC 'CODE' USE32 ASSUME CS:_TEXT, DS:_DATA, ES:_DATA, SS:_DATA _TEXT ENDS END Я понимаю что возможно у него синтаксис другой, но падать это как-то неправильно Можно было бы сообщение выводить что встречено незнакомое ключевое слово, или что-то вроди этого.
DEADHUNT Выкладывайте исходники. Без них ценность проекта выглядит сомнительной, учитывая наличие других ассемблеров с поддержкой мощных макротехнологий.
Код (Text): ; ; feenv.asm ; ; Copyright (c) DevelSoftware. All right reserved. ; ; int __cdecl fegetenv(fenv_t * envp); ; int __cdecl feholdexcept(fenv_t * envp); ; int __cdecl fesetenv(const fenv_t * envp); ; int __cdecl feupdateenv(const fenv_t * envp); public _fegetenv public _feholdexcept public _fesetenv public _feupdateenv _fegetenv: ifdef _BITS64 mov rax, [rsp + 8] fstenv [rax] else mov eax, [esp + 4] fstenv [eax] endif xor eax, eax ret _feholdexcept: ifdef _BITS64 mov rax, [rsp + 8] fstenv [rax] fnclex sub rsp, 8 fstcw [rsp] or byte [rsp], 0x3f fldcw [rsp] add rsp, 8 else mov eax, [esp + 4] fstenv [eax] fnclex sub esp, 4 fstcw [esp] or byte [esp], 0x3f fldcw [esp] add esp, 4 endif xor eax, eax ret _fesetenv: ifdef _BITS64 mov rax, [rsp + 8] fldenv [rax] else mov eax, [esp + 4] fldenv [eax] endif xor eax, eax ret _feupdateenv: fstsw ax and ax, 0xff ifdef _BITS64 mov rax, [rsp + 8] mov [rax + 4], ax fldenv [rax] else mov eax, [esp + 4] mov [eax + 4], ax fldenv [eax] endif xor eax, eax ret синтаксис практически такой же как и в fasm. Код (Text): DATASEG msg db "STRING", 0 CODESEG public _main _main: .... CODESEG/DATASEG/BSSSEG эти ключевые слова доступны только при создание объектных файлов. да и смысла не вижу во всех выше написанных выше наворотов, сразу доступны все инструкции (за исключением тех которые доступны только в 64-битном режиме(USE16/USE32/USE64)) скорость компиляции очень высокая, размер входного файла ограничен только размером оперативной памяти, поддержка практически всех инструкций(за исключением SSE5)
в этом ассемблере не делался упор на сверх навороченные макросы, всё таки это ассемблер, а не C/C++ или другой ЯВУ.
Ну при ошибках во входном файле он падать всё равно ведь не должен Это-то и плохо. В масм задал .MMX - и всё что выше, он будет писать что команда недоступна для выбранного процессора. А так сиди и сверяй каждую команду по мануалу - это MMX или уже SSE. А SSE использовать уже может недопустимо - смотря для какой машины программа пишется.
в принципе если это так важно то можно реализовать достаточно быстро так как в его instruction set это всё заложено. и что ты имел падение при ошибках?
какие исходники какая чушь? цели написания этого ассемблера 1) модуль ассемблирование для компилятора C/C++ 2) написание boot сектора ну и прочей мелочи 3) создание *.OBJ(формата COFF!!!) для совместной сборки с *.OBJ от C/C++ компилятора.
ненавижу MASM и TASM и никогда их не использую, помне лучше NASM и FASM. NASM правда хуже, а в FASM слишком много всего наворочено, даже создание исполняемых файлов многих форматов, хотя какой в этом смысл для навороченных форматов можно создать *.COFF а потом использовать линкер(в комплекто с DevelStudio правда не обновлённая версия но скоро закачаю новую), а в противном случае просто создаётся *.BIN. Из всё этого непонятно причём здесь MASM & TASM.
Да. При компиляции вот этого кода к примеру: Код (Text): .586 .MMX _TEXT SEGMENT PAGE PUBLIC 'CODE' USE32 ASSUME CS:_TEXT, DS:_DATA, ES:_DATA, SS:_DATA _TEXT ENDS END Я понимаю что у него совсем другой синтаксис - но это не повод падать с исключением. И чем это они вам так не угодили интересно...
бывает, исправлено. спасибо за информацию. что бы там создать простенькую программы нужно написать кучу директив, а потом в конце файла ещё END поставить. да и всё это сильно привязывает к одному ассемблеру. чем у FASM синтаксис плох?
DEADHUNT 1) Зачем? Там есть урезанный ассемблер, если его не хватает, то пишем код на ASM и получившийся OBJ линкуем с OBJ на C++. 2) Для этого FASM подходит. 3) Для этого подходит любой ассемблер. Просто интересно, какие преимущества мог бы дать Ваш ассемблер перед имеющимися. Цели, которые Вы указали не являются невыполнимыми для имеющихся ассемблеров. Были бы сурцы, тогда мне было бы интересно в них покопаться. Сейчас не хватает простого plain-C ассемблера, чтобы например сделать что-нибудь пермутирующее. Можно написать самому, и в будующем я напишу, но интересно посмотреть, что есть у других людей в этой области.
из преимуществ: поддержка большого числа инструкций, возможность создавать 16/32/64 битный код, очень высокая скорость(за счёт использование некоторых серьёзных хитростей в оптимизации) которая практически эквивалентна FASM(создавал файл с некоторыми командами и копировал их, и в итого получался файл на несколько метров), затем с некоторым(а может и серьёзным, но терпимым) замедлением я бы поставил NASM, а MASM & TASM вообще выдавали сообщение о нехватки памяти да и скорость у них очень низкая.
у препроцессора такой же синтаксис как в C/C++ только без #, директивы - include, if, ifdef, elif, else, endif