Вопросы начинающих PIC ASM
Re: Вопросы начинающих PIC ASM
Скажите пож-ста, ПП многобайтового умножения/деления, в частности с piclist.com, в случае малых операндов быстрее работают, чем под завязку? То есть в ПП 32-разрядного деления 9:3 не будет 100 или 1000 циклов? Догадываюсь, что зависимость не прямая, но всё-таки быстрее?
- Реклама
Re: Вопросы начинающих PIC ASM
Можно ли на pic16f648 вычислить за не более чем 2000 тактов такое выражение:
где A, B, C, D, E - двухбайтовые
Это получается, что умножение 2-х байтовых чисел, сложение - 4-х байтовых, а деление - четыре байта на два.
Код: Выделить всё
X=(A*B+C*D):EЭто получается, что умножение 2-х байтовых чисел, сложение - 4-х байтовых, а деление - четыре байта на два.
- Steppe
- Друг Кота
- Сообщения: 4812
- Зарегистрирован: Вс сен 17, 2017 17:44:21
- Откуда: 51.7727, 55.0988. Высота над морем 107 м. До границы 161 км.
Re: Вопросы начинающих PIC ASM
[uquote="yor",url="/forum/viewtopic.php?p=4582773#p4582773"]Можно ли на pic16f648 вычислить за не более чем 2000 тактов такое выражение:
где A, B, C, D, E - двухбайтовые
Это получается, что умножение 2-х байтовых чисел, сложение - 4-х байтовых, а деление - четыре байта на два.[/uquote]
Напиши и проверь. В любом IDE под PIC.
Код: Выделить всё
X=(A*B+C*D):EЭто получается, что умножение 2-х байтовых чисел, сложение - 4-х байтовых, а деление - четыре байта на два.[/uquote]
Напиши и проверь. В любом IDE под PIC.
Re: Вопросы начинающих PIC ASM
Запускаем симулятор МПЛАБа и смотрим...

- Родэрик
- Нашел транзистор. Понюхал.
- Сообщения: 162
- Зарегистрирован: Чт ноя 26, 2015 23:22:35
- Откуда: не с Уфы
- Контактная информация:
Re: Вопросы начинающих PIC ASM
[uquote="yor",url="/forum/viewtopic.php?p=4582773#p4582773"]Можно ли[/uquote]
на асме в 1400 укладывается
на асме в 1400 укладывается
- Реклама
Re: Вопросы начинающих PIC ASM
Подскажите пож-ста идею, а то я завис, как проверить совпадение текущего состояния регистра PORTA (или бита в регистре) с предыдущим Dflag, при первом проходе? Ведь сначала оно ни то ни сё, при последующих понятно.
Код: Выделить всё
loop-drbzg equ 5 ; кол-во проходов
cnt-loop equ addr
Dflag equ addr
D1 equ 2<--->; RA2 sense in, active LOW ↓↑
D2 equ 3<--->; RA3 sense in, active LOW ↓↑
;;; Начало работы, сканирование обоих датчиков
scanDs0: movlw<>loop-drbzg<---->; установка числа проходов
<------>movwf<->cnt-loop,f
scanDs1: movf<->PORTA,w><------>; RA2 RA3 sense in актив лог0
<------>xorlw<->0xС<---><------>; тест RA2 RA3, инверсия актива в лог1
<------>movwf<->Dflag
<------>btfsc<->Dflag,D1
<------>goto<-->далееД1актив
<------>btfss<->Dflag,D2
<------>goto<-->scanDs0><------>; ничего, входы неактивны
<------>goto<-->далееД2актив
<------>
<------>
<------>decfsz<>cnt-loop,f<---->; один из Д сработал, декремент счётчика проходов
<------>goto<-->scanDs1><------>; на след проход
<------><------><------><------>; в W активный бит Д1/Д2=1, TODO проверка бита на повторяемостьRe: Вопросы начинающих PIC ASM
Так при первом проходе мы только данные в буфер считываем из порта...
Как вариант до запуска сканера установить инициализацию буфера пассивным состоянием контрольных бит.
А уж затем цикл запускать.
В принципе... Сначала делаем анализ с предыдущим состоянием (загрузка буфера по инициализации или новые данные от предшествующего цикла), затем по результату (при несовпадении) переносим текущее значение порта в буфер и уходим в следующий цикл...

Как вариант до запуска сканера установить инициализацию буфера пассивным состоянием контрольных бит.
А уж затем цикл запускать.
В принципе... Сначала делаем анализ с предыдущим состоянием (загрузка буфера по инициализации или новые данные от предшествующего цикла), затем по результату (при несовпадении) переносим текущее значение порта в буфер и уходим в следующий цикл...
Re: Вопросы начинающих PIC ASM
Да, чего я панику-то поднял... Подумаешь, по первой проверке без предынициализации по ошибке уйдёт на повтор, а дальше уже как надо. Лишний цикл не помешает))
Re: Вопросы начинающих PIC ASM
Расшифруйте, пож-ста, эту строку:
В "MPASM USER'S GUIDE with MPLINK and MPLIB" пишут, что это:
Это оно? По этому описанию трудно понять, что имеется в виду. Что за флаги, что за единица? Что к чему? Где описание полнее?
Из команды мне только понятно, что || - это ИЛИ, 4 или 5. И это должна быть числовая константа.
Код: Выделить всё
andlw (1<<4)||(1<<5) ;only want bits 4 and 5Код: Выделить всё
<< Left shift flags = flags << 1
>> Right shift flags = flags >> 1Из команды мне только понятно, что || - это ИЛИ, 4 или 5. И это должна быть числовая константа.
- КРАМ
- Друг Кота
- Сообщения: 25219
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: Вопросы начинающих PIC ASM
[uquote="yor",url="/forum/viewtopic.php?p=4588589#p4588589"]Где описание полнее?[/uquote]
Полнее некуда.
1<<4 означает сдвиг единицы влево на 4 разряда
То есть из 0b00000001 будет 0b00010000
Полнее некуда.
1<<4 означает сдвиг единицы влево на 4 разряда
То есть из 0b00000001 будет 0b00010000
Re: Вопросы начинающих PIC ASM
рекомендую стародобрую литературу в качественном переводе вот отсюда:yor писал(а):... Что к чему? Где описание полнее?...
https://web.archive.org/web/20080208141 ... t/?mid=1x0
в частности
https://web.archive.org/web/20080208141 ... /mpasm.pdf
и справочник по железу (это одним файлом - там странице выше есть то же самое из нескольких раздельных файлов)
https://web.archive.org/web/20080208141 ... Manual.pdf
ну и чего там еще интересного найдете
Re: Вопросы начинающих PIC ASM
Это, как его там, макрокоманды? Оно само ассемблируется в последовательность команд? По примеру SKPZ, например, в пару bittest & goto? То есть так прямо в листинге пишется?КРАМ писал(а):1<<4 означает сдвиг единицы влево на 4 разряда
BOB51, спасибо, прочешу
Re: Вопросы начинающих PIC ASM
это вычисляет сам компилятор
почитаете в руководстве по ассемблеру

почитаете в руководстве по ассемблеру
Re: Вопросы начинающих PIC ASM
Да уж, качественные переводы... Половина этого у меня есть. Давно замечал, а тут вот прямо целый раздел отсутствует, в mpasm-rus аппендикс Б из английской версии пропущен, там где описываются сокращения SKPXX, SETXX, NEGF и т.п. И он не древний, свежее оригинала по дате. Дела давно минувших дней, больше 20 лет прошло.
Раздел "MPASM Arithmetic Operators", ввиду недостаточности описания, понимаю только по догадкам и багажу советского образования))
Вот это не понимаю:
Надо сделать И над W и константой. Как преобразовывается в константу? Сначала в скобках, ИЛИ правое или левое? Что сдвигается-то в скобках? Во что эту конструкцию развернёт ассемблер?
Или ткните носом, где это описано, пж-ста.
Раздел "MPASM Arithmetic Operators", ввиду недостаточности описания, понимаю только по догадкам и багажу советского образования))
Вот это не понимаю:
Код: Выделить всё
andlw (1<<4)||(1<<5) ;only want bits 4 and 5Код: Выделить всё
(1<<4)||(1<<5)Или ткните носом, где это описано, пж-ста.
Re: Вопросы начинающих PIC ASM
Никогда мне не нравилась запис типа
Пример:
равно
если хочется shift
Обрати внимание на оператор ИЛИ Есть || - логический, а есть и | побитовый
Таким образом код
Код: Выделить всё
movlw (1<<4)||(1<<5)Код: Выделить всё
movlw (~(((1<<7) | (1<<6)) ^ ((1<<7) | (1<<6))))+1Код: Выделить всё
movlw 0x00yor писал(а):Надо сделать И над W и константой. Как
Код: Выделить всё
movlw 0xff
andlw b'00110000'Код: Выделить всё
movlw 0xff
andlw (1<<4) | (1<<5) ;only want bits 4 and 5Таким образом код
Код: Выделить всё
movlw 0xff
andlw (1<<4)||(1<<5) ; W=0x01
movlw 0xfe
andlw (1<<4)||(1<<5) ; W=0x00
movlw 0xfe
andlw (1<<4)| (1<<5) ; W=0x30
Re: Вопросы начинающих PIC ASM
Не скажу, что стало понятно. Наоборот, ещё больше путаницы. Не могу проследить причины и следствия. Они тут точно есть?
Re: Вопросы начинающих PIC ASM
????????yor писал(а):Не могу проследить причины и следствия. Они тут точно есть?
Не понимаю
Re: Вопросы начинающих PIC ASM
Я спросил: Как преобразовывается в константу?
Это ответ:??? Возникают вопросы: откуда FF и причём тут вообще movlw и почему оба бита, когда ИЛИ?
Просьба объяснять как процессору, который не понимает недоговорок)) Так это где-то описано? Откуда эти знания?
Код: Выделить всё
(1<<4)||(1<<5)Это ответ:
Код: Выделить всё
movlw 0xff
andlw b'00110000'Просьба объяснять как процессору, который не понимает недоговорок)) Так это где-то описано? Откуда эти знания?
Re: Вопросы начинающих PIC ASM
Попытаюсь.
Откуда он знает что там константа? movlw, andlw и т.д. требуют константу.
Как компилятор вычисляет выражение (1<<4)||(1<<5) - ЛОГИЧЕСКОЕ ИЛИ
1. сдвигает 1 на 4 вправо = 00010000
2. сдвигает 1 на 5 вправо = 00100000
3. выполняет ЛОГИЧЕСКОЕ ИЛИ
- принято если операнд, переменная равна 0 то FALSE (ложь)
в притивном случае TRUE (истина)
00010000 <> 0 TRUE 1
00100000 <> 0 TRUE 1
TRUE || TRUE = TRUE = 1
Таким образом компилятор на место (1<<4)||(1<<5) ставить 0x01
и дальше вся ваша логика идет к .....
Как компилятор вычисляет выражение (1<<4)|(1<<5) - ПОБИТОВОЕ ИЛИ
1. сдвигает 1 на 4 вправо = 00010000
2. сдвигает 1 на 5 вправо = 00100000
3. выполняет ПОБИТОВОЕ ИЛИ
00010000 | 00100000 = 00110000 = 0x30
что тебе и нужно по логике ...
FF & 0x01 = 0х01
FE & 0x01 = 0х00
FF & 0x30 = 0x30 - что тебе нужно
В компиляторе есть "калкулятор" вычисляющий константы.yor писал(а):Как
Код:
(1<<4)||(1<<5)
преобразовывается в константу?
Откуда он знает что там константа? movlw, andlw и т.д. требуют константу.
Как компилятор вычисляет выражение (1<<4)||(1<<5) - ЛОГИЧЕСКОЕ ИЛИ
1. сдвигает 1 на 4 вправо = 00010000
2. сдвигает 1 на 5 вправо = 00100000
3. выполняет ЛОГИЧЕСКОЕ ИЛИ
- принято если операнд, переменная равна 0 то FALSE (ложь)
в притивном случае TRUE (истина)
00010000 <> 0 TRUE 1
00100000 <> 0 TRUE 1
TRUE || TRUE = TRUE = 1
Таким образом компилятор на место (1<<4)||(1<<5) ставить 0x01
и дальше вся ваша логика идет к .....
Как компилятор вычисляет выражение (1<<4)|(1<<5) - ПОБИТОВОЕ ИЛИ
1. сдвигает 1 на 4 вправо = 00010000
2. сдвигает 1 на 5 вправо = 00100000
3. выполняет ПОБИТОВОЕ ИЛИ
00010000 | 00100000 = 00110000 = 0x30
что тебе и нужно по логике ...
чтобы показать тебе как работают логическое и побитовое ИЛИ нужно вставить что-то в регистре W.yor писал(а):Возникают вопросы: откуда FF
FF & 0x01 = 0х01
FE & 0x01 = 0х00
FF & 0x30 = 0x30 - что тебе нужно
Re: Вопросы начинающих PIC ASM
Понятно, спасибо. Вопрос удобства оставим за скобками обсуждения, это только для наглядности в ущерб удобству.


