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

 
 
> Прибавить константу к регистру!
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
 
Start new topic
Ответов
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
777777
сообщение Mar 6 2008, 10:19
Сообщение #5


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

Группа: Участник
Сообщений: 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
SasaVitebsk
сообщение Mar 6 2008, 22:03
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 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 те же проблемы. Если не сопроцессор, то вообще результат в аккумуляторе, если сопроцессор, то в стеке, а отнюдь не в произвольном регистре.

Так с какой такой архитектурой вы ровняли?
Go to the top of the page
 
+Quote Post
aesok
сообщение Mar 6 2008, 22:56
Сообщение #7


Знающий
****

Группа: Участник
Сообщений: 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 smile.gif , всего лиш) avr backend.

Анатолий.
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Mar 6 2008, 23:55
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 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.htm
http://www.terralab.ru/system/235190/

В третьем, к примеру, можно прочитать такую фразу:
Цитата
Второе важное усовершенствование RISC-процессоров, целиком вытекающее из Load/Store-архитектуры, - увеличение числа GPR (регистров общего назначения). Варианты, у которых меньше шестнадцати GPR, - большая редкость, причем почти все эти регистры полностью равноправны, что позволяет компилятору свободно распоряжаться ими, сохраняя большую часть промежуточных данных именно там, а не в стеке или оперативной памяти.

Ну и так далее.

Короче, я думаю, если вы сейчас не упрётесь рогом, а переосмыслите и сравните, то вы поймёте, что были не точны. Для меня совершенно очевидно, что создание компилятора для AVR было как минимум не сложнее, чем к любому другому МК данного класса.
Go to the top of the page
 
+Quote Post
777777
сообщение Mar 8 2008, 18:12
Сообщение #9


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

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



Цитата(SasaVitebsk @ Mar 7 2008, 02:55) *
Какой МК, по-вашему идеально подходит для Си компилятора?


Думаю что для С-компилятора идеально подходит архитектура PDP-11. Правда, скорее всего дело обстоит наоборот - так как С разрабатывался на этой архитеркуре, то он получился таким, чтобы максимально ей соответствовать.
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Mar 9 2008, 15:22
Сообщение #10


Гуру
******

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



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


Основные преимущества, от которых тащились программисты PDP-11, это ортогональная система комманд, которая позволяла обходится без ассемблера. То есть код большинства комманд и способов адресации легко запоминался в восьмеричной системе счисления. Тем не менее ограничения там были, на сколько я помню. То есть стопроцентной ортогональности не было.

При создании полного компилятора, при котором сначала создаётся ассемблерный текст, эти преимущества не слишком велики, на мой взгляд.
Go to the top of the page
 
+Quote Post
=GM=
сообщение Mar 9 2008, 16:47
Сообщение #11


Ambidexter
*****

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



Цитата(SasaVitebsk @ Mar 9 2008, 15:22) *
Основные преимущества, от которых тащились программисты PDP-11, это ортогональная система комманд, которая позволяла обходится без ассемблера. То есть код большинства команд и способов адресации легко запоминался в восьмеричной системе счисления. Тем не менее ограничения там были, на сколько я помню. То есть стопроцентной ортогональности не было

Добавлю, в PDP-11 почти всё было передовым и оригинальным. Проц был 16-разрядным, но работать с байтами было очень комфортно. Двенадцать (!) режимов адресации с почти любым регистром(!), их и сейчас не во всех микроконтроллерах и микропроцессорах можно найти. Было всего 8 РОНов, в число которых входили PC и SP на общих правах. Адреса области ввода-вывода были частью адресов памяти и т.д., всего не перескажешь. Это был шедевр, который интеловские уроды зарыли.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Mar 9 2008, 17:23
Сообщение #12


Гуру
******

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



Цитата(=GM= @ Mar 9 2008, 20:47) *
Это был шедевр, который интеловские уроды зарыли.

smile.gif

А по-моему, у всего своя причина должна быть. То что зарыли - естественное следствие его же собственных ограничений.

1) Ортогональность, при 16 битах не позволяла работать с ОЗУ превышавшем 64К. Требовалось либо вводить регистры страниц, либо переходить на 32 бита.
2) Общее адресное пространство для устр-в ввода вывода, решение удобное для МК, но никак не для компов.
3) Асинхронная шина, на мой взгляд, тоже очень неудачное решение.

При развитых средствах разработки, по типу Си, сама ортогональность, наличие и колличество способов адресации и т.п. плюсы - скрыты для программиста, а вот граница адресного пространства - серьёзный недостаток.

К =GM= А с ВМ3 работали? smile.gif
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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
||- - =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


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

 


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


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