Авторизация


...

Кто на сайте?

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

  • inmiernikwesto

Статистика

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

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

  Программатор Pic K-150

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

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

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

 

 

Однобайтное число не может быть равно 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

Мониторинг и удаленное управление оборудованием через Ethernet - NetCo…

11-01-2015 Николай Викторов

Мониторинг и удаленное управление оборудованием через Ethernet - NetComMK RL1

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

Простая программа для разводки печатных плат Sprint-Layout с дружеств…

03-06-2012 Игорь Безверхний

Простая программа для разводки печатных плат  Sprint-Layout с дружественным интерфейсом (часть 1)

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

ПП приема кода JVC с ИК пульта

22-05-2011 Super User

ПП приема кода JVC с ИК пульта

Один из авторов этой статьи столкнулся с проблемой поиска оригинального пульта JVC-RM362… Удавалось найти только китайские пульты, которые не удовлетворяли требованиям… Зато необходимый оригинальный пульт был найдет у второго автора данной статьи и было решено отсканировать его сигналы, а затем...

Разлочка автонавигатора Prestigio GeoVision 5300.

16-12-2012 Алексей

Разлочка автонавигатора Prestigio GeoVision 5300.

Хочется надеяться что эта статья положит начало целому циклу статей по связке микроконтроллер-WinCE. В частности использовать портативное устройство для вывода различного рода информации, например, связать логический анализатор с WinCE. В свое время мной был куплен автонавигатор Prestigio GeoVision 5300. Естественно целью...


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

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