На каких ассемблерах вы пишете чаще всего?

Тема в разделе "WASM.ASSEMBLER", создана пользователем Jin X, 17 янв 2018.

?

На каких ассемблерах вы пишете ЧАЩЕ ВСЕГО? (читайте примечание в теме)

  1. Macro Assembler (MASM)

  2. Turbo Assembler (TASM)

  3. Flat Assembler (fasm)

  4. Netwide Assembler (NASM), YASM (включая NASM в SASM IDE с его макросами)

  5. GNU Assembler (GAS)

  6. WASM и его потомки: UASM/HJWASM, JWASM

  7. GoAsm (отдельно GoLink не считается)

  8. Pelle Orinius Assembler (PoAsm)

  9. Ассемблер, встроенный в языки высокого уровнях (C++, Delphi, etc... напишите!)

  10. Ассемблер в emu8086 (TASM-подобный, не fasm !!!)

  11. Flat Assembler G (fasmg) [укажите в теме – для каких архитектур используете !!!]

  12. Atmel AVR Assembler (или другой AVR-ассемблер, но не fasmg... напишите!)

  13. FASMARM и другие ARM-ассемблеры (напишите в теме – какой именно!)

  14. Другие ассемблеры для архитектур, совместимых с IA-32/Intel 64 (напишите!)

  15. Другие ассемблеры для архитектур, НЕ совместимых с IA-32/Intel 64 (для микроконтр, 8-бит, напишите!)

  16. Я не пишу на ассемблере :(

  17. High-level Assembler/Assembly (HLA, HLASM)

Можно выбрать сразу несколько вариантов.
Результаты будут видны только после голосования.
  1. Intro

    Intro Active Member

    Публикаций:
    0
    Регистрация:
    29 авг 2009
    Сообщения:
    561
    Решил назвать по проще: HLMASM - High Level Macro ASseMbler. Кое что уже сделал, и да же работает, выражения пока не делал.
    Вопрос? В МАСМ64 нет конструкций .if и др., будут ли они добавлены в следующие версии? Я так понимаю, что скорей всего, их никогда не добавят, фашистам из мелкософта сам ассемблер как кость в горле, ладно обойдёмся без них.
     
  2. Jin X

    Jin X Active Member

    Публикаций:
    0
    Регистрация:
    15 янв 2009
    Сообщения:
    369
    Адрес:
    Кольца Сатурна
    .if и пр. есть в temphls.inc
     
  3. Intro

    Intro Active Member

    Публикаций:
    0
    Регистрация:
    29 авг 2009
    Сообщения:
    561
    Есть ли исходники какого нибудь ассемблера вроде МАСМ?
    Часть кода.
    Код (ASM):
    1.  
    2. invoke file_read_line, FSource, addr str_line, sizeof str_line
    3. .break .if (eax==0)
    4. mov size_line, eax
    5. invoke parser_line_asm, addr str_line, size_line, addr label_line, addr command_line, addr operand_line
    6. ;анализ типа метки
    7. .if (label_line[0])
    8. invoke label_analysis, addr label_line, addr command_line, addr operand_line
    9. .endif
    10.  
    Надо для функции label_analysis, без анализа типов меток не получается.
     
  4. Jin X

    Jin X Active Member

    Публикаций:
    0
    Регистрация:
    15 янв 2009
    Сообщения:
    369
    Адрес:
    Кольца Сатурна
  5. Intro

    Intro Active Member

    Публикаций:
    0
    Регистрация:
    29 авг 2009
    Сообщения:
    561
    UASM по ходу самое то, можно в .if использовать float, переменные xmm регистры.
    Но вот проблема, при попытке собрать проект XRayExtensions, выскакивает "Out of Memory" - нехватка памяти, это не доработка компилятора. Хоть исходники под 2014 студию, но я смог собрать UASM32 под VS2010, и исследовал этот вопрос, функция обработки сегментов выделяет по 330 МБ за каждый проход, и на 6-м валится, т.к. памяти больше 2 ГБ. Короче, не все проекты собираются UASM без проблем.
     
    Mikl___ нравится это.
  6. Jin X

    Jin X Active Member

    Публикаций:
    0
    Регистрация:
    15 янв 2009
    Сообщения:
    369
    Адрес:
    Кольца Сатурна
    Intro, напишите в саппорт. Я как-то писал им (порядка года назад) о том, что UASM не поддерживает jcxz (хотя поддерживает jecxz). Ответили быстро, поправили в новой версии.
    Там 2 e-mail'а соавторов, лучше обоим написать :)
     
  7. Intro

    Intro Active Member

    Публикаций:
    0
    Регистрация:
    29 авг 2009
    Сообщения:
    561
    Занятно, но там был баг.
    org 10XXXXXXh
    где далее должно быть: - shift
    Короче: баг исправил.
    Что интересно: время компиляции 0.6 сек, в место 17 сек - МАСМ, это много-го стоит.
    Что ещё интересно... Думаю проект HLMASM надо дальше развивать, UASM приколен, но всё таки не то, то что надо.
     
  8. Intro

    Intro Active Member

    Публикаций:
    0
    Регистрация:
    29 авг 2009
    Сообщения:
    561
  9. Intro

    Intro Active Member

    Публикаций:
    0
    Регистрация:
    29 авг 2009
    Сообщения:
    561
    Работаю с UASM, попытался заюзать виртуальные методы.
    Код (ASM):
    1. ASSUME   edi:ptr CTexture
    2. [edi].pSurface->GetSurfaceLevel(0, &ppSurfaceLevel)
    Начались проблемы, как я понял это работает только под х64, и методы надо объявлять определённым образом.
    Так как исходники в наличии, и проект компилируется, то решил по пилить проект сам. В общем, получилось, частично, теперь COM объекты вызываются без проблем, свои виртуальные методы пока не работают. Просто внутренние макросы _DEREF, _DEREFI рассчитаны на х64. Ладно, это я сам доделаю.
    Что ещё хотелось бы сделать: макрокоманда .goto label [.if] для оптимального условного перехода(выхода из циклов и др.); .ex, .exsse выражения - для целочисленной и флоат-арифметике с помощью SSE инструкций, так же доработать .for (выражения:условие:выражения) где выражения могут быть сложными. С выражениями тут конечно не всё просто, хочется сделать что бы можно было задать почти любой сложности код.
    .ex ESI=(param1*param2+666h)/param3, fParam5=param3*fParam4/fParam6
    Короче, что бы как в С можно было задавать выражения, где надо используется сверхлокальные переменные.
    Надо потом тему создать, на тему UASM, а то для общения с разработчиками UASM на http://masm32.com, с английским у меня плохо.
     
  10. Intro

    Intro Active Member

    Публикаций:
    0
    Регистрация:
    29 авг 2009
    Сообщения:
    561
    Наконец-то нашёл что искал.
    http://alfalavista.ru/idxfldr/2013-06-18-22-25-47/191-2014-02-08-17-15-38.html
    Алгоритм разбора выражений, проверил, работает. Так что в UASM сделаю макрокоманды .ex и .exsse. Можно будет использовать регистры, вставлять функции и макрофункции и т.д.
    Теперь спать! :0
     
  11. Intro

    Intro Active Member

    Публикаций:
    0
    Регистрация:
    29 авг 2009
    Сообщения:
    561
    HLA штука интересная.
    http://www.plantation-productions.com/Webster/
    НО почему то не популярный! А почему? Да просто у авторов получился не ассемблер, а нечто вроде С--(Си минус минус), с синтаксисом паскаля и немножко С/С++ плюс своё. Можно считать, глобально проект провалился. Программистам проще использовать С/С++/С--, студентам кодить на паскале, а ассемблерщики юзают привычные МАСМ, ФАСМ и похожие.
    Но всё таки высокоуровневый код в ассемблере я считаю благом, так как проще писать, и меньше делаешь ошибок, код легче портируется на С/С++, причём обратно.
    ЗЫ
    На текущий момент научил UASM правильно использовать оператор :=, не спотыкаясь о аналогичный в макросе.
    mymacro MACRO param:=<eax>
    Так что макрос .ex отменяется.
     
  12. Aoizora

    Aoizora Active Member

    Публикаций:
    0
    Регистрация:
    29 янв 2017
    Сообщения:
    351
    Где FASM хранит определения структур и констант PE формата?
     
  13. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.708
    Equates\kernel32.inc
    Код (ASM):
    1. IMAGE_DOS_SIGNATURE = $5A4D
    2. IMAGE_OS2_SIGNATURE = $454E
    3. IMAGE_OS2_SIGNATURE_LE = $454C
    4. IMAGE_VXD_SIGNATURE = $454C
    5. IMAGE_NT_SIGNATURE = $4550
    6. struct IMAGE_DOS_HEADER
    7.        e_magic dw ?
    8.        e_cblp dw ?
    9.        e_cp dw ?
    10.        e_crlc dw ?
    11.        e_cparhdr dw ?
    12.        e_minalloc dw ?
    13.        e_maxalloc dw ?
    14.        e_ss dw ?
    15.        e_sp dw ?
    16.        e_csum dw ?
    17.        e_ip dw ?
    18.        e_cs dw ?
    19.        e_lfarlc dw ?
    20.        e_ovno dw ?
    21.        e_res dw ?,?,?,?
    22.        e_oemid dw ?
    23.        e_oeminfo dw ?
    24.        e_res2 dw 10 dup(?)
    25.        e_lfanew dd ?
    26. ends
    27. struct IMAGE_VXD_HEADER
    28.        e32_magic dw ?
    29.        e32_border db ?
    30.        e32_worder db ?
    31.        e32_level dd ?
    32.        e32_cpu dw ?
    33.        e32_os dw ?
    34.        e32_ver dd ?
    35.        e32_mflags dd ?
    36.        e32_mpages dd ?
    37.        e32_startobj dd ?
    38.        e32_eip dd ?
    39.        e32_stackobj dd ?
    40.        e32_esp dd ?
    41.        e32_pagesize dd ?
    42.        e32_lastpagesize dd ?
    43.        e32_fixupsize dd ?
    44.        e32_fixupsum dd ?
    45.        e32_ldrsize dd ?
    46.        e32_ldrsum dd ?
    47.        e32_objtab dd ?
    48.        e32_objcnt dd ?
    49.        e32_objmap dd ?
    50.        e32_itermap dd ?
    51.        e32_rsrctab dd ?
    52.        e32_rsrccnt dd ?
    53.        e32_restab dd ?
    54.        e32_enttab dd ?
    55.        e32_dirtab dd ?
    56.        e32_dircnt dd ?
    57.        e32_fpagetab dd ?
    58.        e32_frectab dd ?
    59.        e32_impmod dd ?
    60.        e32_impmodcnt dd ?
    61.        e32_impproc dd ?
    62.        e32_pagesum dd ?
    63.        e32_datapage dd ?
    64.        e32_preload dd ?
    65.        e32_nrestab dd ?
    66.        e32_cbnrestab dd ?
    67.        e32_nressum dd ?
    68.        e32_autodata dd ?
    69.        e32_debuginfo dd ?
    70.        e32_debuglen dd ?
    71.        e32_instpreload dd ?
    72.        e32_instdemand dd ?
    73.        e32_heapsize dd ?
    74.        e32_res3 db 12 dup(?)
    75.        e32_winresoff dd ?
    76.        e32_winreslen dd ?
    77.        e32_devid dw ?
    78.        e32_ddkver dw ?
    79. ends
    80. struct IMAGE_FILE_HEADER
    81.        Machine dw ?
    82.        NumberOfSections dw ?
    83.        TimeDateStamp dd ?
    84.        PointerToSymbolTable dd ?
    85.        NumberOfSymbols dd ?
    86.        SizeOfOptionalHeader dw ?
    87.        Characteristics dw ?
    88. ends
    89. IMAGE_SIZEOF_FILE_HEADER = 20
    90. IMAGE_FILE_RELOCS_STRIPPED = 1
    91. IMAGE_FILE_EXECUTABLE_IMAGE = 2
    92. IMAGE_FILE_LINE_NUMS_STRIPPED = 4
    93. IMAGE_FILE_LOCAL_SYMS_STRIPPED = 8
    94. IMAGE_FILE_AGGRESIVE_WS_TRIM = $10
    95. IMAGE_FILE_LARGE_ADDRESS_AWARE = $20
    96. IMAGE_FILE_BYTES_REVERSED_LO = $80
    97. IMAGE_FILE_32BIT_MACHINE = $100
    98. IMAGE_FILE_DEBUG_STRIPPED = $200
    99. IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP = $400
    100. IMAGE_FILE_NET_RUN_FROM_SWAP = $800
    101. IMAGE_FILE_SYSTEM = $1000
    102. IMAGE_FILE_DLL = $2000
    103. IMAGE_FILE_UP_SYSTEM_ONLY = $4000
    104. IMAGE_FILE_BYTES_REVERSED_HI = $8000
    105. IMAGE_FILE_MACHINE_UNKNOWN = $0
    106. IMAGE_FILE_MACHINE_I386 = $14c
    107. IMAGE_FILE_MACHINE_R3000 = $162
    108. IMAGE_FILE_MACHINE_R4000 = $166
    109. IMAGE_FILE_MACHINE_R10000 = $168
    110. IMAGE_FILE_MACHINE_WCEMIPSV2 = $169
    111. IMAGE_FILE_MACHINE_ALPHA = $184
    112. IMAGE_FILE_MACHINE_SH3 = $1a2
    113. IMAGE_FILE_MACHINE_SH3DSP = $1a3
    114. IMAGE_FILE_MACHINE_SH3E = $1a4
    115. IMAGE_FILE_MACHINE_SH4 = $1a6
    116. IMAGE_FILE_MACHINE_SH5 = $1a8
    117. IMAGE_FILE_MACHINE_ARM = $1c0
    118. IMAGE_FILE_MACHINE_THUMB = $1c2
    119. IMAGE_FILE_MACHINE_AM33 = $1d3
    120. IMAGE_FILE_MACHINE_POWERPC = $1F0
    121. IMAGE_FILE_MACHINE_POWERPCFP = $1f1
    122. IMAGE_FILE_MACHINE_IA64 = $200
    123. IMAGE_FILE_MACHINE_MIPS16 = $266
    124. IMAGE_FILE_MACHINE_ALPHA64 = $284
    125. IMAGE_FILE_MACHINE_MIPSFPU = $366
    126. IMAGE_FILE_MACHINE_MIPSFPU16 = $466
    127. IMAGE_FILE_MACHINE_AXP64 = IMAGE_FILE_MACHINE_ALPHA64
    128. IMAGE_FILE_MACHINE_TRICORE = $520
    129. IMAGE_FILE_MACHINE_CEF = $CEF
    130. IMAGE_FILE_MACHINE_EBC = $EBC
    131. IMAGE_FILE_MACHINE_AMD64 = $8664
    132. IMAGE_FILE_MACHINE_M32R = $9041
    133. IMAGE_FILE_MACHINE_CEE = $C0EE
    134. struct IMAGE_DATA_DIRECTORY
    135.        VirtualAddress dd ?
    136.        Size dd ?
    137. ends
    138. IMAGE_NUMBEROF_DIRECTORY_ENTRIES = 16
    139. struct IMAGE_OPTIONAL_HEADER
    140.        Magic dw ?
    141.        MajorLinkerVersion db ?
    142.        MinorLinkerVersion db ?
    143.        SizeOfCode dd ?
    144.        SizeOfInitializedData dd ?
    145.        SizeOfUninitializedData dd ?
    146.        AddressOfEntryPoint dd ?
    147.        BaseOfCode dd ?
    148.        BaseOfData dd ?
    149.        ImageBase dd ?
    150.        SectionAlignment dd ?
    151.        FileAlignment dd ?
    152.        MajorOperatingSystemVersion dw ?
    153.        MinorOperatingSystemVersion dw ?
    154.        MajorImageVersion dw ?
    155.        MinorImageVersion dw ?
    156.        MajorSubsystemVersion dw ?
    157.        MinorSubsystemVersion dw ?
    158.        Win32VersionValue dd ?
    159.        SizeOfImage dd ?
    160.        SizeOfHeaders dd ?
    161.        CheckSum dd ?
    162.        Subsystem dw ?
    163.        DllCharacteristics dw ?
    164.        SizeOfStackReserve dd ?
    165.        SizeOfStackCommit dd ?
    166.        SizeOfHeapReserve dd ?
    167.        SizeOfHeapCommit dd ?
    168.        LoaderFlags dd ?
    169.        NumberOfRvaAndSizes dd ?
    170.        DataDirectory IMAGE_DATA_DIRECTORY
    171.      db (IMAGE_NUMBEROF_DIRECTORY_ENTRIES-1) * sizeof.IMAGE_DATA_DIRECTORY dup(?)
    172. ends
     
  14. Aoizora

    Aoizora Active Member

    Публикаций:
    0
    Регистрация:
    29 янв 2017
    Сообщения:
    351
    Надо отдельно подключать этот файл? Я подключил win32ax.inc, но в нем нет заголовков и констант.
     
  15. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.708
    Aoizora,
    я не пишу на FASM, но IMHO, можно подключать файлы
    1. через fasm.ini,
    2. или вставить строку "include \fasm\Equates\kernel32.inc" в asm-файл,
    3. или непосредственно подставить описание структуры или констант PE-формата в asm-файл
     
  16. Aoizora

    Aoizora Active Member

    Публикаций:
    0
    Регистрация:
    29 янв 2017
    Сообщения:
    351
    Понятно, спасибо. А в FASM можно написать аналог макроса %define round(n, r) (((n+(r-1))/r)*r) для NASM?
     
  17. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.708
    Это округление по модулю?
    macro align value { rb (value-1)-($+value-1) mod value }
     
  18. Aoizora

    Aoizora Active Member

    Публикаций:
    0
    Регистрация:
    29 янв 2017
    Сообщения:
    351
    Выравнивание до степени двойки. Например, round(1, 16) = 16, round(17, 16) = 32
     
  19. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.708
  20. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    1.954
    выравнивание до степени двойки это в принципе (n-1)and(not (n-1)), соответственно align это
    Код (Text):
    1. macro _align a {
    2.     repeat (($+a-1)and(not(a-1)))-$
    3.         db 0
    4.     end repeat}
     
    Mikl___ нравится это.