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

 
 
> 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
Ответов
KRS
сообщение Mar 5 2009, 10:59
Сообщение #2


Профессионал
*****

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



да в этих примерах ничего удивительного нет!
а таблицу переходов таким образом любой нромальный компилятор строит!
Так что если хотите посмотреть на особености ARM ассемблера, возьмите разные компиляторы:
IAR, GCC, RVCT (только свежие) поставьте максимальную оптимизацию по времени, потом по скорости и смотрите листинг увидите много хитрых приемов.
Современный ARM компилер трудно обогнать используя ассемблер, особенно при работе с константами - сидеть и вычислять чего куда сдвинуть и счем проксорить... (особенно если вы используете текстовое имя константы, а компилер то знает ее значение...)
В общем, очень мало место осталось где стоит применять ASM ( но знать его все равно полезно)
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Mar 5 2009, 11:04
Сообщение #3


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(KRS @ Mar 5 2009, 13:59) *
Современный ARM компилер трудно обогнать используя ассемблер,


Это уж точно плюс пицот! Дык не все верят в очевидное sad.gif

Цитата
особенно при работе с константами - сидеть и вычислять чего куда сдвинуть и счем проксорить... (особенно если вы используете текстовое имя константы, а компилер то знает ее значение...)



А вот это, простите, не понял. Писанины больше получается - это факт, и выражений всяких поболее надо.
Go to the top of the page
 
+Quote Post
KRS
сообщение Mar 5 2009, 11:19
Сообщение #4


Профессионал
*****

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



Цитата(_Pasha @ Mar 5 2009, 14:04) *
А вот это, простите, не понял. Писанины больше получается - это факт, и выражений всяких поболее надо.

Например идет простая инициализация переферии.
т.е. надо по куче константных адресов записать константы.
Причем обычно константы представлены не числами, а символически (например не 0x12300 a ADC_REG_CTRL).
Так вот в силу специфики команд ARM не все контсатны можно оптимально загрузить в регистр, но зная их числовые представления и то что до этого было в регистрах можно получать их разными арифметическими и логическими действиями и компилер с этим прекрасно справляется, а вот руками упаришься считать. (типа что бы получиь константу DAC_INIT_1 = 0x48C04 можно (0x1233>>2)+4 а это одна команда для ARM)
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
|- - _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
- - 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 - 10:20
Рейтинг@Mail.ru


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