реклама на сайте
подробности

 
 
> ARM Ассемблер, программирование-искусство?
Tarkus
сообщение Mar 5 2009, 10:21
Сообщение #1





Группа: Участник
Сообщений: 9
Регистрация: 22-02-09
Пользователь №: 45 211



Читал heyrick.co.uk, автор - апологет принципа "код - произведение искусства" smile.gif
Например, в одну инструкцию:

BIC R0, R0, R0, ASR#31 ; IF R0 < 0 THEN R0 = 0

Или еще лучше, таблица из "N" переходов с помощью всего двух инструкций:

.swihandler
CMP R11, #((endofjumptable - startofjumptable) / 4)
ADDCC PC, PC, R11, LSL #2
B error
.startofjumptable
B swi0
B swi1
; etc...
.endofjumptable

Честно говоря, не понял принципа работы второго примера. Кто-нибудь может прояснить?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
kons
сообщение Mar 8 2009, 07:00
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 106
Регистрация: 28-09-05
Пользователь №: 9 035



Цитата
Этот принцип для досужей потехи хорош, а для профессиональной деятельности крайне вреден. Если так ковыряться в инструкциях, то времени на работу не останется :-)

Немного не так. Если неохота ковыряться в инструкциях, надо пользоваться C. Например, обсуждаемая здесь инициализация периферии - уж точно не задача для asm. На таких задачах (как и на большинстве прочих), как верно отметил KRS,
Цитата
Современный ARM компилер трудно обогнать используя ассемблер

А вот написать какой-нибудь внутренний короткий цикл на asm (фильтр какой-нибудь или демодулятор) - это часто очень даже имеет смысл. И тут уж все средства хороши. Но (по опыту) максимальный эффект в asm-модуле достигается не жонглированияем битами, а оптимизацией доступа к памяти - использованием вместо кучи LDR/STR одной LDMIA/STMIA. Компилятор так не умеет (ну, кроме входа/выхода в процедуру есс-но). Для ядра ARM7TDMI на задачах типа свертки результат подобного подхода очень даже радует.
Go to the top of the page
 
+Quote Post
ar__systems
сообщение Mar 8 2009, 13:53
Сообщение #3


self made
****

Группа: Свой
Сообщений: 855
Регистрация: 7-03-09
Из: Toronto, Canada
Пользователь №: 45 795



Цитата(kons @ Mar 8 2009, 02:00) *
Немного не так. Если неохота ковыряться в инструкциях, надо пользоваться C. Например, обсуждаемая здесь инициализация периферии - уж точно не задача для asm. На таких задачах (как и на большинстве прочих), как верно отметил KRS,
А вот написать какой-нибудь внутренний короткий цикл на asm (фильтр какой-нибудь или демодулятор) - это часто очень даже имеет смысл. И тут уж все средства хороши. Но (по опыту) максимальный эффект в asm-модуле достигается не жонглированияем битами, а оптимизацией доступа к памяти - использованием вместо кучи LDR/STR одной LDMIA/STMIA. Компилятор так не умеет (ну, кроме входа/выхода в процедуру есс-но). Для ядра ARM7TDMI на задачах типа свертки результат подобного подхода очень даже радует.

Грамотный ответ. Оптимизировать инициализацию переферии - оч глупо. Она выполняется один раз.
Оптимизировать цикл (на асм, по сравнению с С) думаю можно практически всегда, особенно если он написан на С человеком, который ассемблера в жизни не видел.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Tarkus   ARM Ассемблер   Mar 5 2009, 10:21
- - _Pasha   Код.swihandler ; На вход R11 - индекс в таблице ...   Mar 5 2009, 10:49
|- - Tarkus   Цитата(_Pasha @ Mar 5 2009, 12:49) .swiha...   Mar 5 2009, 11:23
- - scifi   Цитата(Tarkus @ Mar 5 2009, 13:21) CMP ...   Mar 5 2009, 10:55
- - KRS   да в этих примерах ничего удивительного нет! а...   Mar 5 2009, 10:59
|- - _Pasha   Цитата(KRS @ Mar 5 2009, 13:59) Современн...   Mar 5 2009, 11:04
|- - KRS   Цитата(_Pasha @ Mar 5 2009, 14:04) А вот ...   Mar 5 2009, 11:19
|- - _Pasha   Цитата(KRS @ Mar 5 2009, 14:19) Так вот в...   Mar 5 2009, 11:32
||- - zltigo   Цитата(ar__systems @ Mar 8 2009, 16:53) ....   Mar 8 2009, 14:00
||- - scifi   Цитата(ar__systems @ Mar 8 2009, 16:53) О...   Mar 9 2009, 10:50
|- - KRS   Цитата(kons @ Mar 8 2009, 10:00) Но (по о...   Mar 9 2009, 11:46
- - sergeeff   Почти в каждой современной книге по С/С++ написано...   Mar 9 2009, 11:15
|- - _Pasha   Цитата(sergeeff @ Mar 9 2009, 15:15) 1. П...   Mar 9 2009, 11:27
- - MALLOY2   расчет CRC32, ЦФ, свертка, FFT, практически все ма...   Mar 9 2009, 12:40
|- - ar__systems   Цитата(MALLOY2 @ Mar 9 2009, 07:40) расче...   Mar 9 2009, 13:37
- - kons   to KRS. Вы правы, кол-во обращений к данным не уме...   Mar 9 2009, 12:55
|- - aaarrr   Цитата(kons @ Mar 9 2009, 15:55) P.S. А к...   Mar 9 2009, 13:39
|- - KRS   Цитата(kons @ Mar 9 2009, 15:55) Простень...   Mar 9 2009, 14:28
- - kons   Да, хорошая штука RVCT. Мой IAR так не умеет - про...   Mar 9 2009, 15:36
- - KRS   Цитата(kons @ Mar 9 2009, 18:36) А для то...   Mar 9 2009, 16:22


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 18:33
Рейтинг@Mail.ru


Страница сгенерированна за 0.01293 секунд с 7
ELECTRONIX ©2004-2016