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

 
 
5 страниц V   1 2 3 > »   
Reply to this topicStart new topic
> Прибавить константу к регистру!
777777
сообщение Mar 6 2008, 08:11
Сообщение #1


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

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



Есль команды subi, sbci, где же addi, adci?
Go to the top of the page
 
+Quote Post
starter48
сообщение Mar 6 2008, 08:26
Сообщение #2


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

Группа: Свой
Сообщений: 112
Регистрация: 15-10-05
Из: Томск
Пользователь №: 9 680



Цитата(777777 @ Mar 6 2008, 14:11) *
Есль команды subi, sbci, где же addi, adci?

Отнять константу с минусом.
Т.е. если хочешь прибавить 1, то отними -1 ($FF):
subi r16,$FF ;прибавить 1 к r16
Go to the top of the page
 
+Quote Post
777777
сообщение Mar 6 2008, 08:38
Сообщение #3


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

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



Цитата(starter48 @ Mar 6 2008, 11:26) *
Отнять константу с минусом.


Мда, мой восторг от атмела постепенно проходит. Сначала выяснилось что регистры неавоправные, потом условные пропуски оказались какими-то странными, теперь вот. Уж логичнее было бы не делать команду вычитания - прибавлять отрицательные константы привычнее.
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Mar 6 2008, 08:50
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Цитата(777777 @ Mar 6 2008, 12:38) *
Мда, мой восторг от атмела постепенно проходит. Сначала выяснилось что регистры неавоправные, потом условные пропуски оказались какими-то странными, теперь вот. Уж логичнее было бы не делать команду вычитания - прибавлять отрицательные константы привычнее.

А какая разница напишешь ли ты так:
Код
adi  r2,low(1234)
adci r2,high(1234)

или так
Код
subi  r2,low(-1234)
sbci  r2,high(-1234)

Есть кстати adiw - сразу константу к регистровой паре прибавляет. Можно посмотреть (если константа небольшая)

А что значит "условные пропуски какие то странные"?
По моему наличие всех необходимых бит признаков и установка их при любой операции - самый большой прорыв, по сравнению с х51. Именно это дало такой прирост производительности при работе с арифметикой. Там сравнение - это просто пляски с бубном.
Go to the top of the page
 
+Quote Post
KRS
сообщение Mar 6 2008, 09:05
Сообщение #5


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

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



Цитата(777777 @ Mar 6 2008, 11:38) *
Мда, мой восторг от атмела постепенно проходит. Сначала выяснилось что регистры неавоправные, потом условные пропуски оказались какими-то странными, теперь вот.

А вы знаете 8 разрядный контроллер с более удобной системой команд и архитектурой?

Цитата(777777 @ Mar 6 2008, 11:38) *
Уж логичнее было бы не делать команду вычитания - прибавлять отрицательные константы привычнее.

Это дело вкуса, вы можете написать макросы addi и adci
к тому же в тех кусках которые приходится писать на асме у меня почему то чаще используется вычитание константы и проверка флагов так получается удобнее. а обе команды не влезают в пространство 16 бит, и именно вычитание оставили не просто так.
Go to the top of the page
 
+Quote Post
starter48
сообщение Mar 6 2008, 09:07
Сообщение #6


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

Группа: Свой
Сообщений: 112
Регистрация: 15-10-05
Из: Томск
Пользователь №: 9 680



Цитата(777777 @ Mar 6 2008, 14:38) *
Мда, мой восторг от атмела постепенно проходит. Сначала выяснилось что регистры неавоправные, потом условные пропуски оказались какими-то странными, теперь вот. Уж логичнее было бы не делать команду вычитания - прибавлять отрицательные константы привычнее.

Этот процессор задумывался для работы с компиляторами языков высого уровня.
Когда пишешь на Си, о таких мелочах и не задумываешься smile.gif
На асме в наше время пишут только критичные участки кода.
Go to the top of the page
 
+Quote Post
vet
сообщение Mar 6 2008, 09:08
Сообщение #7


Знающий
****

Группа: Свой
Сообщений: 550
Регистрация: 16-06-04
Из: Казань
Пользователь №: 32



Цитата(SasaVitebsk @ Mar 6 2008, 11:50) *
По моему наличие всех необходимых бит признаков и установка их при любой операции - самый большой прорыв, по сравнению с х51. Именно это дало такой прирост производительности при работе с арифметикой. Там сравнение - это просто пляски с бубном.

а мне вот в AVR бита четности не хватает... в 51 он временами сильно упрощал битовые манипуляции 05.gif
впрочем, по сравнению с развитыми арифметикой и адресацией это неважно smile.gif


--------------------
Главная линия этого опуса ясна мне насквозь!
Go to the top of the page
 
+Quote Post
777777
сообщение Mar 6 2008, 10:19
Сообщение #8


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

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



Цитата(SasaVitebsk @ Mar 6 2008, 11:50) *
А что значит "условные пропуски какие то странные"?


Условные переходы сделаны в виде "переход если условие выполнено". Однако для портов и регистров предусмотрели команды "пропуск если бит установлен/сброшен". Почему бы это не сделать для битов регистра состояния? Например, получение абсолютного значения можно было бы сделать так:
tst r0
skip if pl
neg r0
; здесь в r0 его абсолютное значение

Ага, но ведь регистр состояния - тоже порт! Однако фиг - команда sbrs SREG, SREG_Z не прокатывает - SREG не попадает в диапазон адресов, допустимых в этой команде.


Цитата(KRS @ Mar 6 2008, 12:05) *
А вы знаете 8 разрядный контроллер с более удобной системой команд и архитектурой?


Да пожалуй что нет... sad.gif

Цитата(starter48 @ Mar 6 2008, 12:07) *
Этот процессор задумывался для работы с компиляторами языков высого уровня.
Когда пишешь на Си, о таких мелочах и не задумываешься smile.gif


Кстати, у меня почему-то не работает WinAvr на Висте - пишет "avr-gcc: installation problem, cannot exec `cc1': No such file or directory"

На ХР все нормально, хотя ставил абсолютно одинаковым образом.
Go to the top of the page
 
+Quote Post
Rst7
сообщение Mar 6 2008, 10:26
Сообщение #9


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата
tst r0
skip if pl
neg r0


А какая разница с переходом???
Код
tst r0
brpl $+4
neg r0


Даже по тактам тоже самое...


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
defunct
сообщение Mar 6 2008, 11:11
Сообщение #10


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(777777 @ Mar 6 2008, 12:19) *
Ага, но ведь регистр состояния - тоже порт! Однако фиг - команда sbrs SREG, SREG_Z не прокатывает

А зачем она нужна если для SREG можно более цивильно использовать
BREQ / BRNE
BRTS / BRTC
BRCS / BRCC
BRHS / BRHC
BRMI / BRPL
BRVS / BRVC
BRBS / BRBC

IMHO skip'ы SBRS /SBRC, SBIC / SBIS - Pic'овый непотреб, хотя иногда (но редко) бывает полезным.
Go to the top of the page
 
+Quote Post
rx3apf
сообщение Mar 6 2008, 11:46
Сообщение #11


Гуру
******

Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047



Цитата(defunct @ Mar 6 2008, 14:11) *
А зачем она нужна если для SREG можно более цивильно использовать
BREQ / BRNE
BRTS / BRTC
BRCS / BRCC
BRHS / BRHC
BRMI / BRPL
BRVS / BRVC
BRBS / BRBC


IMHO, в результате исходник загромождается метками, либо надо использовать форму $+n (что потенциально источник проблем, типа когда rjmp не хватит, и заменишь ее на jmp). Если бы были хоть локальные метки - увы, компилятора, который умеет использовать локальные метки как в spasm/cvasm для PIC, для AVR мне не попадалось...
Цитата
IMHO skip'ы SBRS /SBRC, SBIC / SBIS - Pic'овый непотреб, хотя иногда (но редко) бывает полезным.

Бывает, факт. И я бы не сказал, что редко... Ладно, хорошо хоть по растактовке обход одной команды типично одинаков. Вот на MSP430 условный переход всегда два цикла - ОЧЕНЬ неудобно...
Go to the top of the page
 
+Quote Post
ae_
сообщение Mar 6 2008, 15:37
Сообщение #12


Участник
***

Группа: Свой
Сообщений: 462
Регистрация: 2-04-07
Из: Иркутск
Пользователь №: 26 695



Цитата(rx3apf @ Mar 6 2008, 20:46) *
IMHO, в результате исходник загромождается метками, либо надо использовать форму $+n (что потенциально источник проблем, типа когда rjmp не хватит, и заменишь ее на jmp). Если бы были хоть локальные метки - увы, компилятора, который умеет использовать локальные метки как в spasm/cvasm для PIC, для AVR мне не попадалось...

tavrasm умеет локальные метки, но не обновляется с 2005.
Go to the top of the page
 
+Quote Post
Brutaller
сообщение Mar 6 2008, 18:41
Сообщение #13





Группа: Новичок
Сообщений: 10
Регистрация: 28-06-07
Из: C:\Russia\SPb
Пользователь №: 28 779



Цитата(ae_ @ Mar 6 2008, 18:37) *
tavrasm умеет локальные метки, но не обновляется с 2005.

Да да, tavrasm с локальными метками дружит. Если никаких багов не найдено, то зачем ему обновляться? Знаю людей, которые очень долго его юзают и нареканий не имеют. Так что проверенный временем асм.

Теперь плюсы/минусы/особенности оного:
  • Поддержка локальных меток (локальная метка должна начинаться со знака подчекивания, например _label )
  • Не поддерживается условное ассемблирование, типа IFDEF и т.п.
  • Работает с обычными макросами, но не поддерживает условия в макросах
  • Не генерит OBJ и MAP, только LST (зато красивее чем у других smile.gif )
  • В некоторых инклудах придется закомментировать OR и т.п. чтоб не было конфликтов с мнемониками
  • И еще некоторые нюансы, например вместо adiw ZH:ZL надо писать просто adiw Z
В общем на вкус и цвет...

Сообщение отредактировал Brutaller - Mar 6 2008, 18:47
Go to the top of the page
 
+Quote Post
Lepeksiy
сообщение Mar 6 2008, 19:31
Сообщение #14


Участник
*

Группа: Участник
Сообщений: 21
Регистрация: 25-04-07
Пользователь №: 27 294



GNU assembler (в том числе "as.exe" из комплекта WinAVR) поддерживает локальные метки.
Go to the top of the page
 
+Quote Post
Brutaller
сообщение Mar 6 2008, 19:43
Сообщение #15





Группа: Новичок
Сообщений: 10
Регистрация: 28-06-07
Из: C:\Russia\SPb
Пользователь №: 28 779



Цитата(Lepeksiy @ Mar 6 2008, 22:31) *
GNU assembler (в том числе "as.exe" из комплекта WinAVR) поддерживает локальные метки.

А что у него с вышеперечисленными мной пунктами по поводу tavrasm ?

Сообщение отредактировал Brutaller - Mar 6 2008, 19:44
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 19th July 2025 - 22:22
Рейтинг@Mail.ru


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