FASM - ENTER и RETURN

Тема в разделе "WASM.ASSEMBLER", создана пользователем maks, 14 янв 2006.

  1. maks

    maks New Member

    Публикаций:
    0
    Регистрация:
    14 янв 2006
    Сообщения:
    4
    В ФАСМ 1.65 не опознаются команды ENTER и RETURN , почему так , и как это можно исправить ? Я перелопатил инфы по нему много включая туториал но ни чего не нешёл .
     
  2. Alexey2005

    Alexey2005 New Member

    Публикаций:
    0
    Регистрация:
    9 янв 2006
    Сообщения:
    19
    Адрес:
    Russia
    Просто это макросы, а не комадны. И они заменены на MASM-подобные proc и endp. А чтобы пользоваться enter и return, необходимо создать inc-файл следующего содержания:
    Код (Text):
    1. macro proc name,[arg]           ; define procedure
    2.  { common
    3.     name:
    4.     virtual at ebp+8
    5.     if ~ arg eq
    6.    forward
    7.      local ..arg
    8.      ..arg dd ?
    9.      arg equ ..arg
    10.    common
    11.      end if
    12.      ..ret = $ - (ebp+8)
    13.     end virtual
    14.     local ..dynamic_data,..dynamic_size
    15.     dynamic_data equ ..dynamic_data
    16.     dynamic_size equ ..dynamic_size
    17.     virtual at ebp - dynamic_size
    18.      dynamic_data: }
    19.  
    20. macro enter             ; begin procedure instructions
    21.  { dynamic_size = $ - dynamic_data
    22.    end virtual
    23.    enter dynamic_size,0 }
    24.  
    25. macro return                ; return from procedure
    26.  { leave
    27.    ret ..ret }
    28.  
    И подключать этот inc-файл в программы.
     
  3. maks

    maks New Member

    Публикаций:
    0
    Регистрация:
    14 янв 2006
    Сообщения:
    4
    Пасибки пояснили ! :)
     
  4. shoo

    shoo New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2003
    Сообщения:
    1.537
    Адрес:
    Ukraine
    начиная с версии 1.62 несколько изменилась концепция для процедур, объявленых через proc. если брать старые примеры, то лучше просто удалить enter-ы, а return-ы заменить на ret
     
  5. maks

    maks New Member

    Публикаций:
    0
    Регистрация:
    14 янв 2006
    Сообщения:
    4
    Ясно но мне так говорили уже и не аргументировали ! Я пробовал программа чесно говоря не работала ! Попробовать как сказал Alexey2005 стоит думаю
     
  6. maks

    maks New Member

    Публикаций:
    0
    Регистрация:
    14 янв 2006
    Сообщения:
    4
    Может ещё варианты есть, кто знает ?
     
  7. shoo

    shoo New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2003
    Сообщения:
    1.537
    Адрес:
    Ukraine
    proc/endp - это макросы, которые были изменены в версии 1.6?.

    предъяви процедуру.

    ===

    на всякий случай: для того, чтобы эти макросы появились, нужно включить либо либо macro\proc32.inc, либо win32a.inc (и тп)
     
  8. Shukuchi

    Shukuchi New Member

    Публикаций:
    0
    Регистрация:
    1 апр 2009
    Сообщения:
    6
    пробую пример EXAMPLES\DIALOG\DIALOG.ASM
    всё равно выдаёт

    Код (Text):
    1. Error: Missing end directive
    2. if used DialogProc
     
  9. Shukuchi

    Shukuchi New Member

    Публикаций:
    0
    Регистрация:
    1 апр 2009
    Сообщения:
    6
    fasmw.ini

    [Environment]
    Fasminc = C:\fasmw\INCLUDE
    include = C:\fasmw\INCLUDE


    Если подрубаю inc командой include 'ret.inc' (так назвал код приведённый Alexey2005)
    выдаёт:

    Error Illegal Instruction

    Instruction:
    DialogProc hwnddlg:


    а в ret.inc указывает на

    name: