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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.03.2013, 19:20   #1
Klod
Пользователь
 
Регистрация: 09.02.2012
Сообщений: 42
По умолчанию Грамотное использование inc файлов

Всем привет! У меня небольшой вопрос про include файлы, в которых должно содержаться определение нужных функций. Заключается он в следующем.
Когда для приложения нужно определять функции, мы дабы не захламлять код записываем их в .inc файлы. Но в masm32 уже есть файлы kernel32.inc, user32.inc и windows.inc. В них целая куча объявляемых функций. Но мне нужны лишь 2-3 из них. И есть возможность писать те же inc файлы, но с теми функциями, которые мне нужны.
Возникает вопрос: если использовать стандартные (из набора masm32) inc файлы(с целой кучей ненужных объявлений функций), а не написанные мной лично (в который пара-тройка функций объявлено) будет ли разница в быстродействии моего кода?
Klod вне форума Ответить с цитированием
Старый 12.03.2013, 04:16   #2
Ezhik Kihze
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 639
По умолчанию

Нет. В инках только прототипы, линкер вставить только используемые.
ICQ: 677936656 Gmail: ekEmbed@gmail.com
Ezhik Kihze вне форума Ответить с цитированием
Старый 12.03.2013, 10:41   #3
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Цитата:
Возникает вопрос: если использовать стандартные (из набора masm32) inc файлы(с целой кучей ненужных объявлений функций), а не написанные мной лично (в который пара-тройка функций объявлено) будет ли разница в быстродействии моего кода?
А вы вообще вдумайтесь в вопрос. Функции на исполнение не вызываются, алгоритм по-сути тот же, так откуда взяться замедлению быстродействия? Даже если бы компилятор-линкер не отсекали неиспользуемые функции, то максимум что они делали бы - спокойно лежали в памяти и немного ее захламляли. Т.е. изменения не в быстродействии, а в объеме исполняемого кода и, как следствие, некоторая задержка при запуске программы из-за большего объема загружаемого файла.
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 12.03.2013, 11:13   #4
Ezhik Kihze
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 639
По умолчанию

И в объеме не будет...
ICQ: 677936656 Gmail: ekEmbed@gmail.com
Ezhik Kihze вне форума Ответить с цитированием
Старый 12.03.2013, 11:50   #5
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Цитата:
Сообщение от Ezhik Kihze Посмотреть сообщение
И в объеме не будет...
Да я вас понял Это просто попытка помочь человеку думать логично...
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 12.03.2013, 13:14   #6
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,162
По умолчанию

Klod,
скажу тебе больше -- использование inc-файлов приведет, пусть к небольшому но замедлению, пример
Код:
.386
.model flat
include windows.inc
include kernel32.inc
include user32.inc
includelib user32.lib
includelib kernel32.lib
 
.data
MsgCaption      db "Iczelion's tutorial #2",0
MsgBoxText      db "Win32 Assembly is Great!",0
 
.code
start:
    invoke MessageBox, NULL,addr MsgBoxText, addr MsgCaption, MB_OK
    invoke ExitProcess,NULL
end start
заглядываем в ЕХЕ-файл через hiew32
Код:
.00400230: 6A00          ; push MB_OK
.00400232: 6800304000    ; push offset MsgCaption
.00400237: 6819304000    ; push offset MsgBoxText
.0040023C: 6A00          ; push 0
.0040023E: E807000000    ; call [40024A];invoke MessageBox,NULL,addr MsgBoxText,addr MsgCaption,MB_OK
.00400243: 6A00          ; push 0
.00400245: E806000000    ; call [400250];invoke ExitProcess,NULL
.0040024A: FF250820400000; jmp MessageBoxA
.00400250: FF250020400000; jmp ExitProcess
вместо того, чтобы напрямую вызывать MessageBoxA и ExitProcess мы сперва вызываем "подпрограммы" по адресам 40024A и 400250 с которых совершаем прыжки на настоящие MessageBoxA и ExitProcess, такого бы не было если бы не использовались inc-файлы
Код:
.386
.model flat
include windows.inc
includelib user32.lib
includelib kernel32.lib
extern _imp__MessageBoxA@16:dword
extern _imp__ExitProcess@4:dword
.code
start:  push MB_OK
    push offset MsgCaption
    push offset MsgBoxText
    push NULL
    call _imp__MessageBoxA@16
    push NULL
    call _imp__ExitProcess@4
.data
MsgCaption      db "Iczelion's tutorial #2",0
MsgBoxText      db "Win32 Assembly is Great!",0
end start
Mikl___ вне форума Ответить с цитированием
Старый 12.03.2013, 13:23   #7
Ezhik Kihze
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 639
По умолчанию

Только вот к инкам это не имеет отношение... Это компилятор работает.
ICQ: 677936656 Gmail: ekEmbed@gmail.com
Ezhik Kihze вне форума Ответить с цитированием
Старый 12.03.2013, 13:28   #8
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,162
По умолчанию

Ezhik Kihze,
хорошо, пусть компилятор... Но какой нужно указать ключ компилятору, чтобы не было бы этих лишних джампов? Это как раз следствие "инвокабельности" вызова ВинАПИ-функций
при сборке программы с включением
Код:
extern _imp__MessageBoxA@16:dword
extern _imp__ExitProcess@4:dword
и отсутствием строк
Код:
include kernel32.inc
include user32.inc
лишние джампы исчезнут

Последний раз редактировалось Mikl___; 12.03.2013 в 13:32.
Mikl___ вне форума Ответить с цитированием
Старый 12.03.2013, 14:41   #9
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

Опять таки, ни какой разницы нет, используете вы inc или нет, для всех вызовов из сторонних длл. Как ни пиши такие вызовы всегда непрямые и проходят через jump table.

лишних прыжков нет - они все нужные.


так что, как ни крути, ничего там не исчезнет.

Последний раз редактировалось f.hump; 12.03.2013 в 14:51.
f.hump вне форума Ответить с цитированием
Старый 12.03.2013, 15:03   #10
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,162
По умолчанию

f.hump
Цитата:
Как ни пиши такие вызовы всегда непрямые и проходят через jump table.
Да, ну? А проверить? Пример я дал, hiew32, надеюсь, найти не сложно, покрутите, попробуйте...
Mikl___ вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Грамотное завершение потока, если поток на паузе winhttp Общие вопросы .NET 3 11.01.2013 12:55
Категории фильмов, грамотное проектирование БД Abuhamed PHP 3 13.01.2012 09:22
Использование файлов ресурсов Mixim Общие вопросы .NET 4 13.01.2011 03:39
Грамотное юзабилити(интерфейс для пользователя) Alexei91 Свободное общение 35 16.09.2010 13:46
Использование строк и файлов Allysia Помощь студентам 2 23.02.2010 09:10