|
|
  |
ARM ASM, Ассемблер для ARM, пример какой-нить |
|
|
|
Jul 9 2007, 08:43
|
Частый гость
 
Группа: Свой
Сообщений: 125
Регистрация: 21-03-07
Из: Санкт-Петербург
Пользователь №: 26 371

|
Всем добрый день! Есть необходимость для контроллера LPC2103 написать на ассемблере набор функций для работы с нестандартными по размерам данными (40 и 48 бит), раньше доводилось писать на асме только для AVR, поэтому хотелось бы изучить несколько примеров или просто описание с какими регистрами надо работать в асме для ARM. Описание инструкций нашел здесь - http://www.heyrick.co.uk/assembler/qfinder.html , но никаких примеров (ну даже самых простейших) у меня нет  Буду очень признателен за помощь.
|
|
|
|
|
Jul 9 2007, 12:45
|
Частый гость
 
Группа: Свой
Сообщений: 125
Регистрация: 21-03-07
Из: Санкт-Петербург
Пользователь №: 26 371

|
Цитата(KRS @ Jul 9 2007, 13:36)  IMHO можно смело использовать uint64_t и там где надо маску накладывать 0xFFFFFFFFFFFF или 0xFFFFFFFFFF Может это глупый вопрос - но как добавить поддержку этого типа в компилятор, в хелпе ИАР'а ничего о нем не нашел, где библиотеки фукций по работе с ним взять? Да к тому же надо числа со знаком обрабатывать...
Сообщение отредактировал Юрий Санвальд - Jul 9 2007, 13:06
|
|
|
|
|
Jul 9 2007, 13:55
|
Частый гость
 
Группа: Свой
Сообщений: 125
Регистрация: 21-03-07
Из: Санкт-Петербург
Пользователь №: 26 371

|
Цитата(zltigo @ Jul 9 2007, 17:46)  А причем тут IAR, это стандартные С99 унифицированные типы (как и int64_t ), описаны естественно в stdint.h. Вся работа штатная, как и со "старинным" double  . А! Все понял, просто смутило название uint64_t, не сразу впер, что это аналог doubl'а. В stdint.h все нашел, он там назван int_fast64_t.
Сообщение отредактировал Юрий Санвальд - Jul 9 2007, 13:55
|
|
|
|
|
Jul 9 2007, 14:49
|

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

|
Цитата(Юрий Санвальд @ Jul 9 2007, 17:55)  А! Все понял, просто смутило название uint64_t, не сразу впер, что это аналог doubl'а. В stdint.h все нашел, он там назван int_fast64_t. int_fast64_t тоже есть, но есть и int64_t - для ARM это одинаковые типы, но идеологически разные - fast64 может иметь больше 64 бит, например для ARM uint_fast8_t == uint32_t, и как локальные переменные, котортые будут находится в регистрах гораздо эффективнее использовать uint_fast8_t и где необходимо добавлять & 0xff. uint64_t - аналог double только по размеру в 64 бита.
|
|
|
|
|
Jul 9 2007, 14:57
|
Частый гость
 
Группа: Свой
Сообщений: 125
Регистрация: 21-03-07
Из: Санкт-Петербург
Пользователь №: 26 371

|
Цитата(zltigo @ Jul 9 2007, 18:51)  Не только - там есть кроме и 'быстрого' и 'обычный' int64_t, и 'не менее, чем'. А что более предпочтительно с точки зрения быстродействия?
|
|
|
|
|
Jul 9 2007, 15:00
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(Юрий Санвальд @ Jul 9 2007, 17:57)  А что более предпочтительно с точки зрения быстродействия? Для ARM, полагаю, все равно, но если ходите сказать, что сделали все, что в Ваших силах, напишите fast
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|