вызов процедуры с параметрами в fasm

Тема в разделе "FASM", создана пользователем RuAsm, 22 мар 2007.

  1. RuAsm

    RuAsm Виктор

    Публикаций:
    0
    Регистрация:
    16 июл 2006
    Сообщения:
    125
    Адрес:
    Спасск-D, Приморский край!
    Как вообще можно передать параметр в функцию?
    в исходниках рылся, так и не нашел ни однго вызова процедуры с параметрами, не ну может оно как то по особенному вызывается что я не понял что это был вызов с параметрами
     
  2. RuAsm

    RuAsm Виктор

    Публикаций:
    0
    Регистрация:
    16 июл 2006
    Сообщения:
    125
    Адрес:
    Спасск-D, Приморский край!
    примерчик плиз дайте) кому не жалко..
     
  3. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    MyFunction:
    enter 0,0
    mov eax, [ebp+8]
    add eax, 400
    leave
    ret

    start:
    push 175
    call MyFunction
    ; теперь в EAX лежит 175 плюс 400, то есть 575
     
  4. twgt

    twgt New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    1.494
    Через запятую :)
    если функция из длл'ки то invoke, если твоя то stdcall
     
  5. twgt

    twgt New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    1.494
    Great, ой чувствую что с enter'ом у него не скомпилится
     
  6. RuAsm

    RuAsm Виктор

    Публикаций:
    0
    Регистрация:
    16 июл 2006
    Сообщения:
    125
    Адрес:
    Спасск-D, Приморский край!
    а больше нет методов?
     
  7. RuAsm

    RuAsm Виктор

    Публикаций:
    0
    Регистрация:
    16 июл 2006
    Сообщения:
    125
    Адрес:
    Спасск-D, Приморский край!
    кстати а что такое leave и enter объясните плиз..
     
  8. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    Код (Text):
    1. proc add par1,par2
    2.  mov eax,[par1]
    3.  add eax,[par2]
    4.  ret
    5. endp
    6.  
    7. start:
    8.  stdcall add,1,2
     
  9. RuAsm

    RuAsm Виктор

    Публикаций:
    0
    Регистрация:
    16 июл 2006
    Сообщения:
    125
    Адрес:
    Спасск-D, Приморский край!
    нормуль всё...
     
  10. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    RuAsm
    команды для создания и уничтожения кадра стека. читай книжку по асму

    enter 0, 0 = push ebp / mov ebp, esp
    enter X, 0 = push ebp / mov ebp, esp / sub esp, X
    leave = mov esp, ebp / pop ebp
     
  11. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    RuAsm
    enter выполняется дольше, чем все 2 или 3 команды push ebp + mov ebp,esp + [sub esp,n]. Поэтому даже самые тупые компиляторы не используют enter в качестве пролога. Зато leave - нормальная в плане быстродействия инструкция и занимает всего 1 байт.
     
  12. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    хм, кстати, не знал.
     
  13. asmfan

    asmfan New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2006
    Сообщения:
    1.004
    Адрес:
    Abaddon
    Хрошо б в #3 ещё стэк поправить/почистить после вызовы или cinvoke/ccall
     
  14. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    хм, ну да, не RET, а RET 4 там надо, если хотим stdcall, или cinvoke или invoke / add esp, 4 если хотим cdecl
     
  15. AsmGuru62

    AsmGuru62 Member

    Публикаций:
    0
    Регистрация:
    12 сен 2002
    Сообщения:
    689
    Адрес:
    Toronto
    А в регистрах тоже можно передать параметр!
    Код (Text):
    1. mov edx, parameter
    2. call foo
    3.  
    4. ...
    5.  
    6. foo:
    7.     ; use EDX here
    8.     ret
     
  16. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    AsmGuru62
    наверное ему больше интересен был stdcall/cdecl, а не fastcall