Копилка MaxLim.

Если Вам понравилась наша программа, Вы можете купить нам кофе (или кофемашину) или пивка для поднятия настроения и ускорения написания новых программ и обновлений :), Пополните копилку и разработка программ ускорится :)...
Пополнить копилку можно несколькими способами:

1. Переводом через мобильный банк Сбербанка - Отправить на номер 900 смс содержания "ПЕРЕВОД 9284741288 100" - где последняя цифра это сумма перевода.
2. Кошелек WebMoney - R809881130844
3. Кошелек Яндекс Деньги - 41001737394948

Контакты для связи:
Skype - go_ramalex
mail - maxlim_soft@mail.ru

Ассемблерные вставки в циклах

Motorcode, 2009
Uraniumcode@gmail.com



Оптимизация. Испольщование ассемблерных вставок вместо циклов в Pascal и в C++.

Я думаю все когда что — то программировали, использовали циклы. Это и не удивительно, циклы — это одна из основ программирования и без них никуда. В больших приложениях, их количество может быть очень большим. Но что делать когда циклов много, а программа работает не так быстро как хотелось бы? Не убирать же их жертвуя функциями. Для этого существует оптимизация программного кода или проще — оптимизация. Каждый слово «оптимизация» понимает по разному. Для одних это заключение повторяющихся фрагментов кода в функции, а для других включение ассемблерных вставок в программный код. Последнее, мне видится, наиболее предпочтительным из — за реального ускорения работы программы. Этим мы и займёмся. Ведь ничто не сближает человека с машиной, как Ассемблер(без пошлостей).
Примеры будут на Pascal и на С++. Почему? Потому что они мне больше нравятся. Сразу говорю, что данная статья не рассматривается как пособие по Ассемблеру или другому языку программирования. Если что — то не понятно, то лучше ознакомится с учебниками.
Итак, начнем. Сначала примеры будут на Pascal. Первым делом напишем цикл так как это делают все люди.

Листинг 1.1

function func:Integer;
var
i:Integer;
begin
for i := 0 to 20 do
writeln(i);
end;

Тут всё понятно, поэтому напишем тоже самое, только с помощью Ассемблера
Листинг 1.2

function func:Integer;
var
i:Integer;
begin
i := 0;
asm
mov ecx,i //Копируем i в ecx
@@tr: //организуем цикл
mov i,ecx //копируем ecx в i
inc ecx //увеличиваем ecx на едницу
cmp ecx,20 //сравниваем ecx с 20
jne @@tr //если не равно, то продолжаем цикл 
end;
writeln(i); //Выводим результат
end;

А вот тут помимо комментариев нужны дополнительные комментарии. Во — первых, регистр ecx выбран, конечно, не случайно. Он и должен отвечать за циклы, потому как о является счётчиком. Объявляем цикл приккаждом проходе через mov I, ecx, I увеличивается на единицу как и ecx, при проходе через inc eax. Потом ecx сравнивается с 20 и если они равны то цикл заканчивается и выводится значение. В принципе всё довольно просто, а скорость прибавится.
Теперь рассмотрим тоже самое, только касательно С++. Для начала напишем цикл так как он выглядит стандартно.
Листинг 1.3

Int main()
{
for(int I = 0;i < 10;i++)
cout << i
return 0;
}

Теперь не теряя времени переходим к Ассемблеру:
Листинг 1.4

int main()
{
int i = 0;
__asm
{
mov ecx,i //Копируем i в ecx
tr: //организуем цикл
mov i,ecx //копируем ecx в i
inc ecx //увеличиваем ecx на едницу
cmp ecx,20 //сравниваем ecx с 20
jne tr //если не равно, то продолжаем цикл 
}
cout << i;
return 0;
}

Впринципе всё было обяснено выше, добавлю только что по правилая языка C++, всавки пишуться как __asm{//код}.
Предел оптимизации не знает границ. Прибольшом желаниии и умении мужно достичь болььших высот. Мы только начали этот путь. Всем удачи и терпения!


Автор: Uranium | Добавлено: 11.8.2009, 12:51 | Просмотров: 7075
Добавить комментарий


Лучшие программы
Будильник
Lim BurnDisc
Радио плеер
Lim BackUp
Календарь праздников
Телефонный справочник
Аудио конвертер
LimNote
Стикеры
Таймер выключения
Женский календарь
Клавиатурный тренажер
Lim Block Folder
Lim Screenshot
Lim Tree Note
Lim Soft Catalog
Lim Quick Panel
Lim Frame Photo
Photo Text Pro
Lim Flash Security
Lim Launcher
... ... ...

Программы
Блог
Комментарии
Добрый день! В прогр...
Пробуйте запуститься...
Добрый день! Начну с...
Добрый день Максим! ...
...
На номер телефона мо...
а где ваше киви хоте...
Проблема решилась от...
Ребята, вы прост...
Зраствуйте. Кто реши...
Группа VK
Поделиться






Яндекс.Метрика PR-CY.ru Яндекс цитирования

MaxLim.org - Сайт Компании MaxLim http://vsofte.biz MaxLim.org - Сайт Компании MaxLim MaxLim.org - Сайт programs.lv SoftOut.ru - Сайт SoftOut.ru  

Copyright MaxLim © 2007-2017