Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Прибавить константу к регистру!
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Страницы: 1, 2
Rst7
Цитата
Вот, например, команда JMP @20(R1) может быть легко применена в операторе switch, что на си, что на ассемблере.


Да не спорит никто. Просто идеология RISC подразумевает, что 20 процентов комманд выполняется 80 процентов времени. Посему остальные 20% лучше не реализовывать в аппаратуре, а заменить несколькими коммандами
Код
lds zl,label
lds zh,label+1
add zl,r16
adc zh,r17
ijmp

результирующий выигрыш - больше, как в быстродействии, так и в потреблении, площади кристалла и т.д. И писать для RISC поэтому лучше на ЯВУ, дабы компилятор сам выполнил за вас работу по изготовлению аналогов CISC-комманд.
=GM=
Цитата(Rst7 @ Mar 11 2008, 06:36) *
Просто идеология RISC подразумевает, что 20 процентов команд выполняется 80 процентов времени. Посему остальные 20% лучше не реализовывать в аппаратуре, а заменить несколькими командами

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

Не знаю точного определения риск или сиск и вообще трудно, а может и невозможно, найти чистый риск-МК, но по-моему задача перед проектировщиком риск-машины должна стоять такая: определить минимальное количество элементарных команд, выполняющихся за единый квант времени, чтобы любые операции можно бы было выполнить, используя комбинации из этого минимального набора. Ну а если у проектировщика остались неиспользованные площади кристалла, то грех не добавить дополнительных команд или функций, памяти, периферии, ещё какой-нибудь фичи... Что мы и наблюдаем в реальном мире.

По аналогии с логическими схемами - любую сколь угодно сложную комбинаторную схему можно построить на комбинации схем 2И-НЕ, а можно на комбинации 2ИЛИ-НЕ. А проектировщики вроде бы реально используют базис 4И-НЕ...
Цитата(Rst7 @ Mar 11 2008, 06:36) *
Код
lds zl,label
lds zh,label+1
add zl,r16
adc zh,r17
ijmp

Немного вы недопоняли, и не так сделали. Здесь вы реализовали команду JMP label(R1), которая прыгает на адрес (label+R1), а надо было реализовать команду JMP @label(R1), которая прыгает по адресу, который лежит по адресу (label+R1). Рассматривайте команду JMP просто как специфическую команду MOV, которая заносит операнд в программный счетчик РС. Хотя можно было бы использовать и MOV @label(R1),РС. Вот это гибкость!

Отвлекусь. Даже простой вопрос о расположении операндов в pdp-11 решён идеально. Портится второй операнд. Почему в аврках и интелах портится первый операнд? Откуда спрашивается арабское письмо возникло?

Или вот, опять о пространстве ввода-вывода. Атмелу этого пространства уже не хватает, поневоле приходится использовать in/out в комбинации с lds/sts. Как ни крути, а для программиста это лишняя головная боль и возможный источник ошибок. Будь пространство ввода-вывода сразу отмаплено на память как в pdp-11, было бы гораздо проще.
Rst7
Цитата
Немного вы недопоняли, и не так сделали. Здесь вы реализовали команду JMP label(R1), которая прыгает на адрес (label+R1), а надо было реализовать команду JMP @label(R1), которая прыгает по адресу, который лежит по адресу (label+R1).


Да, пардон. Хотя на суть ответа это не влияет.

Цитата
Отвлекусь. Даже простой вопрос о расположении операндов в pdp-11 решён идеально. Портится второй операнд. Почему в аврках и интелах портится первый операнд? Откуда спрашивается арабское письмо возникло?


Вам написание y=f(x) не жмет? Не возникает желание всю математическую нотацию переделать?

На самом деле - это только вопрос привычки. Лично мне при работе первый раз одновременно на двух процессорах, у одного асм слева-направо, у другого справа-налево, понадобилось где-то 3 дня, чтобы привыкнуть, больше я никогда вопрос направления не обсуждал и не испытывал никаких неудобств.
Baser
Цитата(=GM= @ Mar 11 2008, 01:29) *
И, пожалуйста, не пишите P.S., если нет подписи, это моветон. P.S. буквально означает "после подписи", использовалось ещё в Древнем Риме, когда письмо было написано и подписано, и вдруг понадобилось что-то добавить.

bb-offtopic.gif забавно: всегда считалось, что post scriptum означает «после написанного». Об этом и академические словари говорят.
Так что p.s. в конце топика без подписи очень даже уместнен. Постскриптум
=GM=
Цитата(Rst7 @ Mar 11 2008, 14:19) *
Да, пардон. Хотя на суть ответа это не влияет

Не знаю, какую суть имели в виду вы, но моя суть ответа такая. То, что можно написать на pdp-11 одной командой, уложится в десяток команд аврки. Вот где настоящая красота и компактность кода.
Цитата(Rst7 @ Mar 11 2008, 14:19) *
Вам написание y=f(x) не жмет? Не возникает желание всю математическую нотацию переделать?

Вот ё-маё, ставите с ног на голову! Я читаю правильно слева-направо "игрек равняется эф от икс", а вот в вашем случае надо бы писать f(x)=y. Ещё можно попробовать некоторые слова в предложении писать справа-налево, для разнообразия. Попробуйте "ьтасипан" некоторые слова вот так, понятнее стало? Да, можно привыкнуть, не вопрос, но это ж неправильно. Или всё читаем слева-направо, или всё слева-направо. Зачем микс делать? Если это нужно компилеру, хотя вряд ли, пусть он переворачивает сам аргументы у себя внутри, а человеку надо создать удобство восприятия, как он привык. Слева, так слева. Справа, так справа. Не пойму, что тут упираться, вопрос простой до неприличия.

Не ответили на мысль о пространстве ввода-вывода. Атмелу этого пространства уже не хватает, поневоле приходится использовать in/out в комбинации с lds/sts. Как ни крути, а для программиста это лишняя головная боль и возможный источник ошибок. Будь пространство ввода-вывода сразу отмаплено на память как в pdp-11, было бы гораздо проще.

И вот вы видите, вроде бы всё одно и тоже, и привыкнуть можно, но там чуток не так, там чуток не эдак, и вместо красоты получается безобразный монстр. В одном случае сказочно красивый ассемблер для pdp-11, в другом случае кривой атмеловский ассемблер. И заметьте, это один из самых лучших на сегодняшний день, не будем вспоминать 8051 или пик...
Rst7
Цитата
Я читаю правильно слева-направо "игрек равняется эф от икс", а вот в вашем случае надо бы писать f(x)=y.


Это читаем мы так. А обозначает это то, что множеству значений x ставится в соответствие множество значений y. Заметьте, из значения x следует значение y, а не наоборот.

Цитата
То, что можно написать на pdp-11 одной командой, уложится в десяток команд аврки.


Сколько лишней аппаратуры потребуется для реализации этой красивой комманды?

Цитата
Не пойму, что тут упираться, вопрос простой до безобразия.


Упираетесь Вы. Я утверждаю, что разницы нет вообще, есть привычка, не более!
=GM=
Цитата(Baser @ Mar 11 2008, 15:24) *
bb-offtopic.gif забавно: всегда считалось, что post scriptum означает «после написанного». Об этом и академические словари говорят.
Так что p.s. в конце топика без подписи очень даже уместнен. Постскриптум

Ну а голова у нас на что дадена? Не только же есть в неё? Такое впечатление, что никто обычных писем не пишет и не подписывается. Раньше, до середины 20 века не было компьютеров, а ещё раньше и бумага была дорогая. Ну написали вы письмо, подписались, ещё что-то в голову вступило, ну перепишите на новом листе, ан нет. Ставили П.С., и писали, что хотели добавить. Опять расписывались. Это разумно и практично.

Отвлекусь. Есть такая поговорка: "исключение подтверждает правило", это калька с латинского. Много лет думал, как же исключение может подтвердить правило. Лет 8 назад узнал, что это был неправильный перевод с латинского. Правильно так: "исключением поверяется правило". Т.е. правило работает там и тогда, где и когда не возникает исключения из этого правила.
singlskv
Цитата(=GM= @ Mar 11 2008, 20:22) *
Не ответили на мысль о пространстве ввода-вывода. Атмелу этого пространства уже не хватает, поневоле приходится использовать in/out в комбинации с lds/sts. Как ни крути, а для программиста это лишняя головная боль и возможный источник ошибок. Будь пространство ввода-вывода сразу отмаплено на память как в pdp-11, было бы гораздо проще.
Неправильно расставленны акценты, ИМХО, lds/sts это есть стандартный доступ к памяти и
регистрам в частности, и этот доступ двухтактовый, НО, производитель позаботился о том чтобы
некоторая часть регистров была доступна с однотактовыми in/out, но при этом конечно за нас
решил в каком чипе и к каким регистрам можно доступаться однотактово...
=GM=
Цитата(singlskv @ Mar 11 2008, 18:18) *
Неправильно расставлены акценты, ИМХО, lds/sts это есть стандартный доступ к памяти

Ну, положим, вы их сами смещаете(:-). Стандартный, это как? А ld/st тогда какой? Нестандартный?

Цитата(singlskv @ Mar 11 2008, 18:18) *
... НО, производитель позаботился о том чтобы некоторая часть регистров была доступна с однотактовыми in/out, но при этом конечно за нас
решил в каком чипе и к каким регистрам можно доступаться однотактово...

Ну и в результате получили некоторую кривизну. Вот и приходится часть регистров инициировать с помощью in/out, а часть с помощью lds/sts, хоть они и двухсловные, а что делать?

Ладно, это всё ностальгический флейм, немного пар выпустили... Я на неделю в отпуск собрался, хочу посетить столицу Священной Римской империи, не удивляйтесь, если не буду отвечать.
IgorKossak
Складывается впечатление, господа, что =GM= и Rst7 взялись создавать платформы и спорят чья лучше cool.gif (никого не хочу обидеть).
А разница то какая? Или кто-то в состояние повлиять на уже существующие вещи?
Имеем то, что имеем и заморачиваться над субьективным качеством, сетовать на неудобства и восхвалять (весьма навязчиво) удобства - это на мой взгляд отвлекаться от реальной работы.
Вы предполагали какое-нибудь резюме этой теме?
Или кто-то обопрётся на эту тему при выборе платформы для разработки?
Скорее всего это пустой флейм, пусть даже и с весьма умной подоплёкой.
Rst7
Да сам вопрос то был

Цитата
где же addi, adci?


Вот плавно обсуждение и перетекло в обсуждение "где система команд красивее".

Лично я бы резюмировал так - из ситуации отсутствия какой либо команды проца можно выйти. Вопрос только в том - сколько такой выход будет стоить - причем в общем - и затраты программера, и стоимость камня и прочее, прочее, прочее...
777777
А где же "исключающее ИЛИ" с константой?!
Как инвертировать один бит в регистре (порту)? Сделали две по сути одинаковые команды - andi и cbr, а eori не стали?

Цитата(Rst7 @ Mar 12 2008, 11:37) *
Лично я бы резюмировал так - из ситуации отсутствия какой либо команды проца можно выйти. Вопрос только в том - сколько такой выход будет стоить


Стоить он будет довольно много: нужно занести константу в другой регистр, перед этим сохранить его в стеке (поскльку это происходит в прерывании), выполнить eor, и восстановить регистр. Или есть более простой способ?
IgorKossak
Цитата(777777 @ Mar 19 2008, 08:34) *
А где же "исключающее ИЛИ" с константой?!

Там же, где и ещё полсотни или больше команд, не вошедших в понятие RISC для 8-битников.
Если команды нет, то от Вашего праведного гнева она не возникнет. Или какой ответ Вы предполагали своим вопросом? Вам помогут её найти?
Цитата(777777 @ Mar 19 2008, 08:34) *
Сделали две по сути одинаковые команды - andi и cbr

Это две мнемоники одного и того же кода, сделанные не более чем для удобства.

Если отсутствие нужных Вам команд или неприемлемость обходных манёвров окажутся для Вас существенными, возьмите другой МК.
777777
Цитата(IgorKossak @ Mar 19 2008, 11:45) *
Или какой ответ Вы предполагали своим вопросом? Вам помогут её найти?


Ну, в общем, да. Я надеялся, что в атмеле таки есть быстрый способ инвертировать бит в порту, который я по своей неопытности не доглядел.
Rst7
Цитата
Ну, в общем, да. Я надеялся, что в атмеле таки есть быстрый способ инвертировать бит в порту, который я по своей неопытности не доглядел.


Именно бит в порту инвертировать - способ есть например для Mega48-88-168 - сделать OUT PINx,Ry, причем Ry должно содержать маску инвертируемых битов - биты в Ry, которые равны 1, будут инвертированы.
777777
Цитата(Rst7 @ Mar 19 2008, 13:13) *
Именно бит в порту инвертировать - способ есть например для Mega48-88-168 - сделать OUT PINx,Ry, причем Ry должно содержать маску инвертируемых битов - биты в Ry, которые равны 1, будут инвертированы.


Не понял. Как можно делать OUT в PINx и почему они должны при этом инвертироваться? Или это фича именно 48/88/168?
Дон Амброзио
Цитата(777777 @ Mar 19 2008, 13:19) *
Не понял. Как можно делать OUT в PINx и почему они должны при этом инвертироваться? Или это фича именно 48/88/168?

Я тоже не понял... Я знаю что таким образом сбрасываются некоторые флаги запросов на прерывание в регистрах статуса периферии. И то они инвертируются только в одну сторону. Т.е. инвертнуть с "1" на "0" можно, а обратно - нельзя...А вот то, что таким образом можно инвертнуть биты в регистрах PortX - впервые слышу
Rst7
Цитата
А вот то, что таким образом можно инвертнуть биты в регистрах PortX - впервые слышу


Так учите матчасть smile.gif Но, вообще-то, не так давно появилась эта фича.
Дон Амброзио
Цитата(Rst7 @ Mar 19 2008, 13:30) *
Так учите матчасть smile.gif Но, вообще-то, не так давно появилась эта фича.

Начиная с каких моделей?
KRS
Цитата(Rst7 @ Mar 19 2008, 13:30) *
Так учите матчасть smile.gif Но, вообще-то, не так давно появилась эта фича.

Действительно появилась, а я и не знал smile.gif
Главное нигде на это внимание не акцентируется, я так внимательно и не читал даташит на новые контроллеры в этом разделе
Да и фича то давно появилась даже у CAN128 есть.
IgorKossak
Цитата(Дон Амброзио @ Mar 19 2008, 12:39) *
Начиная с каких моделей?

Цитата(KRS @ Mar 19 2008, 12:47) *
Действительно появилась, а я и не знал smile.gif
Главное нигде на это внимание не акцентируется, я так внимательно и не читал даташит на новые контроллеры в этом разделе
Да и фича то давно появилась даже у CAN128 есть.

Вопрос, когда появилась та или иная фича, скорее всего риторический.
Более интересный вопрос это в каких моделях эта фича вообще есть, но для этого придётся перелопатить документацию на каждый МК.
И ещё, отсутствие явных указаний на принципиальные отличия от ранних моделей в начале документа, а не на 78-й странице, это явное упущение производителя. И в подобных случаях сказывается инерция мышления разработчика, не перечитывать повторно то, что уже было когда-то прочитано. Хотя и это моё мнение тоже из области риторики.
Nanobyte
Эта фича ещё есть у Tiny2313. Найти модели, в которых она есть, довольно просто. Поищите в DS слово "toggle". В разделах про порты сразу находится (если фича там есть). Ещё на схеме портов есть блок, отвечающий за это.
=GM=
Цитата(Nanobyte @ Mar 20 2008, 18:13) *
В разделах про порты сразу находится (если фича там есть)

Добавлю ссылку для полноты картины. Обсуждение инверсии ножек было здесь.
IgorKossak
Цитата(Nanobyte @ Mar 20 2008, 20:13) *
Эта фича ещё есть у Tiny2313. Найти модели, в которых она есть, довольно просто. Поищите в DS слово "toggle". В разделах про порты сразу находится (если фича там есть). Ещё на схеме портов есть блок, отвечающий за это.

В том то и дело, что перед этим придётся загрузить описания на все МК (если стоит задача выбрать МК с этой фичей), причем не Summary, а полные. Проверил в случае с Mega48/88/168.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.