Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: PC +/- …
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > MCS51, AVR, PIC, STM8, 8bit
Страницы: 1, 2, 3, 4
Rst7
QUOTE
Доступ к SREG разнообразил бы ассортимент команд, не плодя лишние опкоды, но и только.
...
В том и вопрос, что нагляднее - PC+2 или лишняя метка.


Система команд в текущем случае эффективна и не избыточна. Причем, именно вкупе с реализацией адресного пространства - доступ к SREG только через IN/OUT, без битовой возни. А если SREG будет доступен SBIC/SBIS, то это будет избыточность. Лучше туда что-то полезное положить.

А вообще, если свербит, и мозг не умеет понимать сразу с листа, то сделайте макрос, назовите его SKIP xx, где xx - условие. Ну или еще как. Но не путайте это с эффективностью системы команд.
Oldring
Цитата(rx3apf @ Apr 14 2011, 11:52) *
А основной вопрос - кошерно ли использовать PC в команде перехода


Позвольте, вас поправлю.
Основной обсуждаемый вопрос - кошерно ли использовать PC в ассемблерном тексте, описывающем команду перехода, программисту явно, или следует обязательно положиться в вычислении смещения на ассемблер? sm.gif

PS Основной вопрос ТС: "почему мои любимые пиковские хаки не работают у меня на AVR, ох, как я ненавижу, как я ненавижу..." Вопрос настоящего инженера, бесспорно. laughing.gif

Цитата(Rst7 @ Apr 14 2011, 11:57) *
А вообще, если свербит, и мозг не умеет понимать сразу с листа, то сделайте макрос, назовите его SKIP xx, где xx - условие. Ну или еще как. Но не путайте это с эффективностью системы команд.


Мне нравится ваше предложение! Макрос, который тихо будет работать некорректно с некоторыми избранными командами, длину которых он знать не может. laughing.gif
ARV
я тоже отмечусь снова - может, на общем фоне за гуру проканаю sm.gif))

PC+2 или PC-2, пока это именно 2 - еще куда ни шло, но смотреть на вещи надо ширее: PC+13 - это уже сильно напряжет мозг, придется высчитывать команды по словам и разбираться, в какое же место попадешь. особенно лично меня напрягает постоянно помнить особенности аритектуры: PC содержит адрес ЭТОЙ команды, уже СЛЕДУЮЩЕЙ или еще какой-то? с меткой такая проблема не возникает никогда. а при использовании некоторых соглашений в именах меток (вперед - префикс f_, назад - префикс b_) вообще будет красиво - но это на любителя уже.

по-моему, очевидно.
Rst7
QUOTE
Мне нравится ваше предложение!


Ну ничем не хуже, чем тупо писать PC+2 всегда sm.gif
Oldring
Цитата(Rst7 @ Apr 14 2011, 12:05) *
Ну ничем не хуже, чем тупо писать PC+2 всегда sm.gif



Нет, ваше предложение сильно превзошло PC+2, однозначно!
PC + 2 по крайней мере заставляет заметить опасную практику, макрос её тихонько маскирует. laughing.gif
Это из Остера, типа переопределения int дефайном?
rx3apf
Цитата(Rst7 @ Apr 14 2011, 11:57) *
Система команд в текущем случае эффективна и не избыточна. Причем, именно вкупе с реализацией адресного пространства - доступ к SREG только через IN/OUT, без битовой возни. А если SREG будет доступен SBIC/SBIS, то это будет избыточность. Лучше туда что-то полезное положить.

Но ведь не кладут. И, вдобавок, при расширении периферии, все ползет, хорошо, что хоть порты на месте. Система команд, кстати, отягощена лишними мнемокодами, имеющими тот же опкод (к вопросу о "неизбыточности"). А пропуск по биту в SREG от перехода по условию все же различается - в первом случае по желанию можно в обоих ветках идти сколь угодно далеко. Я ведь написал "IMHO", и при нем остаюсь - этот момент _мне_ представляется непродуманным. Но речь шла совершенно о другом.
Цитата
А вообще, если свербит, и мозг не умеет понимать сразу с листа, то сделайте макрос, назовите его SKIP xx, где xx - условие. Ну или еще как.

И вот КАК это сделать ? Чтобы именно пропускал _одну_ последующую команду ? Препроцессор написать ?

Цитата(Oldring @ Apr 14 2011, 12:00) *
Основной обсуждаемый вопрос - кошерно ли использовать PC в ассемблерном тексте, описывающем команду перехода, программисту явно, или следует обязательно положиться в вычислении смещения на ассемблер? sm.gif

Нет. Пока я вижу, что _любое_ использование PC вызывает у оппонентов отторжение, переходящее в классовую ненависть. PC полностью вручную никто не считает, а вопрос, хорошо ли, что смещение оперирует дискретами PC а не длительностью конкретной цепочки команд, затерялся где-то в начале обсуждения, да так тихо и загнулся. И был лишь поводом для начала боевых действий.

Цитата
PS Основной вопрос ТС: "почему мои любимые пиковские хаки не работают у меня на AVR, ох, как я ненавижу, как я ненавижу..." Вопрос настоящего инженера, бесспорно. laughing.gif

Это он с MSP430 не работал...

Oldring
Цитата(rx3apf @ Apr 14 2011, 12:13) *
Нет. Пока я вижу, что _любое_ использование PC вызывает у оппонентов отторжение, переходящее в классовую ненависть. PC полностью вручную никто не считает, а вопрос, хорошо ли, что смещение оперирует дискретами PC а не длительностью конкретной цепочки команд, затерялся где-то в начале обсуждения, да так тихо и загнулся. И был лишь поводом для начала боевых действий.


Я намекал на то, что любая команда относительного перехода использует счетчик команд, однако обычно с расчетом величины перехода лучше справляется ассемблер, для чего и придумали метки, вообще говоря.
rx3apf
Цитата(Oldring @ Apr 14 2011, 12:17) *
Я намекал на то, что любая команда относительного перехода использует счетчик команд, однако обычно с расчетом величины перехода лучше справляется ассемблер, для чего и придумали метки, вообще говоря.

Что вовсе не означает, что иной способ адресации незаконен и подлежит обличению и осуждению. У каждого свой стиль программирования. Я, к примеру, стараюсь не злоупотреблять с метками, причем только ради того, чтобы не портить читабельность. И не для кого-нибудь, а для самого себя через несколько лет, когда буду (если) что-то дорабатывать. И мне бы для отказа от конструкций PC+ было бы достаточно наличия условных пропусков по C/Z и локальных меток. Но раз ни того, ни другого нет - буду продолжать нарушать заповеди.
zombi
Ув. господа ответьте плиз правильно ли я понял вопрос TS?

TS утверждает что ATMELовские трансляторы не правильно компилируют некоторые команды у которых аргументом является програмный счётчик?
rx3apf
Цитата(zombi @ Apr 14 2011, 13:22) *
TS утверждает что ATMELовские трансляторы не правильно компилируют некоторые команды у которых аргументом является програмный счётчик?

Типа того. Т.е., на самом деле, он просто не понял, что считаются не строчки, а слова программной памяти (строчки, команды, в смысле, да, было бы удобнее и избавило бы от некоторых возможных проблем, но лично мне такие ассемблеры неизвестны).
ILYAUL
Цитата(ARV @ Apr 14 2011, 12:01) *
но смотреть на вещи надо ширее: PC+13 - это уже сильно напряжет мозг,

Не а , biggrin.gif PC13= 6*(PC+2) + (PC+1) и всё laughing.gif
zombi
Цитата(rx3apf @ Apr 14 2011, 13:25) *
Типа того. Т.е., на самом деле, он просто не понял, что считаются не строчки, а слова программной памяти (строчки, команды, в смысле, да, было бы удобнее и избавило бы от некоторых возможных проблем, но лично мне такие ассемблеры неизвестны).

Ну дык а об этом и написал в 32м сообщении.
А он (TS) возражает.

Цитата(aaarrr @ Apr 14 2011, 04:21) *
Вот попробуйте найти ошибку в такой конструкции:
Код
    ldi     r16, 0
    sbrс    r17, 2
    ldi     r16, 1

Пример вполне себе из жизни. Не дословно, конечно, но изюминка сохранена.

Дык грабли с русскими буквами в мнемонике команд стары как мир!
ILYAUL
Не работал с PIC , а что компиляторы PIC меток не понимают , там всегда сам считаешь PC+X?
rx3apf
Цитата(zombi @ Apr 14 2011, 13:31) *
Ну дык а об этом и написал в 32м сообщении.
А он (TS) возражает.

Это от непонимания. Потому что ссылка на пост @Ark ничего принципиально не меняет - нет разницы, чему равен PC при ассемблировании текущей команды, адресу следующей либо адресу ее самой (как в AVR или PIC), про это надо лишь помнить и знать, что у конкретной платформы могут быть команды разной длины.
ARV
Цитата(ILYAUL @ Apr 14 2011, 13:27) *
Не а , biggrin.gif PC13= 6*(PC+2) + (PC+1) и всё laughing.gif
и сразу стало как-то легче biggrin.gif
aaarrr
Цитата(zombi @ Apr 14 2011, 13:31) *
Дык грабли с русскими буквами в мнемонике команд стары как мир!

Когда встречаешься первый раз, и это единственный кириллический символ на весь текст - эффект просто потрясающий.
ARV
Цитата(aaarrr @ Apr 14 2011, 14:14) *
Когда встречаешься первый раз, и это единственный кириллический символ на весь текст - эффект просто потрясающий.

а когда используешь punto switcher - это норма жизни sm.gif
aaarrr
Цитата(Oldring @ Apr 14 2011, 12:00) *
PS Основной вопрос ТС: "почему мои любимые пиковские хаки не работают у меня на AVR, ох, как я ненавижу, как я ненавижу..." Вопрос настоящего инженера, бесспорно. laughing.gif

Позволите еще один вброс? Я вот считаю, что от программирования на ассемблере для PIC12/16 получаешь куда большее эстетическое удовольствие, нежели чем в случае AVR. Красота, ничего лишнего. А уж таблички через retlw...

P.S. Справедливости ради замечу, что с PIC'ами последний раз имел дело лет семь назад. На AVR'ах изредка что-то приходится стряпать, но каждый раз невольно плюешься. А на "C" писать в данном случае лень, никогда не использовал его для восьмибитников.

Цитата(ARV @ Apr 14 2011, 14:17) *
а когда используешь punto switcher - это норма жизни sm.gif

Вот никогда не понимал людей, использующих подобную автоматику.

О, есть еще одна тема для холивара: как кошерно переключать раскладку - при помощи Alt+Shift, или же Ctrl+Shift?
Последний вариант, на мой взгляд, является еретическим, хотя многие почему-то выбирают его.
ARV
Цитата(aaarrr @ Apr 14 2011, 14:31) *
Вот никогда не понимал людей, использующих подобную автоматику.

О, есть еще одна тема для холивара: как кошерно переключать раскладку - при помощи Alt+Shift, или же Ctrl+Shift?
Последний вариант, на мой взгляд, является еретическим, хотя многие почему-то выбирают его.
с введением в Windows системы индивидуальной настройки раскладки для каждой запущенной программы, автоматический переключатель часто выручает. но при написании программ - сущий ад! sm.gif

при Alt+Shift пальцы надо широко расставлять, а на ноутбуках еще и попадать в мелкие кнопки sm.gif


aaarrr
Цитата(ARV @ Apr 14 2011, 14:40) *
при Alt+Shift пальцы надо широко расставлять, а на ноутбуках еще и попадать в мелкие кнопки sm.gif

А при Ctrl+Shift надо руку с клавиатуры снимать, или большой палец выкручивать - так и здоровье недолго потерять.
ARV
Цитата(aaarrr @ Apr 14 2011, 14:45) *
или большой палец выкручивать - так и здоровье недолго потерять.

если хилый - сразу в гроб! сохранить здоровье чтоб, применяйте утром ... разминание пальцев biggrin.gif
ILYAUL
Цитата(ARV @ Apr 14 2011, 14:40) *
с введением в Windows системы индивидуальной настройки раскладки для каждой запущенной программы, автоматический переключатель часто выручает. но при написании программ - сущий ад! sm.gif

А я свой , даже не помню как называется, сразу отключаю , как только за программу сажусь, единственно полезное , чтооставляю переключение раскладки по CTRL

Так , есть метки в Pic или нет - ЛЮДИ!!! Кто нибудь!!!
aaarrr
Цитата(ILYAUL @ Apr 14 2011, 14:58) *
Так , есть метки в Pic или нет - ЛЮДИ!!! Кто нибудь!!!

Странный вопрос. Есть, разумеется.
ILYAUL
Цитата(aaarrr @ Apr 14 2011, 15:27) *
Странный вопрос. Есть, разумеется.

Так , значит это манера пистать программы TS в AVR не проканала и было столько вони по данному поводу. Пипец cranky.gif
@Ark
Цитата
Позволите еще один вброс? Я вот считаю, что от программирования на ассемблере для PIC12/16 получаешь куда большее эстетическое удовольствие, нежели чем в случае AVR. Красота, ничего лишнего. А уж таблички через retlw...

Эстетика и удобство, конечно, не последнее дело в программированиии. Но удобство можно понимать по-разному.
Важно, чтобы ассемблер предоставлял выбор всех имеющихся в наличии возможностей - поддерживал как локальные и глобальные метки, так и адресацию по программному счетчику. Но не менее важно, на мой взгляд, чтобы ассемблер ничего за программиста не "додумывал" (особенно, когда его об этом не просят), а точно исполнял указания. Если я написал адрес перехода PC+12, значит так и должно быть. Какая длина последующих команд, и на какую из них я попаду после такого перехода - его не должно интересовать. Возможно попаду в середину какой-нибудь команды, ну и что? Может так и было задумано, и это единственный способ выполнить такой переход. Кому-то сложно посчитать адреса с учетом длин команд, тогда не пользуйтесь подобными приемами. Ставьте метки, какие проблемы? Ну, а если хотите чтобы компилятор "думал за вас", автоматически исправлял все неоднозначности и возможные ошибки - тогда пишите на ЯВУ, ассемблер не для вас.
Программа на ассемблере - это всего лишь мнемоническое изображение машинного кода. Программой, в данном случае, является исполняемый код, а не текст. И этот код должен быть предельно ясно и понятно "виден" за мнемоническим текстом программы. Без всяких неоднозначностей и вариаций, которые ассемблеру самостоятельно вносить просто непозволительно. В этом и есть принципиальное отличие от ЯВУ, где программой принято считать собственно текст, выполненный строго по правилам языка. А исполняемый код, в этом случае, только побочный продукт работы компилятора. sm.gif И каков он будет - программист на ЯВУ чаще всего даже не знает, да и не положено ему это знать.
Сергей Борщ
QUOTE (aaarrr @ Apr 14 2011, 13:31) *
О, есть еще одна тема для холивара: как кошерно переключать раскладку - при помощи Alt+Shift, или же Ctrl+Shift?
Последний вариант, на мой взгляд, является еретическим, хотя многие почему-то выбирают его.
Выбрал именно его и объясню почему: Бывает такое: начал что-то писать, надо переключить раскладку. Большой палец на Alt, нажал... и в этот момент переключать раскладку передумал. Отпускаю Alt, продолжаю писать и... фигушки - нажатие Alt активировало меню. Перешел на Ctrl-Shift и забыл об этой проблеме навсегда.
prm
Цитата(Сергей Борщ @ Apr 14 2011, 16:35) *
Выбрал именно его и объясню почему: Бывает такое: начал что-то писать, надо переключить раскладку. Большой палец на Alt, нажал... и в этот момент переключать раскладку передумал. Отпускаю Alt, продолжаю писать и... фигушки - нажатие Alt активировало меню. Перешел на Ctrl-Shift и забыл об этой проблеме навсегда.


А под линуксом хот-кеи Eclipse перенастраивали???
aaarrr
Цитата(Сергей Борщ @ Apr 14 2011, 15:35) *
Выбрал именно его и объясню почему: Бывает такое: начал что-то писать, надо переключить раскладку. Большой палец на Alt, нажал... и в этот момент переключать раскладку передумал. Отпускаю Alt, продолжаю писать и... фигушки - нажатие Alt активировало меню. Перешел на Ctrl-Shift и забыл об этой проблеме навсегда.

Да, бывает. В таких случаях просто переключаю раскладку два раза. Мне потеря времени на перестановку пальцев на Ctrl показалось существеннее.
Oldring
Цитата(aaarrr @ Apr 14 2011, 14:31) *
О, есть еще одна тема для холивара: как кошерно переключать раскладку - при помощи Alt+Shift, или же Ctrl+Shift?


У меня Alt+Shift по каким-то непонятным причинам обычно глючит в некоторых программах, кажется, даже в MS Ofice, поэтому варианта выбора не остается. sm.gif
AHTOXA
Цитата(aaarrr @ Apr 14 2011, 16:31) *
О, есть еще одна тема для холивара: как кошерно переключать раскладку - при помощи Alt+Shift, или же Ctrl+Shift?
Последний вариант, на мой взгляд, является еретическим, хотя многие почему-то выбирают его.

А я недавно перешёл на переключение по капслоку. Очень удобно.
(До того использовал правый Ctrl)
Oldring
Цитата(@Ark @ Apr 14 2011, 15:33) *
Но не менее важно, на мой взгляд, чтобы ассемблер ничего за программиста не "додумывал" (особенно, когда его об этом не просят), а точно исполнял указания.


Угу. Особо хорошо этому следует "оптимизирующий ассемблер. laughing.gif
aaarrr
Цитата(Oldring @ Apr 14 2011, 17:00) *
У меня Alt+Shift по каким-то непонятным причинам обычно глючит в некоторых программах, кажется, даже в MS Ofice, поэтому варианта выбора не остается. sm.gif

Странно. Смутно припоминаю, что он когда-то в замшелые времена действительно глючил. Да вроде пофиксили давно, сейчас ничего подобного не наблюдаю.


Цитата(AHTOXA @ Apr 14 2011, 17:00) *
А я недавно перешёл на переключение по капслоку. Очень удобно.
(До того использовал правый Ctrl)

А как же тогда с самим капслоком быть? Ежели схемы рисовать нужно, то без него никак.
@Ark
Цитата
Угу. Особо хорошо этому следует "оптимизирующий ассемблер.

Пусть оптимизирует, на здоровье, но только с моего явного разрешения. И под контролем.
Если же какой-либо ассемблер будет мне навязывать свою оптимизацию, или заниматься ей
"подпольно", без моего ведома - то немедленно отправится на помойку. Вот так.
AHTOXA
Цитата(aaarrr @ Apr 14 2011, 19:06) *
А как же тогда с самим капслоком быть? Ежели схемы рисовать нужно, то без него никак.

Я как-то привык без Caps-а, больше страдал от случайных нажатий на него. А так - включается комбинацией Shift+CapsLock, или что-то наподобие.
zombi
Пока все здесь, осмелюсь спросить:
какая принципиальная разница в этих двух строчках программы
Код
.db 06,07,08,09,10,11
.db 6,7,8,9,10,11
aaarrr
В первом примере глаз радует равномерность расположения чисел. И в обоих удручает отсутствие пробела после запятой.

Хотя бывают люди, которые редактируют код с использованием пропорционального шрифта.
zombi
А что, наличие пробела обязательно?
Oldring
Цитата(zombi @ Apr 14 2011, 18:45) *
Пока все здесь, осмелюсь спросить:
какая принципиальная разница в этих двух строчках программы
Код
.db 06,07,08,09,10,11
.db 6,7,8,9,10,11



Главное, не нарваться на ассемблер, написанный фанатом Сей sm.gif
@Ark
Не сказано какой именно ассемблер будет использоватья, и какая система счисления
принята для чисел по умолчанию, и что является признаком той или иной системы счисления...
Пока это неизвестно, результат компиляции неопределен...
zombi
Цитата(@Ark @ Apr 14 2011, 19:05) *
Не сказано какой именно ассемблер будет использоватья, и какая система счисления
принята для чисел по умолчанию, и что является признаком той или иной системы счисления...
Пока это неизвестно, результат компиляции неопределен...

компилятор любой AVRASM
Палыч
Цитата(zombi @ Apr 14 2011, 18:54) *
А что, наличие пробела обязательно?
Нет - не обязательно. Простоспробеломчитатьудобней. biggrin.gif
aaarrr
Цитата(zombi @ Apr 14 2011, 18:54) *
А что, наличие пробела обязательно?

Разумеется. Это важный элемент оформления, кроме шуток.
@Ark
Цитата
компилятор любой AVRASM

Тогда и результат любой biggrin.gif , в зависимости от конкретного компилятора...
zombi
Цитата(@Ark @ Apr 14 2011, 19:17) *
Тогда и результат любой biggrin.gif , в зависимости от конкретного компилятора...

Ну так может кто нибудь попробует дать на растерзание AVRASM2/32 первую строку? (пробелы добавить по вкусу)
aaarrr
Цитата(zombi @ Apr 14 2011, 19:20) *
Ну так может кто нибудь попробует дать на растерзание AVRASM2/32 первую строку? (пробелы добавить по вкусу)

Несколько неожиданный эффект, да.
@Ark
Может кто-то выложит результат компиляции? Заинтриговали прям.
aaarrr
В первом случае 8 и 9 в результате напрочь отсутствуют.
zombi
Цитата(aaarrr @ Apr 14 2011, 19:28) *
Несколько неожиданный эффект, да.

И что характерно, не нравится ему именно 08 и 09!
А мы тут PC обсуждаем biggrin.gif
Я это привел к тому что компиляторы тоже люди пишут и надо с этим как-то жить! biggrin.gif
AHTOXA
Шикарно! © sm.gif
_Pasha
Цитата(zombi @ Apr 14 2011, 18:32) *
Я это привел к тому что компиляторы тоже люди пишут и надо с этим как-то жить! biggrin.gif

А откуда же тогда появились нормальные компиляторы? Аист принес? sm.gif
И не спешите удивляться:
Нажмите для просмотра прикрепленного файла
ЗЫ для экономии времени добавлю: проблема в том, что лидирующий ноль - это восьмеричная цифра.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.