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

 
 
> Прибавить константу к регистру!
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

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


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

 


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


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