Главная страница Комбинированное использование портов в листингах 4.1 и 4.2 вам предлагаются две версии програм ♦ быстрая версиятребует 35 ячеек памяти и исполняется за 37 мандных циклов; ♦ компактная версия требует 16 ячеек памяти и исполняется за 7 командный цикл. Перемножаемые числа задаются переменными mulplr и mulcntj Результат будет предоставлен в двух байтах H byte и L byi:e, где Н Ьу te - старший байт произведения. Листинг 4.1 *♦* ****♦******♦*******♦♦ ************************* **************************♦** Умножение 8x8 битов (компактная версия). ************ **************************************************************** (, Множитель должен быть загружен в переменную mulplr. Множимое должно быть загружено в переменную mulcnd. Результат помещается в байты H byte и L byte. Показатели: объем программной памяти: 15; количество циклов: 71; объем используемого ОЗУ: 0. программа соответствует инструкции по применению AN526 фирмы Microchip. ************* ******* ************************♦********************************
include mpreg.h
rrf H byte,Same ; rrf L byte,Same ; decfsz count ; goto loop ; retlw 0 ; ****************************************************************************** Тестовая программа. .tttt************************************************* ******************* iain movlw movwf movlw movwf mulplr OF mulcnd call mpy S Множитель равен OFF. Множимое равно OFF. Результат OFF * OPF = FE01 помещается в H byte и L byte. self goto self org 01FF goto main Листинг 4.2 **************************************************************************** Умножение 8x8 битов (быстрая версия). ********************** *********<, *****************************************< Множитель должен быть загружен в переменную mulplr. Множимое должно быть загружено в переменную mulcnd. Результат помещается в байты H byte и L byte. Показатели: объем памяти: 35; количество циклов: 37; объем используемого ОЗУ: 0. Программа соответствует инструкции по применению AN526 фирмы Microchip. ***********************♦************ ♦*********************** *************< lend EQU 09 ; Множимое. Iper EQU 10 ; Множитель. H byte EQU 12 L byte EQU 13 ; Старший байт результата. ; Младший байт результата. include mpreg.h Определение макроса сложения и сдвига вправо.********************* mult MACRO bit ; Начало макроса, btfsc mulplr, bit addwf H byte, Same rrf H byte, Same rrf L byte, Same BJDM ; Конец макроса. ;.********.****** Начало умножения ********************************** mpy F clrf H byte clrf L byte movf mulcnd.w bcf STATUS.CARRY; Множимое помещается в регистр W. Сброс переноса. mult О mult 1 mult 2 mult 3 mult 4 mult 5 mult 6 mult 7 retlw 0 ********************************************* ; Тестовая программа. ****♦* ***** ******* ***♦***♦****♦♦****♦******************************
; Результат OFF * OFF = FE01 ; помещается в H byte и L byte. 00oe и беззнаковое умножение Зарядных чисел подпрограмма вычисляет произведение двух 16-разрядных чи-формирует 32-разрядный результат. Подпрограмма использует jjoMCHOCTH условного ассемблирования, имеющиеся в ассемблере JJpALC фирмы Microchip. Для получения беззнакового варианта ум-дия достаточно ассемблировать подпрограмму с командой: Signed equ FALSE д чтобы получать знаковое умножение, надо всего лищь заменить эту строку: Signed equ TRUE Две версии подпрограммы даны в листингах 4.3 и 4.4: быстрая версия: требует 240 ячеек программной памяти и выполняется за 233 командных цикла; Ф компактная версия: требует 33 ячейки программной памяти и выполняется за 333 командных цикла. Обе подпрограммы оперируют с двумя 16-разрядными числами, одно из которых образуют байты ACCaLO и АССаШ, а другое - АССЫО иАССЬНГ. Байты HI - старшие байты чисел (high). Результатразмеща-етсявчетырехбайтах ACCbHI, АССЫО, АССсНТи ACCcLO, где ACCbHI - старший байт произведения. Лиаинг4.3 ************** ttt*tll********t******************t,*r1ll******1,,,1,t,,,,,.,,j,.,,, Умножение 16x16 разрядов (компактная версия). ************************* ******** t ,t* ************ ******* Умножение АССЬ (16 битов) * АССа (16 битов) -> АССЬ.АССс (32 бита) (А) Первый операнд помещается в байты ACCaLO и АССаН! (16 битов). (8) Второй операнд помещается в байты ACCbLO и ACCbHI (16 битов). (С) Вызов - D mpy. (0) Результат помещается в байты ACCbHI, ACCbLO, ACCcHI. ACCcLO. Показатели: *ем памяти: 33 ячейки; личество циклов: 333. Показатели указаны для версии без учета знаков, т.е. с кoмaдoй Signed equ FALSE. Рограмма соответствует инструкции по применению AN526 фи)ны Microchip. ft **** *Jt*4* ********* k**ir************* ********
include mpreg.h org 0 SIGNED equ TRUE ; TRUE для версии с учетом знаков, ; FALSE для версии без учета знаков. Сложение с двойной точностью (АССЬ + АССа -> АССЬ). D add bcf Flags,CARRY ; Сброс переноса movf ACCaLO,w ; Сложение (АССЬ + АССа -> АССЬ). addwf ACCbLO ; btfsc STATUS,CARRY; Прибавление переноса. incf ACCbHI btfsc STATUS,CARRY bsf Flags,CARRY movf ACCaHI,w addwf ACCbHI btfsc Flags, CARRY bsf STATUS,CARRY retlw 0 Умножение с двойной точностью (16x16 -> 32). (АССЬ * АССа -> АССЬ, АССс): результат представляется в 32 битах, старшие разряды помещаются в байты АССЬ (ACCbHI, ACCbLO), младшие - в АССс (ACCcHI, ACCcLO). D mpyS ; Результат помещается в АССЬ(16 Msb) и АССс(16 Isb). F SIGNED call S.SIGN ENDIF
mloop call setup rrf ACCdHI ; Правый сдвиг. * **♦***** * Ш comf incf btfsc decf comf **************************************************************** ACCaLO ; Изменение знака (дополнение) ACCaLO. ACCaLO STATШ,Z bit ACCaHI ACCaHI
|
© 2000 - 2024 ULTRASONEX-AMFODENT.RU.
Копирование материалов разрешено исключительно при условии цититирования. |