Авторизация


...

Кто на сайте?

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

  • heydeeste

Статистика

-Посетители : 27976
-Материалы : 210

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

  Плата питания

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

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

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

 

 

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

Переделка оптического звукового выхода в коаксиальный

04-09-2014 Николай Викторов

Переделка оптического звукового выхода в коаксиальный

  Данная статья не относится напрямую к микроконтроллерам, здесь пойдет речь о переделывании звукового выхода из оптического в коаксиальный. Зачем это нужно? Как оказалось есть достаточно много различного оборудования не имеющих коаксиального выхода , а только оптический и есть (что странно...

Дополнительное программное обеспечение .

22-04-2011 Super User

Дополнительное программное обеспечение .

В начале этой главы рассмотрим отладку (проверку работоспособности конструкции) в специальной программе "Proteus", после этого кратко "пробежим"   те программы, которые наиболее популярны среди программистов и удобны в применении.  Наверно не стоит "загружать" голову полным описание ПО "Proteus", а рассмотрим...

Алгоритм вывода информации на экран телевизора

22-09-2011 Николай Викторов

Алгоритм вывода информации на экран телевизора

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

Применение Base64-кодирования в МК.

17-12-2012 Николай Викторов

Применение Base64-кодирования в МК.

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


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

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