реклама на сайте
подробности

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> про PCLATH вопрос
Марк_Я
сообщение Aug 20 2018, 06:39
Сообщение #16


Частый гость
**

Группа: Свой
Сообщений: 178
Регистрация: 19-09-07
Из: М.О. г.Фрязино
Пользователь №: 30 656



Я в курсе. Речь шла о Вашем упоминании.
Go to the top of the page
 
+Quote Post
balk
сообщение Aug 22 2018, 16:08
Сообщение #17


Участник
*

Группа: Участник
Сообщений: 24
Регистрация: 22-11-09
Пользователь №: 53 792



Спасибо, друзья , за ценные замечания !
всё-таки один момент мне не стал понятнее,
как по команде ADDWF PCL программа перейдет на нужную RETLW, если при
выполнении ADDWF произойдет запись в PCH из PCLATH, в котором адресный байт другого сегмента. ?

Цитата(Марк_Я @ Aug 18 2018, 13:40) *
При выполнении команды 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.
Go to the top of the page
 
+Quote Post
Smen
сообщение Aug 23 2018, 10:26
Сообщение #18


Местный
***

Группа: Участник
Сообщений: 211
Регистрация: 18-03-13
Из: Питер
Пользователь №: 76 081



Цитата(balk @ Aug 22 2018, 21:08) *
после addwf программа перепрыгивает на выделенный жирным nop
В PCLATH - ноль (а в реале может быть любое число, поскольку нет инициализации регистра), вот он и подставляется в старший байт адреса.
Что ж тут непонятного?
Вставьте перед movlw
Код
            mowlw  high table
            movwf  PCLATH,0

И попадёте куда нужно.
P.S.: Только конструкция всё-равно кривая.
И для записи листинга программы на форуме пользуйтесь тэгом code (см. кнопочки вверху окна сообщения).

Go to the top of the page
 
+Quote Post
balk
сообщение Aug 27 2018, 13:06
Сообщение #19


Участник
*

Группа: Участник
Сообщений: 24
Регистрация: 22-11-09
Пользователь №: 53 792



спасибо! вопросы остаются, но свернём тему , чтоб по второму кругу не начинать.
Go to the top of the page
 
+Quote Post
balk
сообщение Aug 28 2018, 12:51
Сообщение #20


Участник
*

Группа: Участник
Сообщений: 24
Регистрация: 22-11-09
Пользователь №: 53 792



Цитата(balk @ Aug 27 2018, 17:06) *
вопросы остаются

Smenв смежной теме Вы предложили вернуться к PCLATH.
Кстати вопрос у меня остался такой
в Вашем коде
Код
            movlw  high table
            movwf  PCLATH,0

используются две команды, кроме того ещё задействован регистр W, который должен передавать в таблицу
вектор перехода, соответственно нужно предусматривать дополнительные манипуляции с W.
В коде
Код
            movff tosh,pclath
            addwf pcl,1,0

не нахожу ничего такого, чем бы он уступал Вашему .
Go to the top of the page
 
+Quote Post
Smen
сообщение Aug 28 2018, 13:12
Сообщение #21


Местный
***

Группа: Участник
Сообщений: 211
Регистрация: 18-03-13
Из: Питер
Пользователь №: 76 081



Цитата(balk @ Aug 28 2018, 16:51) *
Вы предложили вернуться к PCLATH
Возвращаться я не предлагал, мне просто показалась несколько странной последовательность Ваших действий. rolleyes.gif

Цитата(balk @ Aug 28 2018, 16:51) *
не нахожу ничего такого, чем бы он уступал Вашему
Команда movff занимает два МЦ и два слова памяти программ, ровно столько же, сколько и в/у две команды (читайте уже наконец даташит), так что с точки зрения времени выполнения/размера обе конструкции одинаковы.
А вот относительно логики. rolleyes.gif
В моей последовательности загружается адрес таблицы, а в Вашей, указатель стека. Разницу чувствуете?
Насчёт волнений по поводу аккумулятора, вообще не понятно. На то он и аккумулятор, что б его активно использовать.
У Вас следом пойдёт ещё одна movlw, так какая разница, что там в аккумуляторе будет находиться?
Go to the top of the page
 
+Quote Post
balk
сообщение Aug 28 2018, 13:36
Сообщение #22


Участник
*

Группа: Участник
Сообщений: 24
Регистрация: 22-11-09
Пользователь №: 53 792



Цитата(Smen @ Aug 28 2018, 17:12) *
Команда movff занимает два МЦ

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



Цитата(Smen @ Aug 28 2018, 17:12) *
В моей последовательности загружается адрес таблицы, а в Вашей, указатель стека. Разницу чувствуете?

Извините, здесь, должен признаться, не чувствую разницы. Был бы признателен за разъяснения


и мне кажется в этом контексте уместней говорить не "загружается", а читается
Go to the top of the page
 
+Quote Post
Smen
сообщение Aug 29 2018, 05:26
Сообщение #23


Местный
***

Группа: Участник
Сообщений: 211
Регистрация: 18-03-13
Из: Питер
Пользователь №: 76 081



Цитата(balk @ Aug 28 2018, 18:36) *
я имел ввиду краткость кода
Если Вы имеете ввиду про то, что в/у команда пишется в одну строчку, так какая разница, будет в программе 3000 строк, или 3001? rolleyes.gif
Вообще, говорить о краткости листинга, используя АСМ как-то стрёмно. Переходите уж тогда на СИ.

Про "команды, которые нужно внедрить для манипуляций с аккумулятором" я что-то вообще не понял.
Что Вы там ещё внедрять хотите? Кроме в/у двух команд ничего не требуется.

Кстати, Ваши двойные вызовы ПП вовсе не сокращают листинг, да вдобавок ещё и стэк забивают, а ведь он не резиновый.


Цитата(balk @ Aug 28 2018, 18:36) *
не чувствую разницы
Это очень плохо. Попробую ещё раз пояснить.
В PCLATH необходимо загрузить (именно "загрузить") адрес "таблицы переходов".
В моём примере он туда и загружается, а в Вашем в него загружается указатель вершины стэка, в котором оказывается нужное значение.
Сейчас это сработало, но когда-нибудь может в указателе оказаться совсем не то, что нужно, а вот адрес таблицы всегда останется адресом.
Я уже молчу о совместимости кода с другими семействами.
И если Вы возразите, что никуда его переносить не собираетесь, то я отвечу, что тогда Вам вообще нужно использовать команды табличного чтения.
Go to the top of the page
 
+Quote Post
balk
сообщение Aug 29 2018, 06:57
Сообщение #24


Участник
*

Группа: Участник
Сообщений: 24
Регистрация: 22-11-09
Пользователь №: 53 792



спасибо Smen
приятно получить развернутый ответ с изложением тонких мест.
Go to the top of the page
 
+Quote Post
Марк_Я
сообщение Aug 30 2018, 05:29
Сообщение #25


Частый гость
**

Группа: Свой
Сообщений: 178
Регистрация: 19-09-07
Из: М.О. г.Фрязино
Пользователь №: 30 656



Цитата(balk @ Aug 29 2018, 09:57) *
приятно получить

Чуть добавлю.
Смысл команды movff совсем не в краткости записи. Эта команда, не модифицирует контекст (аккумулятор и флаги состояния АЛУ). И именно в таком качестве ее следует применять. Если аккумулятор и флаги могут быть произвольно изменены, то нет никакого практического смысла в применении movff.
Go to the top of the page
 
+Quote Post

2 страниц V  < 1 2
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 16th April 2024 - 07:26
Рейтинг@Mail.ru


Страница сгенерированна за 0.01453 секунд с 7
ELECTRONIX ©2004-2016