О процедуре

Тема в разделе "WASM.BEGINNERS", создана пользователем MrRockchip, 29 июн 2010.

  1. MrRockchip

    MrRockchip New Member

    Публикаций:
    0
    Регистрация:
    18 янв 2009
    Сообщения:
    49
    Правда ли, что если в конце описания процедуры стоит ret без параметров,
    то такая процедура ничего не возвращает?
     
  2. edemko

    edemko New Member

    Публикаций:
    0
    Регистрация:
    25 ноя 2009
    Сообщения:
    454
    нет
     
  3. MrRockchip

    MrRockchip New Member

    Публикаций:
    0
    Регистрация:
    18 янв 2009
    Сообщения:
    49
    А что же она тогда возвращает?
     
  4. MrRockchip

    MrRockchip New Member

    Публикаций:
    0
    Регистрация:
    18 янв 2009
    Сообщения:
    49
    Может быть, выталкивает из стека?
     
  5. baldr

    baldr New Member

    Публикаций:
    0
    Регистрация:
    29 апр 2010
    Сообщения:
    327
    MrRockchip,

    Зачем гадать? Страничка тов. Agner Fog'а содержит неплохой документ относительно различных соглашений о вызове функций (calling conventions). Для функций на ассемблере вопрос, вообще-то, не имеет особого смысла: функция возвращает то, что (и там, где) указано в её спецификации (и, соответственно, ожидается вызвавшим кодом).

    А значение операнда инструкции ret имеет отношение скорее к количеству аргументов функции.
     
  6. MrRockchip

    MrRockchip New Member

    Публикаций:
    0
    Регистрация:
    18 янв 2009
    Сообщения:
    49
    Имеется в виду: если ret без параметров,
    то процедура просто передаёт управление основной программе и параметров не возвращает?
     
  7. Phuntik

    Phuntik New Member

    Публикаций:
    0
    Регистрация:
    4 фев 2008
    Сообщения:
    318
    Может быть, от того, сколько у ret параметров, не зависит, возвращает она результат или нет?
    Или такой вариант - в любом случае процедура возвращает содержимое своих регистров и стека и всей памяти?
    Короче, изучайте матчасть, вопрос этот в некотором смысле философский.
     
  8. qwe8013

    qwe8013 New Member

    Публикаций:
    0
    Регистрация:
    28 май 2009
    Сообщения:
    198
    MrRockchip

    Возвращаемое значение не зависит от параметров ret.
    параметр у ret показывает, сколько байт надо вытолкнуть из стека после адреса возврата.
     
  9. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.792
    ret это не команда, а дирректива, в зависимости от типа процедуры будет подменятся на retn (0C3h) или retf (0CBh), если процедуре передавались через стек параметры, то процедура может заканчиваться (но не объязана) на 0C2h iw (retn imm16) или на 0CAh iw (retf imm16) а вот передача результата работы процедуры идет либо через регистр eax(ax) если результат целочисленный, либо через стек FPU если результат вещестенный
     
  10. qwe8013

    qwe8013 New Member

    Публикаций:
    0
    Регистрация:
    28 май 2009
    Сообщения:
    198
    Mikl___
    Для стандартных соглашений (stcall,cdecl,...) - да, но если вы пишете на ассемблере, то вы можете возвращать значение где угодно.

    это справедливо и для retn и для retf(единственно, что retf кроме адреса возврата выталкивает ещё селектор).