Авторизация


...

Кто на сайте?

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

  • oegerwilm

Статистика

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

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

  106ЛБ1

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

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

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

 

 

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

Контакты

14-08-2014 Super User

Контакты

      По вопросам рекламы на сайте   -  reklama@chipmk.ru   Реклама на сайте chipmk.ru размещается только по тематической направленности ресурса, т.е все , что связано с микроконтроллерами и радиоэлектроникой. Это могут быть различные организации, магазины и др., так или иначе с связанные с...

Обработка клавиатуры в прерывании

03-07-2012 Александр Милевский

Обработка клавиатуры в прерывании

   Продолжение статьи описанный на сайте chipmk.ru«Вариант создания клавиатуры без прерываний»Вариант без прерываний не оптимален, так как требует ждать время фиксированных задержек, программа ничего полезного в это время не делает.Для многих программ это не критично, но так делать просто неудобно...

Аппарат контактной сварки

23-06-2012 Андрей

Аппарат контактной сварки

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

Варианты записи конфигурационных битов

30-07-2011 Анатолий

Варианты записи конфигурационных битов

Для выбора различных режимов работы микроконтроллера используются биты конфигурации. В микроконтроллерах среднего семейства биты конфигурации располагаются в регистре по адресу 2007h. Регистр этот несколько необычен, так как имеет в своем составе не 8, а 14 битов. Обращение к нему возможно...


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

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