использование макросов в masm32

Тема в разделе "WASM.BEGINNERS", создана пользователем bizdon, 7 окт 2009.

  1. bizdon

    bizdon Member

    Публикаций:
    0
    Регистрация:
    7 апр 2009
    Сообщения:
    86
    товарищи, подскажите, пожалуйста, как вызвать макрос dwtoa? (и другие, общий принцип, полный пример, где посмотреть/почитать)

    что нужно указывать?:
    include с:\masm32\include\masm32.inc
    include c:\masm32\macros\macros.asm
    include с:\masm32\m32lib\dwtoa.asm
    dwtoa proto :dword,:dword

    что дальше? можно ли без процедуры, сразу
    invoke dwtoa, eax, ADDR buf?

    по всякому пытался, линковщик (компилятор) выдаёт ошибку:
    error LNK2001: unresolved external symbol _dwtoa@8
    fatal error LNK1120: 1 unresolved externals
    мой пример из http://www.wasm.ru/forum/viewtopic.php?id=34564
    Код (Text):
    1.     .386
    2.          .model flat, stdcall
    3.          option casemap :none
    4.             include \masm32\include\windows.inc
    5.             include \masm32\include\kernel32.inc
    6.             include \masm32\include\user32.inc
    7.             include \masm32\include\gdi32.inc
    8.             include \masm32\include\masm32.inc
    9.             includelib \masm32\lib\kernel32.lib
    10.             includelib \masm32\lib\user32.lib
    11.             includelib \masm32\lib\gdi32.lib
    12.             include c:\masm32\macros\macros.asm
    13.    
    14.     .data
    15. buf db 10 dup(?)
    16.     .code
    17. start:
    18. mov eax,4Eh
    19. invoke RtlZeroMemory,offset buf,10
    20. invoke dwtoa, eax, ADDR buf  ;из eax переводим в dec и помещаем в буфер
    21. push eax
    22. invoke MessageBox,0,addr buf,addr buf,0
    23. pop eax
    24. ex:
    25. invoke ExitProcess,0
    26.  
    27. end start
     
  2. bizdon

    bizdon Member

    Публикаций:
    0
    Регистрация:
    7 апр 2009
    Сообщения:
    86
    сенсеи, пошевелите ногой - нужен дружественный пинок, направляющий идущего к просветлению:

    скажите что-то типа: ищи лучше на форуме (помню, десять лет назад была тема), статья есть на wasm, кури Зубкова (Юрова, Калашникова...и.т.п., Магду не предлагать - читал) - там было, смотри примеры/help к masm32 - там всё разжевано, молись гуглю и медитируй (нигде не видел)

    нужен не сам асм (опкоды), а именно описание masm32.

    п.с. добавил includelib \masm32\lib\masm32.lib, убрал push/pop и всё заработало:
    Код (Text):
    1.     .386
    2.          .model flat, stdcall
    3.          option casemap :none
    4.             include \masm32\include\windows.inc
    5.             include \masm32\include\kernel32.inc
    6.             include \masm32\include\user32.inc
    7.             include \masm32\include\masm32.inc
    8.             includelib \masm32\lib\kernel32.lib
    9.             includelib \masm32\lib\user32.lib
    10.             include c:\masm32\macros\macros.asm
    11.             includelib \masm32\lib\masm32.lib
    12.     .data
    13. buf db 10 dup(?)
    14. mes db "aaaa",0
    15. xxx dd 12
    16.     .code
    17. start:
    18. mov eax,12Eh
    19. invoke dwtoa, eax, ADDR buf  ;из eax переводим в dec и помещаем в буфер
    20. invoke MessageBox,0,addr buf,addr mes,0
    21. ex:
    22. invoke ExitProcess,0
    23.  
    24. end start
     
  3. Blackbeam

    Blackbeam New Member

    Публикаций:
    0
    Регистрация:
    28 дек 2008
    Сообщения:
    960
    молоток
     
  4. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Шевелю ногой :
    1) Макрос - это "псевдо команда". При ее использовании вставляется последовательность ассемблерных команд. Пример - макрос invoke, который заменяется командами записи в стек + команда call
    2) Ты же имел проблему с использованием библиотечной функции dwtoa. Как только добавил библиотеку - все стало нормально.