Перейти к содержанию
    

Где в AVR команда пропуска по условию ? По битам в i/o или в регистрах - да. А вот по битам в регистре состояния - облом. Вообще, IMHO, глупо было выносить SREG из зоны доступности sbis/sbic - в PIC16 этот момент гораздо приятнее...

 

 

Даже хуже. Как верно заметил rx3apf, SREG не попадает в область IO, соответственно, никакие из его флагов не доступны командам sbic/sbis.

 

 

Даже хуже, но это всё равно не аргумент, чтобы заниматься подобной хакерней.

 

 

Простите, господа, но не ожидал я от Вас такого загона. Скажите, какая разница между SBxx (выполнение следующей команды через такт или невыполнение стоимостью 2 такта) и BRxx (с крайним случаем перехода через команду - выполнение следующей команды через такт (переход не выполняется) или невыполнение при помощи перехода, а не пропуска, тоже ценой 2 такта)?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

...решил проверить , а поймает её студия и получил результат не ловит.
У меня противоположный результат (проверил только вот; дома AVRStudio не было на ПК). AVRASM: AVR macro assembler 2.1.42 (build 1796 Sep 15 2009 10:48:36) успешно обнаруживает и соответствующим образом ругается.

 

--

 

Скажите, какая разница...
В первом случае отсутствие необходимости указать куда переходить. Метка. Суть темы, собственно.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

..Может быть, я и программист в кавычках, как вы отметили, однако, я не просил вас давать оценку моему уровню.

Под "программистами" я не имел ввиду конкретно Вас, сорри если Вы приняли на свой счет.

Для симметрии, хотите услышать мою оценку вашего уровня? У меня сложилось некоторое мнение, на основании ваших постов здесь..

Представляю оценку :biggrin: . Стыдно признаться, но я ни разу не использовал мнемонику PC+/-7.

Еще раз пост Ark-а перечитайте, он хорошо поясняет причину, по которой задан вопрос в теме.

Возможно, вы не поняли..

Возможно и я не понял.

 

Но я всетаки хочу разобраться и понять вконце концов суть вашего вопроса.

Попробую сформулировать по другому:

Вы утверждаете что ATMELовские трансляторы не правильно компилируют некоторые команды у которых аргументом является програмный счётчик?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Простите, господа, но не ожидал я от Вас такого загона. Скажите, какая разница между SBxx (выполнение следующей команды через такт или невыполнение стоимостью 2 такта) и BRxx (с крайним случаем перехода через команду - выполнение следующей команды через такт (переход не выполняется) или невыполнение при помощи перехода, а не пропуска, тоже ценой 2 такта)?

Разница принципиальная - с тупого конца разбивать, или с острого ! Присоединяйтесь к нашей партии !!! ;)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В первом случае отсутствие необходимости указать куда переходить. Метка. Суть темы, собственно.

 

Нет. Суть темы - явно в кривых руках топикстартера. А это локальный оффтопик про якобы "говносистему команд". Причем, от профессионалов, что и удивляет.

 

Разница принципиальная - с тупого конца разбивать, или с острого !

 

Ах в этом смысле :biggrin:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Скажите, какая разница между SBxx (выполнение следующей команды через такт или невыполнение стоимостью 2 такта) и BRxx (с крайним случаем перехода через команду - выполнение следующей команды через такт (переход не выполняется) или невыполнение при помощи перехода, а не пропуска, тоже ценой 2 такта)?

 

Текстуальная. Что мы и обсуждаем.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

За всю жизнь переход без метки использовал только один раз:

        .section .drv.vectors,"ax",@progbits

        RJMP    ColdStart
        RJMP    . + 0x800 - 2      ; INT0_vect, redirect to application section
        RJMP    . + 0x800 - 2      ; INT1_vect, redirect to application section
        RJMP    . + 0x800 - 2      ; TIMER2_COMP_vect, redirect to application section
        RJMP    . + 0x800 - 2      ; TIMER2_OVF_vect, redirect to application section
        RJMP    TX_START_Handler   ; TIMER1_CAPT_vect
        ........

В остальных случаях хватало локальных и временных меток потому что гнутый асм их поддерживает. А студийный кроме них не поддерживает еще кучу всего и за это идет лесом сразу.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Текстуальная.

 

Да ну? Напомню начальный вброс:

 

Вообще, IMHO, глупо было выносить SREG из зоны доступности sbis/sbic - в PIC16 этот момент гораздо приятнее...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да ну? Напомню начальный вброс:

 

Не, фразой "даже хуже" обсуждалось, что brxx нельзя заменить на аналог sbrc без метки и хака с PC.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да ну? Напомню начальный вброс:

Да ладно, грызня была уже до этого. Доступ к SREG разнообразил бы ассортимент команд, не плодя лишние опкоды, но и только. А основной вопрос - кошерно ли использовать PC в команде перехода. При наличии пропусков по состоянию бита в SREG во многих случаях такое и не потребовалось, но не всегда. В том и вопрос, что нагляднее - PC+2 или лишняя метка.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Доступ к SREG разнообразил бы ассортимент команд, не плодя лишние опкоды, но и только.

...

В том и вопрос, что нагляднее - PC+2 или лишняя метка.

 

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

 

А вообще, если свербит, и мозг не умеет понимать сразу с листа, то сделайте макрос, назовите его SKIP xx, где xx - условие. Ну или еще как. Но не путайте это с эффективностью системы команд.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А основной вопрос - кошерно ли использовать PC в команде перехода

 

Позвольте, вас поправлю.

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

 

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

 

А вообще, если свербит, и мозг не умеет понимать сразу с листа, то сделайте макрос, назовите его SKIP xx, где xx - условие. Ну или еще как. Но не путайте это с эффективностью системы команд.

 

Мне нравится ваше предложение! Макрос, который тихо будет работать некорректно с некоторыми избранными командами, длину которых он знать не может. :laughing:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

я тоже отмечусь снова - может, на общем фоне за гуру проканаю :)))

 

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

 

по-моему, очевидно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Мне нравится ваше предложение!

 

Ну ничем не хуже, чем тупо писать PC+2 всегда :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну ничем не хуже, чем тупо писать PC+2 всегда :)

 

 

Нет, ваше предложение сильно превзошло PC+2, однозначно!

PC + 2 по крайней мере заставляет заметить опасную практику, макрос её тихонько маскирует. :laughing:

Это из Остера, типа переопределения int дефайном?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Гость
Эта тема закрыта для публикации ответов.
×
×
  • Создать...