Помогите с фасмом

Тема в разделе "WASM.BEGINNERS", создана пользователем CR0ne, 18 май 2008.

  1. CR0ne

    CR0ne New Member

    Публикаций:
    0
    Регистрация:
    1 май 2007
    Сообщения:
    6
    Вот сижу парюсь.
    Есть такой код
    Код (Text):
    1. proc CopyToSystemDir pFileName
    2.    locals
    3.       .lpszFileName rb 100h
    4.    endl
    5.    pushad
    6.    push 100h
    7.    push .lpszFileName
    8.    call   [GetSystemDirectory]
    выйдет такая ошибка
    А если
    Код (Text):
    1. proc CopyToSystemDir pFileName
    2.    locals
    3.       .lpszFileName rb 100h
    4.    endl
    5.    pushad
    6.    push 100h
    7.    push [.lpszFileName]
    8.    call   [GetSystemDirectory]
    В чем же моя ошибка?
    И как в фасме буфер передать, блин не могу никак додуматься.
     
  2. Aspire

    Aspire New Member

    Публикаций:
    0
    Регистрация:
    19 май 2007
    Сообщения:
    1.028
    CR0ne
    lpszFileName у тебя должен быть размерности dd, тк это указатель, который ты передаешь фунции.
    Либо пиши push offset lpszFileName, если lpszFileName у тебя является буффером.
     
  3. KiNDeR

    KiNDeR New Member

    Публикаций:
    0
    Регистрация:
    13 июн 2003
    Сообщения:
    258
    Адрес:
    Russia
    для локальных переменных нужно адрес вычеслить через LEA
    Код (Text):
    1. proc CopyToSystemDir pFileName
    2.    locals
    3.       .lpszFileName rb 100h
    4.    endl
    5.    pushad
    6.    push 100h
    7.    lea eax,.lpszFileName
    8.    push eax
    9.    call   [GetSystemDirectory]
    только если ты переменную pFileName макроса не используешь, то зачем ее описывать?
     
  4. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    на самом деле надо
    Код (Text):
    1. ...
    2. lea eax,[.lpszFileName]
    3. push eax
    4. ...
    Aspire, тут обсуждаецо фасм
    KiNDeR, проверьте прежде чем постедь. ошибки в Begginers ставят начинающих в затруднительное положение
     
  5. CR0ne

    CR0ne New Member

    Публикаций:
    0
    Регистрация:
    1 май 2007
    Сообщения:
    6
    Всё спасибо, прокатило.

    А ещё такой вопрос, можно ли как-то это проще сделать.
    А то постоянно писать
    Код (Text):
    1. lea ebx,[.lpszFileName]
    Чтобы адрес буфера передавать.
    Код получиться объёмным.
     
  6. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    это относится только к адресам локальных переменных и к аргументам. Можешь написать простенький макрос.
     
  7. CR0ne

    CR0ne New Member

    Публикаций:
    0
    Регистрация:
    1 май 2007
    Сообщения:
    6
    И как будет выглядить это макрос
    Мне в голову приходит только
    Код (Text):
    1. macro addr arg
    2.  {
    3.    lea eax,[arg]
    4.  }
    но всёравно придёться постоянно писать так
    Код (Text):
    1. addr .lpszFileName
    2. invoke GetSystemDirectory,eax,100h
    А проще как-нибудь можно??
     
  8. zet

    zet New Member

    Публикаций:
    0
    Регистрация:
    15 окт 2007
    Сообщения:
    121
    Если подключаете win32ax.inc или win32wx.inc, тогда можно так:

    invoke GetSystemDirectory,addr .lpszFileName,100h
     
  9. CR0ne

    CR0ne New Member

    Публикаций:
    0
    Регистрация:
    1 май 2007
    Сообщения:
    6
    zetУ меня не катит. Выдаёт
     
  10. zet

    zet New Member

    Публикаций:
    0
    Регистрация:
    15 окт 2007
    Сообщения:
    121
    Так работает:
    Код (Text):
    1. include '%fasminc%\win32wx.inc'
    2.  
    3. .code
    4.  
    5. start:
    6. call    main
    7. invoke  ExitProcess,0
    8.  
    9. proc main
    10. locals
    11.   lpzsFileName TCHAR 'Hello!',0
    12. endl
    13.   invoke MessageBox, 0, addr lpzsFileName, addr lpzsFileName, 0
    14.   ret
    15. endp
    16.  
    17. .end start
    Попробуй без точки и/или заменить rb на db.
     
  11. CR0ne

    CR0ne New Member

    Публикаций:
    0
    Регистрация:
    1 май 2007
    Сообщения:
    6
    Твой пример не заработал у меня.
    Выдаёт ошибку.

    Пожет есть другие предложение??
    Придёться тупо постояно вставлять lea
     
  12. KiNDeR

    KiNDeR New Member

    Публикаций:
    0
    Регистрация:
    13 июн 2003
    Сообщения:
    258
    Адрес:
    Russia
    доктур а у мееня это...

    текст ошибки, на какую строку ругается?