Авторизация


...

Кто на сайте?

Сейчас 224 гостей и один зарегистрированный пользователь на сайте

  • heydeeste

Статистика

-Посетители : 22989
-Материалы : 209

Пользователь сайта продает...

  VM111

Пользователь сайта покупает...

Умножение константы 0xFFFF на байт

Автор: Александр Милевский Просмотров: 2831

 

 

Однобайтное число не может быть равно 0. Это проверялось до вычисления.  Если запустить стандартную, известную мне, процедуру умножения, то это от 100 до 200 машинных тактов Меня это не устраивало.

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

Забегу вперед, процедура на ассемблере заняла всего 7 тактов, что меня сильно порадовало.

Результат умножение двух байтного числа на однобайтное это максимум трехбайтная переменная. Назовем её REZYLTAT. Множитель – REG.

 Так как на ноль не умножаем. То  в REZYLTAT должно быть при умножении на 1 число 0x00FFFF. Если подумать, то просматривается простая закономерность. Для умножения надо вычесть 1 из REG  и переписать в старший байт REZYLTAT  и из младшего байта REZYLTAT вычесть это же число. Все. Очень просто. Вот текст.

; определим переменные 
REZYLTAT :3    
REG
; умножение  константы 0xFFFF на REG ( REG не равен 0)
       movlw  0xFF          ; запишем 0xFF
       movwf  REZYLTAT +1   ; в средний байт 
       movwf  REZYLTAT      ; в  младший байт
       decf   REG           ; отнимем 1 из множителя
       movf   REG,W         ; и запишем результат 
       movwf  REZYLTAT +2   ; в старший байт 
       subwf  REZYLTAT      ; отнимем из младшего байта
       return    

ну и полный вариант, REG любое число

; умножение  константы 0xFFFF на байт
       movf   REG,W         ; проверяем на нуль
       btfsc  STATUS,Z
       goto   ZERO          ; результат умножения ноль 
       movlw  0xFF          ; запишем 0xFF
       movwf  REZYLTAT +1   ; средний байт
       movwf  REZYLTAT      ; младший байт
       decf   REG           ; отнимем 1 из множителя
       movf   REG,W         ; и запишем результат 
       movwf  REZYLTAT +2   ; в старший байт
       subwf  REZYLTAT      ; отнимем из младшего байта
       return    
ZERO   clrf   REZYLTAT
       clrf   REZYLTAT+1
       clrf   REZYLTAT+2
       return

данный алгоритм отлично походит при умножении одного байта  на любую константу  0xFFF….FFF с минимальными изменениями текста программы

Случайные статьи....

Prev Next

Детектор напряжения в МК 18 серии.

09-08-2012 Super User

В микроконтроллерах 18 серии есть встроенные модули детектора напряжений.  У  одних , (к примеру тот же PIC18FXX2) встроенный модуль детектора ПОНИЖЕННОГО напряжения, у других (PIC18F25K20) модуль LVD улучшен и представлен как модуль  HLVD, позволяющий  обнаруживать еще и отклонения в сторону...

Таймер для коммутации 3-х фазного двигателя.

29-10-2016 Александр Милевский

Таймер для коммутации  3-х фазного двигателя.

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

Цикличный таймер задержки включения питания

24-07-2015 Super User

Цикличный таймер задержки включения питания

  В данной статье идет речь о циклическом таймере задержки питания для эррозионно – поршневых станков советского производства. И хотя таймер разрабатывался автором под конкретные задачи, тем не менее с успехом применим и в других проектах. Устройство выдает стабильной сигнал...

Простой таймер для кухни и не только…

27-12-2014 Иван Шевченко (R1ZK)

Простой таймер для кухни и не только…

 Применение таймера в быту очень удобно и не зря   многие производители встраивают таймер в различную бытовую технику. Что касается кухни, таймер незаменимая вещь и хотя в сети предоставлено достаточно много различных схем все они имеют свои особенности...  В данной статье пойдет...


Все права принадлежат ChipMK.ru. При копировании материала ссылка обязательна. 2011-2017 © ChipMK.ru

ChipMk.ru Яндекс.Метрика
PRCY.ru