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

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

Вернуться   Форум программистов > IT форум > Общие вопросы по программированию, компьютерный форум
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.12.2011, 03:38   #1
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию Ассемблерные вставки в delphi код. Где этому научится?

Доброго времени суток!

Правильно ли считать, что ассемблерные вставки в код, будут выполнятся быстрее чем простой код?

Мне не достаточно той информации об ассемблере в delphi, может есть книги которые научат(С хорошими примерами и обьяснениями) писать ASM вставки в код?
Человек_Борща вне форума Ответить с цитированием
Старый 19.12.2011, 05:04   #2
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
Доброго времени суток!

Правильно ли считать, что ассемблерные вставки в код, будут выполнятся быстрее чем простой код?

Мне не достаточно той информации об ассемблере в delphi, может есть книги которые научат(С хорошими примерами и обьяснениями) писать ASM вставки в код?
Простой код в итоге переводится в асемблерный. Так что, не верно так считать. Нужно понимать когда вставки необходимы. Например, по моему опыту.

Мне нужно было ручками перевернуть и наложить альфа-градиент для изображения, но делать это очень быстро, т.к. вызов этого кода происходил многократно и часто. Делать это создавая новый битмап, затем переворачивать, затем градиент...или же идти по строчно с середины битмапа (уже существующего) и одновременно вычислять градиент значение и копировать его в другую строку. В итоге пройден битмап за половину времени и перевернут и сразу же наложен градиент. Такое выполнить я не смог в коде (C++ правда, но не важно), вставки ASM дали невероятный прирост в скорости и снизили нагрузку CPU.
BOBAH13 вне форума Ответить с цитированием
Старый 19.12.2011, 09:59   #3
dr.Chas
***
Участник клуба
 
Аватар для dr.Chas
 
Регистрация: 30.07.2007
Сообщений: 1,162
По умолчанию

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
Мне не достаточно той информации об ассемблере в delphi, может есть книги которые научат(С хорошими примерами и обьяснениями) писать ASM вставки в код?
Изучайте просто асм. Потом достаточно будет пары примеров, чтобы использовать его в delphi.
dr.Chas вне форума Ответить с цитированием
Старый 19.12.2011, 10:01   #4
haruhi
Форумчанин
 
Аватар для haruhi
 
Регистрация: 05.10.2011
Сообщений: 368
По умолчанию

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
Правильно ли считать, что ассемблерные вставки в код, будут выполнятся быстрее чем простой код?
это правильно только в том случае если ассемьлерную вставку пишет человек с отличным знанием матчасти.

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
Мне не достаточно той информации об ассемблере в delphi, может есть книги которые научат(С хорошими примерами и обьяснениями) писать ASM вставки в код?
для начала надо просто изучить матчасть, и в совершенстве знать что/откуда/как/каким образом работает
Не стоит будить спящего Бога! (с) Меланхолия Харухи Судзумии
haruhi вне форума Ответить с цитированием
Старый 19.12.2011, 10:34   #5
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

Человек_Борща
А ведь модератор нашего (извините, если что) форума написал книгу о программировании на асме под x86. Она подойдёт?

ВОВАН13
Цитата:
Простой код в итоге переводится в асемблерный. Так что, не верно так считать.
Несколько вопросов.
1. Простой-то переводится, а ассемблерный? ИМХО, экономия как раз из-за того, что ассемблерный код переводить не нужно.
2. Всем уже известно, что процессору нужны лишь команды процессора (машинные коды), а не код, пускай даже на асме. Зачем код переводить сначала в ассемблер, а затем в машинные команды, а не сделть это напрямую? Или это так организовано?

Кстати, ещё вот что. Считаю, что ассемблером уместно пользоваться ещё и тогда, когда необходимо получить прямой доступ к железу. ИМХО.
Вадим Мошев вне форума Ответить с цитированием
Старый 19.12.2011, 12:16   #6
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Ясно.

Знающие люди, можно посоветовать хорошие книги от которых реально можно чему-то научится?

Цитата:
1. Простой-то переводится, а ассемблерный? ИМХО, экономия как раз из-за того, что ассемблерный код переводить не нужно.
2. Всем уже известно, что процессору нужны лишь команды процессора (машинные коды), а не код, пускай даже на асме. Зачем код переводить сначала в ассемблер, а затем в машинные команды, а не сделть это напрямую? Или это так организовано?
1. в этом и не достаток ассемблерного. Его оптимизиовать сама среда не может(Как написал, так и ушло к транслятору). В отличии от формируемого из исходника(простого кода).

2. Процессор ест интерпритированный байт-код, но никак не ассемблерные вставки.

Откройте любой компилятор, да посмотрите весь процесс создания понятных для процессора инструкций.

Ассемблерный транслировать легче и быстрее.

Последний раз редактировалось Человек_Борща; 19.12.2011 в 12:23.
Человек_Борща вне форума Ответить с цитированием
Старый 19.12.2011, 14:42   #7
haruhi
Форумчанин
 
Аватар для haruhi
 
Регистрация: 05.10.2011
Сообщений: 368
По умолчанию

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
2. Процессор ест интерпритированный байт-код, но никак не ассемблерные вставки.
байт-код в Java и в .NET, в обычных программах машинный код
Не стоит будить спящего Бога! (с) Меланхолия Харухи Судзумии
haruhi вне форума Ответить с цитированием
Старый 19.12.2011, 18:17   #8
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Цитата:
Правильно ли считать, что ассемблерные вставки в код, будут выполнятся быстрее чем простой код?
Нет.

Само по себе переписывание кода в ассемблер не даст ничего. Более того, если у тебя нет опыта машинной оптимизации, то с вероятностью в 99,9% твой ассемблерный код будет в разы хуже кода, оптимизированного компилятором.

Правила просты (при условии, что эта же задача уже не решена, aka "просто воспользуйся хорошим готовым решением"):
1. Найти узкое место профайлером.
2. Нет узких мест? -> выход.
3. Оптимизируй код на ЯВУ.
4. Проверь результат. Удовлетворён? -> выход.
5. Оцени, насколько производительность кода важнее его сопровождения. Важен хороший код? -> выход.
6. Изучи ассемблерный листинг кода, сгенерированным компилятором.
7. Видишь места для улучшения? Нет -> выход.
8. Оптимизируй ассемблерный код.
9. Проверь результат. Стало хуже? Верни код на ЯВУ.
10. Стало лучше? Удовлетворён? -> выход.
11. Не удовлетворён? Ты достиг своих пределов.

Самый важный тут пункт 1. Нет смысла говорить об оптимизации, если у тебя нет способов её измерить.

Цитата:
может есть книги которые научат(С хорошими примерами и обьяснениями) писать ASM вставки в код?
Нет книжек по ассемблерным вставкам. Есть книги по ассемблеру. Вот их и бери.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 19.12.2011, 18:18   #9
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Цитата:
можно посоветовать хорошие книги от которых реально можно чему-то научится?
http://www.ozon.ru/context/detail/id/1418882/
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 19.12.2011, 18:27   #10
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
1. Простой-то переводится, а ассемблерный? ИМХО, экономия как раз из-за того, что ассемблерный код переводить не нужно.(ассемблирование)
асм код переводиться в бинарный.
Цитата:
2. Всем уже известно, что процессору нужны лишь команды процессора (машинные коды), а не код, пускай даже на асме. Зачем код переводить сначала в ассемблер, а затем в машинные команды, а не сделть это напрямую? Или это так организовано?
http://programmersforum.ru/showthread.php?t=177963
мой пост полистайте.
а так, напрямую в машинные коды вы все равно не переведете, так или иначе это будет через инструкции ассемблера, но итоговое ассемблирование может быть встроено в компилятор(как неотделимый процесс), а может быть отдельной ступенью, которую можно отделить(у gcc так можно например).
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ассемблерные вставки в c++ chupchupps Помощь студентам 1 09.02.2011 11:54
delphi ассемблерные вставки tanek Помощь студентам 8 19.04.2010 18:35
ассемблерные вставки в delphi viperrr Помощь студентам 2 09.12.2009 22:22
Ассемблерные вставки в Delphi Jupiter Общие вопросы Delphi 2 24.08.2008 16:41
Ассемблерные вставки Assassin Помощь студентам 1 26.05.2008 08:19