|
ARM Ассемблер, программирование-искусство? |
|
|
|
Mar 5 2009, 10:21
|
Группа: Участник
Сообщений: 9
Регистрация: 22-02-09
Пользователь №: 45 211

|
Читал heyrick.co.uk, автор - апологет принципа "код - произведение искусства"  Например, в одну инструкцию: 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 Честно говоря, не понял принципа работы второго примера. Кто-нибудь может прояснить?
|
|
|
|
|
 |
Ответов
|
Mar 8 2009, 07:00
|
Частый гость
 
Группа: Свой
Сообщений: 106
Регистрация: 28-09-05
Пользователь №: 9 035

|
Цитата Этот принцип для досужей потехи хорош, а для профессиональной деятельности крайне вреден. Если так ковыряться в инструкциях, то времени на работу не останется :-) Немного не так. Если неохота ковыряться в инструкциях, надо пользоваться C. Например, обсуждаемая здесь инициализация периферии - уж точно не задача для asm. На таких задачах (как и на большинстве прочих), как верно отметил KRS, Цитата Современный ARM компилер трудно обогнать используя ассемблер А вот написать какой-нибудь внутренний короткий цикл на asm (фильтр какой-нибудь или демодулятор) - это часто очень даже имеет смысл. И тут уж все средства хороши. Но (по опыту) максимальный эффект в asm-модуле достигается не жонглированияем битами, а оптимизацией доступа к памяти - использованием вместо кучи LDR/STR одной LDMIA/STMIA. Компилятор так не умеет (ну, кроме входа/выхода в процедуру есс-но). Для ядра ARM7TDMI на задачах типа свертки результат подобного подхода очень даже радует.
|
|
|
|
|
Mar 8 2009, 13:53
|
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 на задачах типа свертки результат подобного подхода очень даже радует. Грамотный ответ. Оптимизировать инициализацию переферии - оч глупо. Она выполняется один раз. Оптимизировать цикл (на асм, по сравнению с С) думаю можно практически всегда, особенно если он написан на С человеком, который ассемблера в жизни не видел.
|
|
|
|
Сообщений в этой теме
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  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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|