assembler x86-64

Тема в разделе "WASM.ASSEMBLER", создана пользователем DEADHUNT, 18 фев 2009.

  1. DEADHUNT

    DEADHUNT New Member

    Публикаций:
    0
    Регистрация:
    18 фев 2009
    Сообщения:
    34
    assembler x86-64 имеет возможность создавать 16, 32 и 64 битные программы. Выходной формат: двоичные или объектные COFF файлы. Ассемблер поддерживает простые и системные инструкции, инструкции математического сопроцессора, а также технологии: MMX, 3DNow!, SSE1, SSE2, SSE3, SSE4A, SSE4.1, SSE4.2. Имеет высокую скорость компиляции.
    скачать
     
  2. asmfan

    asmfan New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2006
    Сообщения:
    1.004
    Адрес:
    Abaddon
    http://www.develsoftware.com/index.php/remository?func=fileinfo&id=1
    Ы. ms-?
     
  3. DEADHUNT

    DEADHUNT New Member

    Публикаций:
    0
    Регистрация:
    18 фев 2009
    Сообщения:
    34
    а в чём проблема?
     
  4. DEADHUNT

    DEADHUNT New Member

    Публикаций:
    0
    Регистрация:
    18 фев 2009
    Сообщения:
    34
    причём здесь microsoft?
     
  5. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    DEADHUNT а синтаксис у него какой?
    Синтаксис чем-то на nasm похож судя по римеру.
    При попытке собрать мой исходник, написанный под masm и отлично им компилируемый, вылетает с ошибкой.
    В общем вы описали бы синтаксис.
    Падает даже на таком исходнике:
    Код (Text):
    1.         .586
    2.         .MMX
    3. _TEXT       SEGMENT PAGE PUBLIC 'CODE' USE32
    4.         ASSUME  CS:_TEXT, DS:_DATA, ES:_DATA, SS:_DATA
    5. _TEXT       ENDS
    6.         END
    Я понимаю что возможно у него синтаксис другой, но падать это как-то неправильно :)
    Можно было бы сообщение выводить что встречено незнакомое ключевое слово, или что-то вроди этого.
     
  6. BlackParrot

    BlackParrot New Member

    Публикаций:
    0
    Регистрация:
    19 фев 2009
    Сообщения:
    163
    DEADHUNT
    Выкладывайте исходники. Без них ценность проекта выглядит сомнительной, учитывая наличие других ассемблеров с поддержкой мощных макротехнологий.
     
  7. DEADHUNT

    DEADHUNT New Member

    Публикаций:
    0
    Регистрация:
    18 фев 2009
    Сообщения:
    34
    Код (Text):
    1. ;
    2. ; feenv.asm
    3. ;
    4. ; Copyright (c) DevelSoftware. All right reserved.
    5. ;
    6.  
    7. ; int __cdecl fegetenv(fenv_t * envp);
    8. ; int __cdecl feholdexcept(fenv_t * envp);
    9. ; int __cdecl fesetenv(const fenv_t * envp);
    10. ; int __cdecl feupdateenv(const fenv_t * envp);
    11.  
    12. public _fegetenv
    13. public _feholdexcept
    14. public _fesetenv
    15. public _feupdateenv
    16.  
    17. _fegetenv:
    18. ifdef _BITS64
    19.     mov rax, [rsp + 8]
    20.     fstenv [rax]
    21. else
    22.     mov eax, [esp + 4]
    23.     fstenv [eax]
    24. endif
    25.     xor eax, eax
    26.     ret
    27.    
    28. _feholdexcept:
    29. ifdef _BITS64
    30.     mov rax, [rsp + 8]
    31.     fstenv [rax]
    32.     fnclex
    33.     sub rsp, 8
    34.     fstcw [rsp]
    35.     or byte [rsp], 0x3f
    36.     fldcw [rsp]
    37.     add rsp, 8
    38. else
    39.     mov eax, [esp + 4]
    40.     fstenv [eax]
    41.     fnclex
    42.     sub esp, 4
    43.     fstcw [esp]
    44.     or byte [esp], 0x3f
    45.     fldcw [esp]
    46.     add esp, 4
    47. endif
    48.     xor eax, eax
    49.     ret
    50.    
    51. _fesetenv:
    52. ifdef _BITS64
    53.     mov rax, [rsp + 8]
    54.     fldenv [rax]
    55. else
    56.     mov eax, [esp + 4]
    57.     fldenv [eax]
    58. endif
    59.     xor eax, eax
    60.     ret
    61.    
    62. _feupdateenv:
    63.     fstsw ax
    64.     and ax, 0xff
    65. ifdef _BITS64
    66.     mov rax, [rsp + 8]
    67.     mov [rax + 4], ax
    68.     fldenv [rax]
    69. else
    70.     mov eax, [esp + 4]
    71.     mov [eax + 4], ax
    72.     fldenv [eax]
    73. endif
    74.     xor eax, eax
    75.     ret
    синтаксис практически такой же как и в fasm.
    Код (Text):
    1. DATASEG
    2. msg db "STRING", 0
    3. CODESEG
    4. public _main
    5. _main:
    6. ....
    CODESEG/DATASEG/BSSSEG эти ключевые слова доступны только при создание объектных файлов.
    да и смысла не вижу во всех выше написанных выше наворотов, сразу доступны все инструкции (за исключением тех которые доступны только в 64-битном режиме(USE16/USE32/USE64))
    скорость компиляции очень высокая, размер входного файла ограничен только размером оперативной памяти, поддержка практически всех инструкций(за исключением SSE5)
     
  8. DEADHUNT

    DEADHUNT New Member

    Публикаций:
    0
    Регистрация:
    18 фев 2009
    Сообщения:
    34
    в этом ассемблере не делался упор на сверх навороченные макросы, всё таки это ассемблер, а не C/C++ или другой ЯВУ.
     
  9. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    Ну при ошибках во входном файле он падать всё равно ведь не должен :)
    Это-то и плохо.
    В масм задал .MMX - и всё что выше, он будет писать что команда недоступна для выбранного процессора.
    А так сиди и сверяй каждую команду по мануалу - это MMX или уже SSE.
    А SSE использовать уже может недопустимо - смотря для какой машины программа пишется.
     
  10. DEADHUNT

    DEADHUNT New Member

    Публикаций:
    0
    Регистрация:
    18 фев 2009
    Сообщения:
    34
    в принципе если это так важно то можно реализовать достаточно быстро так как в его instruction set это всё заложено.
    и что ты имел падение при ошибках?
     
  11. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    без исходников - теперь разбираться неделю в той чуши, что там написана
     
  12. DEADHUNT

    DEADHUNT New Member

    Публикаций:
    0
    Регистрация:
    18 фев 2009
    Сообщения:
    34
    какие исходники какая чушь?
    цели написания этого ассемблера
    1) модуль ассемблирование для компилятора C/C++
    2) написание boot сектора ну и прочей мелочи
    3) создание *.OBJ(формата COFF!!!) для совместной сборки с *.OBJ от C/C++ компилятора.
     
  13. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    понятно. очередной уродец вроде MASM и TASM
     
  14. DEADHUNT

    DEADHUNT New Member

    Публикаций:
    0
    Регистрация:
    18 фев 2009
    Сообщения:
    34
    ненавижу MASM и TASM и никогда их не использую, помне лучше NASM и FASM. NASM правда хуже, а в FASM слишком много всего наворочено, даже создание исполняемых файлов многих форматов, хотя какой в этом смысл для навороченных форматов можно создать *.COFF а потом использовать линкер(в комплекто с DevelStudio правда не обновлённая версия но скоро закачаю новую), а в противном случае просто создаётся *.BIN. Из всё этого непонятно причём здесь MASM & TASM.
     
  15. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    Да. При компиляции вот этого кода к примеру:
    Код (Text):
    1.         .586
    2.         .MMX
    3. _TEXT       SEGMENT PAGE PUBLIC 'CODE' USE32
    4.         ASSUME  CS:_TEXT, DS:_DATA, ES:_DATA, SS:_DATA
    5. _TEXT       ENDS
    6.         END
    Я понимаю что у него совсем другой синтаксис - но это не повод падать с исключением.
    И чем это они вам так не угодили интересно...
     
  16. DEADHUNT

    DEADHUNT New Member

    Публикаций:
    0
    Регистрация:
    18 фев 2009
    Сообщения:
    34
    бывает, исправлено. спасибо за информацию.
    что бы там создать простенькую программы нужно написать кучу директив, а потом в конце файла ещё END поставить. да и всё это сильно привязывает к одному ассемблеру. чем у FASM синтаксис плох?
     
  17. BlackParrot

    BlackParrot New Member

    Публикаций:
    0
    Регистрация:
    19 фев 2009
    Сообщения:
    163
    DEADHUNT
    1) Зачем? Там есть урезанный ассемблер, если его не хватает, то пишем код на ASM и получившийся OBJ линкуем с OBJ на C++.
    2) Для этого FASM подходит.
    3) Для этого подходит любой ассемблер.

    Просто интересно, какие преимущества мог бы дать Ваш ассемблер перед имеющимися. Цели, которые Вы указали не являются невыполнимыми для имеющихся ассемблеров. Были бы сурцы, тогда мне было бы интересно в них покопаться. Сейчас не хватает простого plain-C ассемблера, чтобы например сделать что-нибудь пермутирующее. Можно написать самому, и в будующем я напишу, но интересно посмотреть, что есть у других людей в этой области.
     
  18. DEADHUNT

    DEADHUNT New Member

    Публикаций:
    0
    Регистрация:
    18 фев 2009
    Сообщения:
    34
    из преимуществ: поддержка большого числа инструкций, возможность создавать 16/32/64 битный код, очень высокая скорость(за счёт использование некоторых серьёзных хитростей в оптимизации) которая практически эквивалентна FASM(создавал файл с некоторыми командами и копировал их, и в итого получался файл на несколько метров), затем с некоторым(а может и серьёзным, но терпимым) замедлением я бы поставил NASM, а MASM & TASM вообще выдавали сообщение о нехватки памяти да и скорость у них очень низкая.
     
  19. DEADHUNT

    DEADHUNT New Member

    Публикаций:
    0
    Регистрация:
    18 фев 2009
    Сообщения:
    34
    единственные исходники которые наверное скоро появится будут исходники C(C99)/C++ RTL
     
  20. DEADHUNT

    DEADHUNT New Member

    Публикаций:
    0
    Регистрация:
    18 фев 2009
    Сообщения:
    34
    у препроцессора такой же синтаксис как в C/C++ только без #, директивы - include, if, ifdef, elif, else, endif