my504 2 20 августа, 2018 Опубликовано 20 августа, 2018 · Жалоба Я в курсе. Речь шла о Вашем упоминании. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
balk 0 22 августа, 2018 Опубликовано 22 августа, 2018 · Жалоба Спасибо, друзья , за ценные замечания ! всё-таки один момент мне не стал понятнее, как по команде ADDWF PCL программа перейдет на нужную RETLW, если при выполнении ADDWF произойдет запись в PCH из PCLATH, в котором адресный байт другого сегмента. ? При выполнении команды RETLW в таблице, возврат произойдет БЕЗ ПРИВЯЗКИ К PCLATH, в том то и дело , что до RETLW не доходим, а срываемся в другой сегмент. вот собственно хребет , который всё наглядно может продемонстрировать #include <p18f2550.inc> org 0 goto start nop nop nop nop org 0x20 start call module org 0x100 table addwf PCL,1,0 retlw 0x50 retlw 0xde retlw 0x62 retlw 0xc2 retlw 0xcc retlw 0xc1 module movlw 0x06 call table nop nop END после addwf программа перепрыгивает на выделенный жирным nop , а не возвращается в module. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Smen 1 23 августа, 2018 Опубликовано 23 августа, 2018 · Жалоба после addwf программа перепрыгивает на выделенный жирным nop В PCLATH - ноль (а в реале может быть любое число, поскольку нет инициализации регистра), вот он и подставляется в старший байт адреса. Что ж тут непонятного? Вставьте перед movlw mowlw high table movwf PCLATH,0 И попадёте куда нужно. P.S.: Только конструкция всё-равно кривая. И для записи листинга программы на форуме пользуйтесь тэгом code (см. кнопочки вверху окна сообщения). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
balk 0 27 августа, 2018 Опубликовано 27 августа, 2018 · Жалоба спасибо! вопросы остаются, но свернём тему , чтоб по второму кругу не начинать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
balk 0 28 августа, 2018 Опубликовано 28 августа, 2018 · Жалоба вопросы остаются Smenв смежной теме Вы предложили вернуться к PCLATH. Кстати вопрос у меня остался такой в Вашем коде movlw high table movwf PCLATH,0 используются две команды, кроме того ещё задействован регистр W, который должен передавать в таблицу вектор перехода, соответственно нужно предусматривать дополнительные манипуляции с W. В коде movff tosh,pclath addwf pcl,1,0 не нахожу ничего такого, чем бы он уступал Вашему . Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Smen 1 28 августа, 2018 Опубликовано 28 августа, 2018 · Жалоба Вы предложили вернуться к PCLATHВозвращаться я не предлагал, мне просто показалась несколько странной последовательность Ваших действий. :rolleyes: не нахожу ничего такого, чем бы он уступал ВашемуКоманда movff занимает два МЦ и два слова памяти программ, ровно столько же, сколько и в/у две команды (читайте уже наконец даташит), так что с точки зрения времени выполнения/размера обе конструкции одинаковы. А вот относительно логики. :rolleyes: В моей последовательности загружается адрес таблицы, а в Вашей, указатель стека. Разницу чувствуете? Насчёт волнений по поводу аккумулятора, вообще не понятно. На то он и аккумулятор, что б его активно использовать. У Вас следом пойдёт ещё одна movlw, так какая разница, что там в аккумуляторе будет находиться? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
balk 0 28 августа, 2018 Опубликовано 28 августа, 2018 · Жалоба Команда movff занимает два МЦ да, но я имел ввиду краткость кода при том же времени исполнения, к тому же оставляю за скобками команды, которые нужно внедрить для манипуляций с аккумулятором. В моей последовательности загружается адрес таблицы, а в Вашей, указатель стека. Разницу чувствуете? Извините, здесь, должен признаться, не чувствую разницы. Был бы признателен за разъяснения и мне кажется в этом контексте уместней говорить не "загружается", а читается Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Smen 1 29 августа, 2018 Опубликовано 29 августа, 2018 · Жалоба я имел ввиду краткость кодаЕсли Вы имеете ввиду про то, что в/у команда пишется в одну строчку, так какая разница, будет в программе 3000 строк, или 3001? :rolleyes: Вообще, говорить о краткости листинга, используя АСМ как-то стрёмно. Переходите уж тогда на СИ. Про "команды, которые нужно внедрить для манипуляций с аккумулятором" я что-то вообще не понял. Что Вы там ещё внедрять хотите? Кроме в/у двух команд ничего не требуется. Кстати, Ваши двойные вызовы ПП вовсе не сокращают листинг, да вдобавок ещё и стэк забивают, а ведь он не резиновый. не чувствую разницыЭто очень плохо. Попробую ещё раз пояснить. В PCLATH необходимо загрузить (именно "загрузить") адрес "таблицы переходов". В моём примере он туда и загружается, а в Вашем в него загружается указатель вершины стэка, в котором оказывается нужное значение. Сейчас это сработало, но когда-нибудь может в указателе оказаться совсем не то, что нужно, а вот адрес таблицы всегда останется адресом. Я уже молчу о совместимости кода с другими семействами. И если Вы возразите, что никуда его переносить не собираетесь, то я отвечу, что тогда Вам вообще нужно использовать команды табличного чтения. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
balk 0 29 августа, 2018 Опубликовано 29 августа, 2018 · Жалоба спасибо Smen приятно получить развернутый ответ с изложением тонких мест. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
my504 2 30 августа, 2018 Опубликовано 30 августа, 2018 · Жалоба приятно получить Чуть добавлю. Смысл команды movff совсем не в краткости записи. Эта команда, не модифицирует контекст (аккумулятор и флаги состояния АЛУ). И именно в таком качестве ее следует применять. Если аккумулятор и флаги могут быть произвольно изменены, то нет никакого практического смысла в применении movff. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться