|
|
  |
Прибавить константу к регистру! |
|
|
|
Mar 6 2008, 08:26
|

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

|
Цитата(777777 @ Mar 6 2008, 14:11)  Есль команды subi, sbci, где же addi, adci? Отнять константу с минусом. Т.е. если хочешь прибавить 1, то отними -1 ($FF): subi r16,$FF ;прибавить 1 к r16
|
|
|
|
|
Mar 6 2008, 08:50
|
Гуру
     
Группа: Свой
Сообщений: 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. Именно это дало такой прирост производительности при работе с арифметикой. Там сравнение - это просто пляски с бубном.
|
|
|
|
|
Mar 6 2008, 09:05
|

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

|
Цитата(777777 @ Mar 6 2008, 11:38)  Мда, мой восторг от атмела постепенно проходит. Сначала выяснилось что регистры неавоправные, потом условные пропуски оказались какими-то странными, теперь вот. А вы знаете 8 разрядный контроллер с более удобной системой команд и архитектурой? Цитата(777777 @ Mar 6 2008, 11:38)  Уж логичнее было бы не делать команду вычитания - прибавлять отрицательные константы привычнее. Это дело вкуса, вы можете написать макросы addi и adci к тому же в тех кусках которые приходится писать на асме у меня почему то чаще используется вычитание константы и проверка флагов так получается удобнее. а обе команды не влезают в пространство 16 бит, и именно вычитание оставили не просто так.
|
|
|
|
|
Mar 6 2008, 09:07
|

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

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

Профессионал
    
Группа: Участник
Сообщений: 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 разрядный контроллер с более удобной системой команд и архитектурой? Да пожалуй что нет...  Цитата(starter48 @ Mar 6 2008, 12:07)  Этот процессор задумывался для работы с компиляторами языков высого уровня. Когда пишешь на Си, о таких мелочах и не задумываешься  Кстати, у меня почему-то не работает WinAvr на Висте - пишет "avr-gcc: installation problem, cannot exec `cc1': No such file or directory" На ХР все нормально, хотя ставил абсолютно одинаковым образом.
|
|
|
|
|
Mar 6 2008, 10:26
|

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

|
Цитата tst r0 skip if pl neg r0 А какая разница с переходом??? Код tst r0 brpl $+4 neg r0 Даже по тактам тоже самое...
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|
|
|
|
|
Mar 6 2008, 11:11
|

кекс
     
Группа: Свой
Сообщений: 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'овый непотреб, хотя иногда (но редко) бывает полезным.
|
|
|
|
|
Mar 6 2008, 11:46
|
Гуру
     
Группа: Участник
Сообщений: 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 условный переход всегда два цикла - ОЧЕНЬ неудобно...
|
|
|
|
|
Mar 6 2008, 15:37
|
Участник
  
Группа: Свой
Сообщений: 462
Регистрация: 2-04-07
Из: Иркутск
Пользователь №: 26 695

|
Цитата(rx3apf @ Mar 6 2008, 20:46)  IMHO, в результате исходник загромождается метками, либо надо использовать форму $+n (что потенциально источник проблем, типа когда rjmp не хватит, и заменишь ее на jmp). Если бы были хоть локальные метки - увы, компилятора, который умеет использовать локальные метки как в spasm/cvasm для PIC, для AVR мне не попадалось... tavrasm умеет локальные метки, но не обновляется с 2005.
|
|
|
|
|
Mar 6 2008, 18:41
|
Группа: Новичок
Сообщений: 10
Регистрация: 28-06-07
Из: C:\Russia\SPb
Пользователь №: 28 779

|
Цитата(ae_ @ Mar 6 2008, 18:37)  tavrasm умеет локальные метки, но не обновляется с 2005. Да да, tavrasm с локальными метками дружит. Если никаких багов не найдено, то зачем ему обновляться? Знаю людей, которые очень долго его юзают и нареканий не имеют. Так что проверенный временем асм. Теперь плюсы/минусы/особенности оного: - Поддержка локальных меток (локальная метка должна начинаться со знака подчекивания, например _label )
- Не поддерживается условное ассемблирование, типа IFDEF и т.п.
- Работает с обычными макросами, но не поддерживает условия в макросах
- Не генерит OBJ и MAP, только LST (зато красивее чем у других
) - В некоторых инклудах придется закомментировать OR и т.п. чтоб не было конфликтов с мнемониками
- И еще некоторые нюансы, например вместо adiw ZH:ZL надо писать просто adiw Z
В общем на вкус и цвет...
Сообщение отредактировал Brutaller - Mar 6 2008, 18:47
|
|
|
|
|
Mar 6 2008, 19:31
|
Участник

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

|
GNU assembler (в том числе "as.exe" из комплекта WinAVR) поддерживает локальные метки.
|
|
|
|
|
Mar 6 2008, 19:43
|
Группа: Новичок
Сообщений: 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
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|