Всем привет. Объясните пжл как получить возвращаемое значение из процедуры? Скажем я вызываю виндовую функцию ShellExecute. В хелпе написано что она возвращает error code. А как его получить?? вот как его вызываю: Код (Text): proc MY_SHELL_EXECUTE hWnd, lpOperation, lpFile, lpParameters, lpDirectory, nShowCmd invoke ShellExecute, [hWnd], [lpOperation], [lpFile], [lpParameters], [lpDirectory], [nShowCmd] stdcall ShowErrorMessage,[hWnd],eax ret endp Т.е. мне надо получить error code из ShellExecute, и вернуть его из MY_SHELL_EXECUTE дальше наверх. Если значение передается через стек, то надо ли отслеживать такую ситуацию ?? Т.е. типа доставть его оттудава? Использую Flat assembler. Буду весьма признателен за статьи и примеры о Flat assembler. А то у меня тока его ПДФ который вместе с ним.
Из процедуры возвращается то, что на момент возврата (выполнения инструкции ret) находится в eax. Это общепринятая практика. Возможны частные случаи возвращения через другие регистры, например ecx, edx - когда надо вернуть более одного параметра и не хватает регистра eax. Все апи возвращают результат в eax. Т.е. в твоем случае ShellExecute возвращает error code в eax. Вот его и нужно иметь в eax перед ret. ShowErrorMessage наверняка запортит этот код, поэтому его нужно сохранить, например в стеке, и перед самым возвратом из стека положить обратно в eax. Код (Text): proc MY_SHELL_EXECUTE hWnd, lpOperation, lpFile, lpParameters, lpDirectory, nShowCmd invoke ShellExecute, [hWnd], [lpOperation], [lpFile], [lpParameters], [lpDirectory], [nShowCmd] push eax ;сохранение кода от ShellExecute stdcall ShowErrorMessage,[hWnd],eax pop eax ;восстановление кода и его возврат из процедуры ret endp В вызывающей процедуре результат будет по-прежнему в eax О примерах: не на ту лошадь поставил Переходи на масм, практически все примеры на нем написаны.
Спасибо cresta! Просто и доступно объяснил. Если позволишь спрошу тебя нащет MASM. Где его взять? На этом сайте он как-бы есть, но в комментах я прочитал, что это на самом деле не MASM, а патч к патчу, или что-то в этом роде. Где родной сайт MASM-а. И, надеюсь, он бесплатный ?
Тут был масм когда-то, но его заменили на какой-то сервиспак. А вообще он есть на http://www.masm32.com/ В пакете с ним же идёт куча примеров, справка, кое-какие утилиты. Естественно бесплатный Синтаксис чуть-чуть другой, пока не втянулся в фасм, тебе легко будет перейти