|
Прибавить константу к регистру! |
|
|
|
 |
Ответов
|
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, 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, 22:03
|
Гуру
     
Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521

|
Цитата(777777 @ Mar 6 2008, 14:19)  Условные переходы сделаны в виде "переход если условие выполнено". Однако для портов и регистров предусмотрели команды "пропуск если бит установлен/сброшен". Почему бы это не сделать для битов регистра состояния? Например, получение абсолютного значения можно было бы сделать так: Как это не сделан??? BRBC s,k Перейти если флаг в SREG очищен if(SREG(s)==0) PC = PC + k + 1 None 1/2 BRBS s,k Перейти если флаг в SREG установлен if(SREG(s)==1) PC = PC + k + 1 None 1/2 Цитата(aesok @ Mar 7 2008, 01:00)  Это Вы начитались творений маркетологов фирмы Atmel!!!! AVR ядро - студенческий прект!!!!
Как минимум 3 свойства ядра создающие трудности для генерации эффективного кода С компилятором.
1. Неравноправность регистров, для половины регистров нельзя выполнять дейсвия с константами.
2. Отсутствие атомарной записи в регистр стека. Приходиться отключать прерывания при записи в него (GCC), или использовать два стека (IAR).
3. Некоторые команды работают с фиксироваными регистрами (r0, r1) MUL*, LPM.
И это все мелочи - стандарт языка С предпологает единое адресное пространство - ни один процесор с Гарвадской архитектурой не имеет право называться С ориентированым.
Анатолий. Простите, но это бред. Таких претензий к ЛЮБОМУ процессору включая х86 наберётся в 10 раз больше. 1) Достаточно пары регистров. Для х86 неравноправность регистров просто вопиющая. 2) Есть возможность создавать два стека. И это само по себе уже решает проблему. Насколько я понимаю, проблема не в атомарности, а в обращении к стеку с нужным смещением. Для передачи параметров в п/п. И эта задача легко решена. Более того наличие трёх индексных регистровых пар - это более чем скажем в том же х86, я уже просто не говорю о др. МК. 3) С чем сравниваем? Тоже наблюдаем в x51, PIC, MSP!!! Понятно что умножение и деление - не совсем ядро, а довесок. А как это по другому реализовать? В х86 те же проблемы. Если не сопроцессор, то вообще результат в аккумуляторе, если сопроцессор, то в стеке, а отнюдь не в произвольном регистре. Так с какой такой архитектурой вы ровняли?
|
|
|
|
|
Mar 6 2008, 22:56
|
Знающий
   
Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484

|
Цитата(SasaVitebsk @ Mar 7 2008, 01:03)  1) Достаточно пары регистров. Для х86 неравноправность регистров просто вопиющая. Савнивать их не корректно, x86 это CISC просессор, AVR- это RISC. Цитата 2) Есть возможность создавать два стека. И это само по себе уже решает проблему. Насколько я понимаю, проблема не в атомарности, а в обращении к стеку с нужным смещением. Для передачи параметров в п/п. И эта задача легко решена. Более того наличие трёх индексных регистровых пар - это более чем скажем в том же х86, я уже просто не говорю о др. МК. Место под локальные переменные выделяеться в стеке. Общая пратика С компиляторов использовать один общий стек и для хранения адресов возврата и для хранения локальных переменных. Для выделеления памяти под локальные переменые необходимо изменить значение регистра указателя стека, и эта опрерация (по крайней мере операция записи в SP) должна быть атамарной. Нельзя допускать вызова обработчика прерывания между операциями записи в регистры SPL и SPH. В GCC для изменения SP приходиться применяеть такой код: Код in r28,__SP_L__ ; 49 *movhi_sp/2 [length = 2] in r29,__SP_H__
sbiw r28,8 ; 50 *addhi3/3 [length = 1]
in __tmp_reg__,__SREG__ ; 51 *movhi_sp/1 [length = 5] cli out __SP_H__,r29 out __SREG__,__tmp_reg__ out __SP_L__,r28 IAR для оптимизации кода использует 2 стека, в результате на разработчика ложиться задача определения максимальной глубины вложеных вызовов и выделения памяти для стеков, и возникает потеря памяти при задании размеров стека с запасом. Цитата 3) С чем сравниваем? Тоже наблюдаем в x51, PIC, MSP!!! Понятно что умножение и деление - не совсем ядро, а довесок. А как это по другому реализовать? В х86 те же проблемы. Если не сопроцессор, то вообще результат в аккумуляторе, если сопроцессор, то в стеке, а отнюдь не в произвольном регистре.
Так с какой такой архитектурой вы ровняли? В идеальной RISK все регистры равноправны, и уж темболее нет никакого акумулятора. Акумулятор - это преригатива CISC архитектур. У меня нет ни каких комплексов когото с кемто сравнивать, я пишу о тех проблемах которые вставали перед разработчиками avr порта в GCC. И для которых рекламные флаеры фирмы Atmel просто бумажки... Я излазил его вдоль и поперек (не весь GCC  , всего лиш) avr backend. Анатолий.
|
|
|
|
|
Mar 6 2008, 23:55
|
Гуру
     
Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521

|
Цитата(aesok @ Mar 7 2008, 02:56)  В идеальной RISK все регистры равноправны, и уж темболее нет никакого акумулятора. Акумулятор - это преригатива CISC архитектур. Я читал статьи на заре возникновения RISC архитектуры. Можно поискать, но думаю вы заблуждаетесь. Изначально основные особенности данной архитектуры определялись следующими особенностями. 1) Выполнение команд за 1 такт. 2) Высокая тактовая частота. 3) Большое количество регистров. 4) Аккумулятор w для операций в обе стороны. 5) Малое количество команд (обосновывалось тем, что 20 процентов команд используются при написании 80 процентов кода) Основные - п.1 и 2. Типичным представителем является PIC. Но собственно, я не собираюсь обсуждать теоретику. Ответьте просто. Какой МК, по-вашему идеально подходит для Си компилятора? Высказывания разработчиков кристаллов не в счёт. 99% кристаллов общего назначения, по словам разработчиков, заточены под Си. Встречал ещё Ява ориентированные и Форт ориентированные. Но это единицы. Дал поиском сейчас запрос. Получил след ссылки http://www.intuit.ru/department/hardware/csorg/10/http://www.computer-museum.ru/technlgy/risc.htmhttp://www.terralab.ru/system/235190/В третьем, к примеру, можно прочитать такую фразу: Цитата Второе важное усовершенствование RISC-процессоров, целиком вытекающее из Load/Store-архитектуры, - увеличение числа GPR (регистров общего назначения). Варианты, у которых меньше шестнадцати GPR, - большая редкость, причем почти все эти регистры полностью равноправны, что позволяет компилятору свободно распоряжаться ими, сохраняя большую часть промежуточных данных именно там, а не в стеке или оперативной памяти. Ну и так далее. Короче, я думаю, если вы сейчас не упрётесь рогом, а переосмыслите и сравните, то вы поймёте, что были не точны. Для меня совершенно очевидно, что создание компилятора для AVR было как минимум не сложнее, чем к любому другому МК данного класса.
|
|
|
|
|
Mar 9 2008, 15:22
|
Гуру
     
Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521

|
Цитата(777777 @ Mar 8 2008, 22:12)  Думаю что для С-компилятора идеально подходит архитектура PDP-11. Правда, скорее всего дело обстоит наоборот - так как С разрабатывался на этой архитеркуре, то он получился таким, чтобы максимально ей соответствовать. Основные преимущества, от которых тащились программисты PDP-11, это ортогональная система комманд, которая позволяла обходится без ассемблера. То есть код большинства комманд и способов адресации легко запоминался в восьмеричной системе счисления. Тем не менее ограничения там были, на сколько я помню. То есть стопроцентной ортогональности не было. При создании полного компилятора, при котором сначала создаётся ассемблерный текст, эти преимущества не слишком велики, на мой взгляд.
|
|
|
|
|
Mar 9 2008, 16:47
|

Ambidexter
    
Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282

|
Цитата(SasaVitebsk @ Mar 9 2008, 15:22)  Основные преимущества, от которых тащились программисты PDP-11, это ортогональная система комманд, которая позволяла обходится без ассемблера. То есть код большинства команд и способов адресации легко запоминался в восьмеричной системе счисления. Тем не менее ограничения там были, на сколько я помню. То есть стопроцентной ортогональности не было Добавлю, в PDP-11 почти всё было передовым и оригинальным. Проц был 16-разрядным, но работать с байтами было очень комфортно. Двенадцать (!) режимов адресации с почти любым регистром(!), их и сейчас не во всех микроконтроллерах и микропроцессорах можно найти. Было всего 8 РОНов, в число которых входили PC и SP на общих правах. Адреса области ввода-вывода были частью адресов памяти и т.д., всего не перескажешь. Это был шедевр, который интеловские уроды зарыли.
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
Сообщений в этой теме
777777 Прибавить константу к регистру! Mar 6 2008, 08:11   vet Цитата(SasaVitebsk @ Mar 6 2008, 11:50) П... Mar 6 2008, 09:08    defunct Цитата(777777 @ Mar 6 2008, 12:19) Ага, н... Mar 6 2008, 11:11     rx3apf Цитата(defunct @ Mar 6 2008, 14:11) А зач... Mar 6 2008, 11:46      ae_ Цитата(rx3apf @ Mar 6 2008, 20:46) IMHO, ... Mar 6 2008, 15:37      Andrew O. Shadoura Цитата(rx3apf @ Mar 6 2008, 13:46) Если б... Mar 10 2008, 04:07          SasaVitebsk Цитата(=GM= @ Mar 9 2008, 20:47) Это был ... Mar 9 2008, 17:23           =GM= Цитата(SasaVitebsk @ Mar 9 2008, 17:23) К... Mar 10 2008, 11:50  KRS Цитата(777777 @ Mar 6 2008, 11:38) Мда, м... Mar 6 2008, 09:05  starter48 Цитата(777777 @ Mar 6 2008, 14:38) Мда, м... Mar 6 2008, 09:07 Rst7 Цитатаtst r0
skip if pl
neg r0
А какая разница с ... Mar 6 2008, 10:26 Brutaller Цитата(ae_ @ Mar 6 2008, 18:37) tavrasm у... Mar 6 2008, 18:41 Nanobyte Цитата(Brutaller @ Mar 6 2008, 21:41) Да ... Mar 6 2008, 19:50 Lepeksiy GNU assembler (в том числе "as.exe" из к... Mar 6 2008, 19:31 Brutaller Цитата(Lepeksiy @ Mar 6 2008, 22:31) GNU ... Mar 6 2008, 19:43 Lepeksiy Цитата(Brutaller @ Mar 6 2008, 21:43) А ч... Mar 6 2008, 20:21 Brutaller Цитата(Nanobyte @ Mar 6 2008, 22:50) Прил... Mar 6 2008, 19:59 zhevak Цитата(starter48 @ Mar 6 2008, 14:07) Это... Mar 6 2008, 20:52 aesok Цитата(zhevak @ Mar 6 2008, 23:30) ...
Ра... Mar 6 2008, 21:00  zhevak Цитата(aesok @ Mar 7 2008, 02:00) Это Вы ... Mar 6 2008, 22:08   singlskv Цитата(zhevak @ Mar 7 2008, 01:08) 1. ... Mar 6 2008, 22:44    zhevak ЦитатаЯ думаю, что приведенный Вами список будет п... Mar 6 2008, 23:17     aesok Цитата(zhevak @ Mar 7 2008, 02:17) Считаю... Mar 7 2008, 00:27 SasaVitebsk PS: Ещё одно дополнение.
Вот выдержка из последнег... Mar 7 2008, 00:29 aesok ЦитатаОтветьте просто. Какой МК, по-вашему идеальн... Mar 7 2008, 00:55  vet Цитата(aesok @ Mar 7 2008, 03:55) Разрабо... Mar 7 2008, 08:22 Дон Амброзио Цитата(777777 @ Mar 6 2008, 11:11) Есль к... Mar 7 2008, 07:30 Rst7 ЦитатаА по-моему, у всего своя причина должна быть... Mar 9 2008, 19:45 SasaVitebsk Да. Вот ведь прикол. Неоднократно удивлялся.
Хоро... Mar 9 2008, 23:56 rezident Цитата(SasaVitebsk @ Mar 10 2008, 04:56) ... Mar 10 2008, 00:11 Rst7 ЦитатаВ pdp-11 для любого обмена использовалась ОД... Mar 10 2008, 12:05 Дон Амброзио Цитата(Rst7 @ Mar 10 2008, 15:05) никто н... Mar 10 2008, 12:20 =GM= Цитата(Rst7 @ Mar 10 2008, 12:05) А в чем... Mar 10 2008, 13:28  Дон Амброзио Цитата(=GM= @ Mar 10 2008, 16:28) Положим... Mar 10 2008, 13:38   =GM= Цитата(Дон Амброзио @ Mar 10 2008, 13:38)... Mar 10 2008, 14:01    Дон Амброзио Цитата(=GM= @ Mar 10 2008, 17:01) Не на ч... Mar 10 2008, 19:18     KRS Цитата(Дон Амброзио @ Mar 10 2008, 22:18)... Mar 10 2008, 20:43 Rst7 ЦитатаНикакого сравнения с ассемблером ибм370
Вы,... Mar 10 2008, 18:46 =GM= Цитата(Rst7 @ Mar 10 2008, 18:46) Вы, вид... Mar 10 2008, 23:29  Baser Цитата(=GM= @ Mar 11 2008, 01:29) И, пожа... Mar 11 2008, 15:24   =GM= Цитата(Baser @ Mar 11 2008, 15:24) забав... Mar 11 2008, 17:46 SasaVitebsk 2 =GM=
Вот я и говорю, что при использовании комп... Mar 10 2008, 20:41 Rst7 ЦитатаВот, например, команда JMP @20(R1) может быт... Mar 11 2008, 06:36 =GM= Цитата(Rst7 @ Mar 11 2008, 06:36) Просто ... Mar 11 2008, 13:26 Rst7 ЦитатаНемного вы недопоняли, и не так сделали. Зде... Mar 11 2008, 14:19 =GM= Цитата(Rst7 @ Mar 11 2008, 14:19) Да, пар... Mar 11 2008, 17:22  singlskv Цитата(=GM= @ Mar 11 2008, 20:22) Не отве... Mar 11 2008, 18:18   =GM= Цитата(singlskv @ Mar 11 2008, 18:18) Неп... Mar 11 2008, 21:35 Rst7 ЦитатаЯ читаю правильно слева-направо "игрек ... Mar 11 2008, 17:30 IgorKossak Складывается впечатление, господа, что =GM= и Rst7... Mar 12 2008, 08:06 Rst7 Да сам вопрос то был
Цитатагде же addi, adci?
Во... Mar 12 2008, 08:37 777777 А где же "исключающее ИЛИ" с константой?... Mar 19 2008, 06:34  IgorKossak Цитата(777777 @ Mar 19 2008, 08:34) А где... Mar 19 2008, 08:45   777777 Цитата(IgorKossak @ Mar 19 2008, 11:45) И... Mar 19 2008, 09:57 Rst7 ЦитатаНу, в общем, да. Я надеялся, что в атмеле та... Mar 19 2008, 10:13 777777 Цитата(Rst7 @ Mar 19 2008, 13:13) Именно ... Mar 19 2008, 10:19  Дон Амброзио Цитата(777777 @ Mar 19 2008, 13:19) Не по... Mar 19 2008, 10:26 Rst7 ЦитатаА вот то, что таким образом можно инвертнуть... Mar 19 2008, 10:30 Дон Амброзио Цитата(Rst7 @ Mar 19 2008, 13:30) Так учи... Mar 19 2008, 10:39 KRS Цитата(Rst7 @ Mar 19 2008, 13:30) Так учи... Mar 19 2008, 10:47 IgorKossak Цитата(Дон Амброзио @ Mar 19 2008, 12:39)... Mar 19 2008, 12:38 Nanobyte Эта фича ещё есть у Tiny2313. Найти модели, в кото... Mar 20 2008, 18:13 =GM= Цитата(Nanobyte @ Mar 20 2008, 18:13) В р... Mar 20 2008, 21:59 IgorKossak Цитата(Nanobyte @ Mar 20 2008, 20:13) Эта... Mar 21 2008, 06:46
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|