|
|
  |
Прибавить константу к регистру! |
|
|
|
Mar 7 2008, 08:22
|
Знающий
   
Группа: Свой
Сообщений: 550
Регистрация: 16-06-04
Из: Казань
Пользователь №: 32

|
Цитата(aesok @ Mar 7 2008, 03:55)  Разработчика не волнует сложноть компилятора, его волнует эффективноть кода. Но когда запизь в регистр стека требует не 2 инструкции а 5, а эта операция выполняеться дважды для любой функции которая имеет локальные переменые - пользователь вправе сказать - код не эффективный. И это особенность архитектуры "заточеной" под Си-шное программирование. Архитектура AVR подталкивает к ведению раздельных стеков для данных и для вызовов п/п, как совершенно правильно поступает IAR. Описанная проблема при этом просто неактуальна, обращение к 8-бит переменной на стеке данных - 1 инструкция. Разработчики AVR-GCC решили обойтись одним стеком, видимо, чтобы сэкономить усилия по адаптации кодогенератора, как результат - медленные прологи/эпилоги.
--------------------
Главная линия этого опуса ясна мне насквозь!
|
|
|
|
|
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 на общих правах. Адреса области ввода-вывода были частью адресов памяти и т.д., всего не перескажешь. Это был шедевр, который интеловские уроды зарыли.
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
|
Mar 9 2008, 17:23
|
Гуру
     
Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521

|
Цитата(=GM= @ Mar 9 2008, 20:47)  Это был шедевр, который интеловские уроды зарыли. А по-моему, у всего своя причина должна быть. То что зарыли - естественное следствие его же собственных ограничений. 1) Ортогональность, при 16 битах не позволяла работать с ОЗУ превышавшем 64К. Требовалось либо вводить регистры страниц, либо переходить на 32 бита. 2) Общее адресное пространство для устр-в ввода вывода, решение удобное для МК, но никак не для компов. 3) Асинхронная шина, на мой взгляд, тоже очень неудачное решение. При развитых средствах разработки, по типу Си, сама ортогональность, наличие и колличество способов адресации и т.п. плюсы - скрыты для программиста, а вот граница адресного пространства - серьёзный недостаток. К =GM= А с ВМ3 работали?
|
|
|
|
|
Mar 9 2008, 19:45
|

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

|
Цитата А по-моему, у всего своя причина должна быть. То что зарыли - естественное следствие его же собственных ограничений. Ну тут видимо Вы не сталкивались с продолжением идеи PDP11 - VAX. Советская цельнотянутая копия - CM1700. 16 ортогональных 32-хбитных регистров, около 20 методов адресации - даже больше, чем в PDP-11, система комманд устроена была весьма хитро - байт кода операции и дополнительные байты режимов адресации, т.е. нефиксированная длинна (как в 80x86, однако, намного более аккуратная и последовательная, а не нагромождение расширений, как у Intel). Хотя, конечно, нефиксированная длинна черевата усложнением разбирателя, но и это можно побороть (борет же тот же Intel). Ну и конечно это CISC в чистом виде - чего стоят расчеты полиномов одной коммандой проца  С другой стороны - IBM360/370 и MC680x0 - 8 регистров данных и 8 адресных регистров. Фиксированные длины комманд (почти). Правда, в более поздних версиях 680x0 (начиная с 030) были более уравнены в правах регистры данных и регистры адреса, но GCC на то время делал отличный код для 68000, не хуже асма. Ныне из всего этого жив и здоров 680x0 в виде своей реинкарнации - ColdFire. На ниве RISC-процессоров IBM и Motorola родили в результате PowerPC - на данный момент видимо самые быстрые камни такого класса, давно шагнувшие за ГГц.
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|
|
|
|
|
Mar 10 2008, 04:07
|
Участник

Группа: Свой
Сообщений: 37
Регистрация: 13-05-07
Из: Minsk, Belarus
Пользователь №: 27 694

|
Цитата(rx3apf @ Mar 6 2008, 13:46)  Если бы были хоть локальные метки - увы, компилятора, который умеет использовать локальные метки как в spasm/cvasm для PIC, для AVR мне не попадалось... AVR GAS? -- WBR, Andrew
|
|
|
|
|
Mar 10 2008, 11:50
|

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

|
Цитата(SasaVitebsk @ Mar 9 2008, 17:23)  К =GM= А с ВМ3 работали?  Было у нас несколько ДВК-3 с ВМ-3, но особенной разницы на своих задачах я не замечал. Если вы говорите о диспетчере памяти, там было по-моему 256 КБ памяти, то я его не использовал. Позже и недолго была у меня ещё Электроника-85, там по-моему тоже ВМ-3 стоял, я её брату подарил. Надо будет как-нибудь поспрашивать его о судьбе микрокомпьютера. Цитата(SasaVitebsk @ Mar 9 2008, 17:23)  А по-моему, у всего своя причина должна быть. То что зарыли - естественное следствие его же собственных ограничений. При развитых средствах разработки, по типу Си, сама ортогональность, наличие и количество способов адресации и т.п. плюсы - скрыты для программиста, а вот граница адресного пространства - серьёзный недостаток. Если где и были ограничения, то у интела. Расскажу один случай. Вы наверное помните, что тогда у ибм был девиз 3М: 1 мипс, 1МБ и 1Мпиксель. Ну вот, у нас на предприятии были ибмписихт 1 МГц и стояли ваксы, тактовая 10 МГЦ (они превосходили ибм раз в 100 по производительности), и была программа-эмулятор ибмписи на ваксах. Запускалась программа, и вы не могли отличить вакс от ибм, можно было загружать дос, все программы, и т.д. Но скорость была повыше. Кстати, на ибм было много игрушек. Одна из причин, на чём они вылезли. Цитата(SasaVitebsk @ Mar 9 2008, 17:23)  1) Ортогональность, при 16 битах не позволяла работать с ОЗУ превышавшем 64К. Требовалось либо вводить регистры страниц, либо переходить на 32 бита. 2) Общее адресное пространство для устр-в ввода вывода, решение удобное для МК, но никак не для компов. 3) Асинхронная шина, на мой взгляд, тоже очень неудачное решение Ну слушайте, ибмпсхт тоже имела асинхронную шину, тут просто дань тогдашней моде и ничего страшного тут нет, просто озу и другие устройства могли быть медленными по сравнению с цпу... Размещение устройств ввода-вывода в общем адресном пространстве имеет слабое отношение к удобству или неудобству использования МК/компов. А вот к универсализации обмена - имеет, и самое непосредственное. В pdp-11 для любого обмена использовалась ОДНА команда MOV (плюс модификация movb) и всё! А что мы имеем даже в авр? mov, movw, ld, ldd, lds, st, std, sts, in, out. Да ужас! Я уж не говорю про 8086. Про отрогональность. Убедитесь, что вы правильно понимаете слово ортогональность, надеюсь, не в смысле ортогонализации Грама-Шмидта(:-). Не могу понять, как она может помешать использовать озу выше 64КБ. Тот же ВМ-3 с той же самой системой команд имел диспетчер памяти и легко работал с 256 КБ памяти.
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
|
Mar 10 2008, 12:05
|

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

|
Цитата В pdp-11 для любого обмена использовалась ОДНА команда MOV (плюс модификация movb) и всё! А что мы имеем даже в авр? mov, movw, ld, ldd, lds, st, std, sts, in, out. А в чем разница принципиальная? Аргумент класса "трудно запомнить" - не аргумент  Если внимательно посмотреть на написание комманд, никто не мешает исполнить название mov на все случаи жизни, например так Код mov - mov r,r movw - mov r:r,r:r ld - mov r,rp ldd - mov r,rp+d lds - mov r,a ldi - mov r,imm st - mov rp,r std - mov rp+d,r sts - mov a,r Что поменялось то?
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|
|
|
|
|
Mar 10 2008, 12:20
|

Местный
  
Группа: Участник*
Сообщений: 323
Регистрация: 11-02-08
Пользователь №: 34 947

|
Цитата(Rst7 @ Mar 10 2008, 15:05)  никто не мешает исполнить название mov на все случаи жизни ......
Что поменялось то? Вот я и про тоже.. Люди вопят "у AVR кривая архитектура"... А проблема то решается элементарно.. Или вон один чувак орал, что ему ужас как не хватает команды adci, что мол почему команда sbci есть а adci нету. Хотя кто ему мешал написать макрос adci на базе команды sbci? Только собственная глупость а AVR правильно сделал, что не стал увеличивать количество команд ибо во-первых какое же это тогда RISK-ядро получиться если у него команд как и у CISK? А во-вторых, зачем вводить дополнительные код, к примеру, для команды SBR если она является частным случаем команды ANDI?
Сообщение отредактировал Дон Амброзио - Mar 10 2008, 12:30
--------------------
После устранения бага в программе она стала работать....хуже
|
|
|
|
|
Mar 10 2008, 13:28
|

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

|
Цитата(Rst7 @ Mar 10 2008, 12:05)  А в чем разница принципиальная? Аргумент класса "трудно запомнить" - не аргумент  Не аргумент, ясно и ёжику пьяному(:-). Хотя, если отвлечься от авр и взглянуть на минуту на систему команд TMS320C5402 в части скажем, загрузки: dld, ld (16 модификаций), ldm, ldr, ldu, ltd, выгрузки: dst, st, sth, stl, stlm, stm или пересылки: mvdd, mvdk, mvdm, mvdp, mvkd, mvmd, mvmm, mvpd, portr, portw, reada, readw, где без поллитра не разберёшься и где программистами допускается огромное количество ошибок, то и аргумент появится. По делу. Принципиальная разница здесь в системе команд, где на одну команду отведён ОДИН код, и которая неким образом переливается в архитектуру. Принципиальная разница в прозрачности кода, когда вам не надо задумываться КАК совершить обмен, а можно сконцентрироваться на том, ЧТО и КУДА посылать. Отсюда и была красота и совершенство, которая изумляла и компактность кода. Обратите внимание, как красиво переключались сопрограммы. Когда я разбирал, как pdp-11 работает с плавающей точкой, то чуть не выпал в осадок, настолько красиво. Никакого сравнения с ассемблером ибм370 и 8086, где всё было коряво, всё! Попробуйте написать swab @20(r1) - обмен байтами по адресу, лежащему по адресу r1+20, на аврке или другом каком мк и почувствуйте разницу. Цитата(Дон Амброзио @ Mar 10 2008, 12:20)  ...зачем вводить дополнительные код, к примеру, для команды SBR если она является частным случаем команды ANDI? Положим, это частный случай команды ORI, а не команды ANDI. Да и код команды один и тот же. Отвлекусь. Дохтур, как же вы писали свою замечательную ртос с такими приблизительными знаниями системы команд, а? Ответьте здесь.
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
|
Mar 10 2008, 13:38
|

Местный
  
Группа: Участник*
Сообщений: 323
Регистрация: 11-02-08
Пользователь №: 34 947

|
Цитата(=GM= @ Mar 10 2008, 16:28)  Положим, это частный случай команды ORI, а не команды ANDI. Отвлекусь. Дохтур, как же вы писали свою замечательную ртос с такими приблизительными знаниями системы команд, а? Ответьте здесь. не надо сразу делать такие далекоидущие выводы... добрее надо быть к людям...а аписАться каждый может. ну не SBR там надо было написать, а CBR Цитата(=GM= @ Mar 10 2008, 16:28)  свою замечательную ртос... Кстати.. О RTOS.....Тут посмотри http://electronix.ru/forum/index.php?showt...pid=377119&
--------------------
После устранения бага в программе она стала работать....хуже
|
|
|
|
|
Mar 10 2008, 14:01
|

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

|
Цитата(Дон Амброзио @ Mar 10 2008, 13:38)  Не надо сразу делать такие далекоидущие выводы... добрее надо быть к людям...а описаться каждый может. Ну не SBR там надо было написать, а CBR Извините, дохтур, но команда CBR делает побитное И регистра с инвертированной константой, а команда ANDI делает побитное И регистра с НЕинвертированной константой. Здесь уж скорее случай вшитого макроса. По поводу доброты. Позвольте присказку от моего друга. Если ему что-то активно не нравится у кого-то, он говорит ему: "я тебя уважаю, как человека,... но бить буду, как последнюю скотину". А я к вам, дохтур, добр (пока что). Цитата(Дон Амброзио @ Mar 10 2008, 13:38)  Любите вы, дохтур, послать туда, не знаю куда, не конкретно то есть. Не на что там смотреть. И ещё дохтур, оставьте ваше пошлое панибратство, я с вами на брудершафт не пил. Вот в июне организуем очередной съезд имбеддеров в пивном ресторане Ганс, приходите, а там посмотрим.
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|