изменение синтаксиса фасма (просто ради интереса)

Тема в разделе "WASM.ASSEMBLER", создана пользователем dead_body, 24 июл 2006.

  1. dead_body

    dead_body wasm.ru

    Публикаций:
    0
    Регистрация:
    3 сен 2004
    Сообщения:
    603
    Адрес:
    Украина;г.Харьков;г.Н.Каховка
    например, вот макрос чтобы компилировать строки вида:
    ExitProcess(GetLastError())
    ExitProcess(MessageBox(0,"caption","text",0))

    количество вложеных функций любое, всё сделано рекурсией на стадии препроцессинга.

    Этот кусок кода делает имена всех АПИ функций в папке include\APIA\*.inc макросами.
    Код (Text):
    1. include "fasmMacroLib\hllToAllFunc\hllToFunc.inc"
    2.  
    3. macro import garbage,[p1,p2]
    4. {
    5.         hllToFunc p1
    6. }
    7.  
    8. include 'apia/kernel32.inc'
    9. include 'apia/user32.inc'
    10. include 'apia/gdi32.inc'
    11. include 'apia/advapi32.inc'
    12. include 'apia/comctl32.inc'
    13. include 'apia/comdlg32.inc'
    14. include 'apia/shell32.inc'
    15. include 'apia/wsock32.inc'
    16.  
    17. purge import
    в аттаче файл hllToFunc.inc .

    Если у кого есть какие то интересные макросы просьба выложить, для пользы общества.
    Сам макрос сделан по тупому, надеюсь потом доработать.
    Тупизм вот в чём, я не знаю зачем вообще в строке:
    ExitProcess(MessageBox(0,"caption","text",0))

    аж две )). Мой макрос понимает и такую строку:
    ExitProcess(MessageBox(0,"caption","text",0)
    и такую:
    ExitProcess(MessageBox(0,"caption","text",0))))))))))))))))))

    я надеюсь потом это исправить.
     
  2. dead_body

    dead_body wasm.ru

    Публикаций:
    0
    Регистрация:
    3 сен 2004
    Сообщения:
    603
    Адрес:
    Украина;г.Харьков;г.Н.Каховка
    переделал немного макрос.

    теперь всё должно быть строго:
    ExitProcess(MessageBox(0,"caption","text",0)))))))))))))))))) - выдаст сообщение о несоответствии "(" и ")".
    и теперь всё в одном файле. Его надо просто подключить и всё. Все АПИ можно вызывать как в ХЛА, АПИ(ПАРАМЕТРЫ).
    Причём параметром может быть вложеная функция.
    АПИ(АПИ(аргументы),аргументы)
    кол-во вложеный функций неограничено.

    теперь делаю что то вроде таково:
    Код (Text):
    1. format PE Console
    2. .data
    3. hModule dd ?
    4. .code
    5. EntryPoint:
    6. hModule := GetModuleHandle(0)
    7. hModule := invoke GetModuleHandle,0
    8. .end EntryPoint
    как до конца доделаю выложу.
     
  3. dead_body

    dead_body wasm.ru

    Публикаций:
    0
    Регистрация:
    3 сен 2004
    Сообщения:
    603
    Адрес:
    Украина;г.Харьков;г.Н.Каховка
    вот немного переделал.
    теперь понимает и процедуры.

    только до того как вызывать процедуру в виде:
    имя_процедуры(параметры),
    надо добавить имя процедуры к макросам.
    сделать это можно так:
    hllToProc имя_процедуры1,имя_процедуры2,...

    по идее, в фасме, большой разницы между метками и процедурами я не вижу, так что можно добавлять и метки.

    типа этого:
    Код (Text):
    1. hllToProc EntryPoint
    2. .code
    3. EntryPoint:
    4.    EntryPoint(0);толкнём 0 и вызовем EntryPoint.
    + немного переделал алгоритм, теперь должно быть намного быстрее(и не должно быть конфликтом с другими макросами).
     
  4. dead_body

    dead_body wasm.ru

    Публикаций:
    0
    Регистрация:
    3 сен 2004
    Сообщения:
    603
    Адрес:
    Украина;г.Харьков;г.Н.Каховка
    переделал всё заново.

    теперь должно всё работать замечательно, просто.
    В архиве находиться:
    main.inc
    hllToFucn.inc
    listOfFunctions.inc
    msvcrt.inc
    pushd.inc

    и папка examples.

    теперь как мне кажеться всё стало намного проще, в плане использования этих макросов.

    Эта версия маросов должна использоваться только с версией фасма 1.67.14 и ВЫШЕ.

    в папке examples можно найти несколько простых примеров. В будущем надеюсь её дополнить.
    Вообще то макросы эти создавались для использования с win32a(w)x,но их можно использовать и с win32a(w).
    что для этого надо сделать можно прочитать в файле main.inc(правда на английском)

    в listOfFunctions.inc можно добавлять свои функции и процедуры.
    Если есть какие то ошибки или предложения, то пишите или сюда, или мне на мыло.
     
  5. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    dead_body
    А что там такого сделали в 1.67.14?
     
  6. dead_body

    dead_body wasm.ru

    Публикаций:
    0
    Регистрация:
    3 сен 2004
    Сообщения:
    603
    Адрес:
    Украина;г.Харьков;г.Н.Каховка
    макросы на импорт переделали.
     
  7. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    dead_body
    Скачал 1.67.14 - не заметил там отличий в макросах импорта (я макросы обновлял с 1.67.7).
     
  8. dead_body

    dead_body wasm.ru

    Публикаций:
    0
    Регистрация:
    3 сен 2004
    Сообщения:
    603
    Адрес:
    Украина;г.Харьков;г.Н.Каховка
    kernel32.inc

    Код (Text):
    1. api AddAtom,\
    2.     AddConsoleAlias,\
    3.     BeginUpdateResource,\
    таких строчек, не было в 1.67.7

    вот топик:

    http://board.flatassembler.net/topic.php?t=6051
     
  9. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    dead_body
    Хм.. Я fasmw167.zip скачал, нет там такого.. Тему помню. Странно.

    А, оно ниже. Нашёл.
     
  10. dead_body

    dead_body wasm.ru

    Публикаций:
    0
    Регистрация:
    3 сен 2004
    Сообщения:
    603
    Адрес:
    Украина;г.Харьков;г.Н.Каховка
    переделал по другому принципу(теперь макросы универсальны, и всё в двух файлах.)

    подробности тут:
    http://board.flatassembler.net/topic.php?t=6407
     
  11. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    соглашения о передачи параметров настраиваются?
     
  12. dead_body

    dead_body wasm.ru

    Публикаций:
    0
    Регистрация:
    3 сен 2004
    Сообщения:
    603
    Адрес:
    Украина;г.Харьков;г.Н.Каховка
    по умолчанию, на все апи, что есть в папке \API,стоит invoke.

    но никто не мешает поставить, к примеру на wsprintf cinvoke.

    Код (Text):
    1. format PE Console
    2.  
    3. include "win32ax.inc"
    4. include "HLA\syntax.inc"
    5.  
    6. hllToFuncProcEx wsprintf:cinvoke         ;we have invoke by default.
    7.  
    8. .data
    9.         string db 20 DUP(?)
    10. .code
    11. EntryPoint:
    12.         wsprintf(string,"%d %X",100,100)  ;-> cinvoke wsprintf,<string>,<'%d %X'>,<100>,<100>
    13.         MessageBox(0,string,"See",0)
    14.         ExitProcess(0)
    15. .end EntryPoint
    так что можно сказать, что настраиваються.