Правда ли, что если в конце описания процедуры стоит ret без параметров, то такая процедура ничего не возвращает?
MrRockchip, Зачем гадать? Страничка тов. Agner Fog'а содержит неплохой документ относительно различных соглашений о вызове функций (calling conventions). Для функций на ассемблере вопрос, вообще-то, не имеет особого смысла: функция возвращает то, что (и там, где) указано в её спецификации (и, соответственно, ожидается вызвавшим кодом). А значение операнда инструкции ret имеет отношение скорее к количеству аргументов функции.
Имеется в виду: если ret без параметров, то процедура просто передаёт управление основной программе и параметров не возвращает?
Может быть, от того, сколько у ret параметров, не зависит, возвращает она результат или нет? Или такой вариант - в любом случае процедура возвращает содержимое своих регистров и стека и всей памяти? Короче, изучайте матчасть, вопрос этот в некотором смысле философский.
MrRockchip Возвращаемое значение не зависит от параметров ret. параметр у ret показывает, сколько байт надо вытолкнуть из стека после адреса возврата.
ret это не команда, а дирректива, в зависимости от типа процедуры будет подменятся на retn (0C3h) или retf (0CBh), если процедуре передавались через стек параметры, то процедура может заканчиваться (но не объязана) на 0C2h iw (retn imm16) или на 0CAh iw (retf imm16) а вот передача результата работы процедуры идет либо через регистр eax(ax) если результат целочисленный, либо через стек FPU если результат вещестенный
Mikl___ Для стандартных соглашений (stcall,cdecl,...) - да, но если вы пишете на ассемблере, то вы можете возвращать значение где угодно. это справедливо и для retn и для retf(единственно, что retf кроме адреса возврата выталкивает ещё селектор).