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

 
 
> 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 9 2009, 12:55
Сообщение #2


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

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



to KRS.
Вы правы, кол-во обращений к данным не уменьшает, но (для ARM7TDMI, у Cortex и особенно ARM9 разница не столь существенна) LDR - 3 такта/слово, LDMIA - 2+1*кол-во слов. Т.е. при загрузке, скажем, 8 регистров LDRx8 = 24 такта, LDMIA - 10 тактов. Да, забыл сказать - это при выполнении из RAM. При выполнении из флэша на AT91SAM7 добавьте к каждому LDR еще по такту - флеш медленнее, однако.

Простенький пример - цикл вычисления FIR. Данные берутся из циркулярного буфера (DL_PTR, DL_BASE, DL_SIZE). Обрабатываются 4 отвода за раз. Напишите на c, скомпилируйте, посчитайте такты, сравните. А стоит или не стоит это делать на ASM - зависит от потребной частоты вычисления и длины фильтра. В моем случае (Fд=48 кГц, L=20 отводов, и кроме этого еще куча дел) - стоило однозначно. Была бы Fд 8 кГц - не стал бы заморачиваться. Что же касается реакции на прерывания - на то DMA есть.

FIR_DELAY_LOOP MACRO
LOCAL FDL_LP
FDL_LP: LDMDB DL_PTR!,{R_SMP3-R_SMP0} ;8
CMP DL_PTR,DL_BASE
ADDLS DL_PTR,DL_PTR,DL_SIZE
LDMIA SUFF_PTR!,{R_SUFF0-R_SUFF3} ;6
MLA R_ACC,R_SUFF0,R_SMP0,R_ACC ;16
MLA R_ACC,R_SUFF1,R_SMP1,R_ACC
MLA R_ACC,R_SUFF2,R_SMP2,R_ACC
MLA R_ACC,R_SUFF3,R_SMP3,R_ACC
SUBS SUFF_CNT,SUFF_CNT,#4 ;4
BNE FDL_LP
ENDM

P.S. А как тут код нормальный вставлять? Что с цитатой, что без - все одно каша...

to Pasha:
Цитата
Это квадратные советы. Они не учитывают задачи портирования, коих большинство, когда об алгоритме уже известно почти все, надо чтобы оно красиво влезло и не мешало жить наращиваемой функциональности. В таких случаях я лично начинаю с проверки и оптимизации именно узких мест.

+500. Особенно для DSP, и особенно на этапе выбора процессора.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 9 2009, 13:39
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(kons @ Mar 9 2009, 15:55) *
P.S. А как тут код нормальный вставлять? Что с цитатой, что без - все одно каша...

Теги [сode] и [сodebox].
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
- - kons   ЦитатаЭтот принцип для досужей потехи хорош, а для...   Mar 8 2009, 07:00
|- - ar__systems   Цитата(kons @ Mar 8 2009, 02:00) Немного ...   Mar 8 2009, 13:53
||- - 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
|- - 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 Текстовая версия Сейчас: 22nd July 2025 - 08:45
Рейтинг@Mail.ru


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