Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.03.2013, 11:53   #1
Klod
Пользователь
 
Регистрация: 09.02.2012
Сообщений: 42
Сообщение Модель вызова подпрограмм в ассемблере

Здравствуйте. Всем доброго времени суток. У меня неожиданно возник вопрос о том, как выбор модели вызова подпрограмм в ассемблере влияет на быстродействие. Как вы уже знаете есть стандартный тип это stdcall. Но вызвать подпрограмму можно также по разному. На пример функция MessageBox
PHP код:
push 0h 
push offset Msg 
push offset Ttl 
push 0h 
call MessageBoxA 
&
PHP код:
call MessageBox0offset Msgoffset Ttl
Есть ли различие в быстродействии при использование этих 2 методов вызова функций, если да, то какой метод быстрее? Вопрос возможно глуп, ведь 1 случай отличается от 2 лишь своей последовательностью команд, но 2 случай проще. Меня волнует можно ли из-за такого упрощения потерять быстродействие.
P.S Сильно не ругайте я просто новичок...
И ещё: в этой теме я рассмотрел лишь одну модель вызова и это stdcall.
Klod вне форума Ответить с цитированием
Старый 11.03.2013, 12:04   #2
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

скомпилируйте оба варианта и посмотрите в отладчике. сразу отпадут все вопросы)
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 11.03.2013, 13:02   #3
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

второй случай больше смахивает использование макроса INVOKE.

никакой разницы конечно же нет. в первом случае все сами честно записали, во втором случае за вас это сделал компилятор (преобразовал INVOKE в последовательность PUSH и CALL)
f.hump вне форума Ответить с цитированием
Старый 11.03.2013, 15:44   #4
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Цитата:
Сообщение от f.hump Посмотреть сообщение
второй случай больше смахивает использование макроса INVOKE.

никакой разницы конечно же нет. в первом случае все сами честно записали, во втором случае за вас это сделал компилятор (преобразовал INVOKE в последовательность PUSH и CALL)
эхх.. испортили воспитательный процесс оно же пока сам не попробуешь - до конца верить будешь, что все по-другому...
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 11.03.2013, 19:08   #5
Klod
Пользователь
 
Регистрация: 09.02.2012
Сообщений: 42
По умолчанию

Всем спасибо за ответы. Кстати вашим советом "скомпилировать и посмотреть в отладчике" я не пренебрег, действительно почти тоже самое, за исключением одной строки после вызова функции wsprintf но я знаю из-за чего.
Klod вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Инструкции работы со стеком и организации подпрограмм на ассемблере IA-32 StarMoon Помощь студентам 1 09.05.2012 17:36
Инструкции работы со стеком и организации подпрограмм на ассемблере IA-32 StarMoon Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 09.05.2012 17:25
Отмена вызова метода peplenko Общие вопросы C/C++ 2 12.04.2011 13:52