Мужики, задрова! Вопрос на засыпку, есть 8 битный регистр REG_1 (например). У него "рабочие" биты с 0 по 5, а с 6 по 7 - нет (читаются как 1). При этом биты с 0 по 2 - только для чтения, а с 3 до 5 - чтение/запись. Могу ли производить "настройку" этого регистра таким образом: MOVLW 0B11000111 MOVWF REG_1 Неохото каждый бит ставить/убирать через bsf/bcf.

Комментарии: 30

  1. Dmitry

    а зачем тебе тут mov? логические операции обычно быстрее, используй какой-нибудь OR с нужной маской для установки соответствующих бит или AND для сброса. ну прям как в Си ) REG |= 0b00111000; REG &= ~0b00111000; в данном случае для всех (с 3 по 5) бит этих ваших )

    • Nazar

      в асме учиться

      • Dmitry

        смысл был не в Си, а как это сделать. на Си лишь для простоты понимания что нужно сделать на асме.

        • Nazar

          ну эти операции все равно раскрутяться как загрузка непосредственного числа в РОН, и операци и/или с другим РОН

    • Viktor

      А точно не медленнее?

      • Dmitry

        это ты тоже можешь посмотреть в справочных материалах, но обычно MOV на всех архитектурах занимает несколько тактов, а логические операторы по одному такту. поэтому и программеры обнуляют регистры не MOV REG, 0, а например XOR REG, REG.

        • Viktor

          Про XOR читал давно как-то.

    • Anonim

      REG |= REG_QUAD_READ | REG_ENABLED | REG_AUTOSCAN Нужно сразу приучивать к хорошему

      • Dmitry

        и? речь тут шла про ассемблер, а не про Си. хочешь чтобы еще спросили что это? ) Си здесь как псевдокод для понимания что нужно сделать в итоге )

        • Viktor

          http://www.gaw.ru/html.cgi/txt/doc/micros/pic/asm14/start.htm

        • Anonim

          А в асме такой записи нет разве?

          • Viktor

            Я узнал, все по такту!

            • Dmitry

              ну если прям вообще все, то делай как тебе удобно )

              • Viktor

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

                • Nazar

                  В биты только для чтения взачастую пиши что хочешь т.к. Они физически не могут записаться с АЛУ

                • Dmitry

                  у тебя особо выбора нет... в любом случае будет попытка сбросить/установить эти остальные read-only биты... разве что есть какая-то специальная команда, в которой это все предусмотрено, но очень сильно вряд ли. потому как в том же avr всякие sbr типа с установкой отдельных бит по факту работают с маской и "Команда выполняет логическое ORI между содержимым регистра Rd и маской-константой K и размещает результат в регистре назначения Rd."

          • Nazar

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

            • Anonim

              Ну тут такое дело - или нормально объяснить, или пусть сам в гугле ищет, ящетаю

              • Nazar

                REG_QUAD_READ | REG_ENABLED | REG_AUTOSCAN это 8битная константа

                • Anonim

                  От дефайна ж зависит?

                • Dmitry

                  да, опять же некоторые ассемблеры умеют такой изврат, а некоторые нет. в avr по-моему можно прям через палку | писать, оно само вычисляет результат и делает константу и т.д.

                  • Anonim

                    Я про 8бит

                  • Viktor

                    Да, в AVR можно. http://easyelectronics.ru/skazhu-paru-slov-o-optimizacii-koda.html

                  • Nazar

                    ляя.. это не зависит от асма или ядра. Это задача препроцессора

                    • Anonim

                      Он видать к тому, что у разных компиляторов разный препроцессинг

                    • Dmitry

                      да, именно, но не все препроцессоры это понимают )

          • Dmitry

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

            • Nazar

              нее все в 1 команду

              • Dmitry

                ну у пиков не знаю, возможно

                • Nazar

                  и она раскручивается препроцессором точно так же как и в си

Не нашли ответ?

Вам также может быть интересно

Всем добрый вечер! Уверен тема подсветок и вкладышей подсветок обсуждалась, но я тут недавно, потому хочу поделится своим... Читать далее