Главная страница  Комбинированное использование портов 

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 [ 23 ] 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40

*******t*t*********ttt**1,** *******************t****4r****ii**i>*t******i4

Тестовая программа.

*******in,***************t**t**iin,mi,***i,tt*****mn4i*t***t**********iri,**t

Загрузка констант в байты АССа и АССЬ для тестирования.

self

movlw 1

movwf ACCaHI

movlw OFF

movwf ACCaLO

movlw 07F

movwf ACCbHI

movlw OFF

movwf ACCbLO

call D divF

goto self

org PIC54 LIST goto

Загрузка константы 01FF в байт АССа.

Загрузка константы 7FFF в байт АССЬ.

Остаток помещается в байт АССс. Здесь АССЬ = 0040 и АССс = 003F.

р=16с54 main

Сложение и вычитание 16-раэрядных чисел

Эта программа осуществляет сложение и вычитание двух 16-раэрядных чисел и возвращает 16-разрядный результат. Она может использоваться другими арифметическими программами. Программа представлена в листинге 4.7 и имеет следующее показатели:

♦ сложение требует 7 ячеек программной памяти и выполня ется за 8 командных циклов;

♦ вычитание требует 14 ячеек памяти и выполняется за 17 ко мандных циклов.

Операнды размещаются в байтах ACCbHI, ACCbLO и ACCaHI, ACCaLO, при вычитании вычисляется разность байтов АССЬ и АССа. Результат размещается в байтах АССЬНГи ACCbLO.

Листинг 4.7

****♦ ** * *********************************************************************

Сложение и вычитание с двойной точностью.

*******************************************************************************

Сложение: АССЬ (16 бит) + АССа (16 бит) -> АССЬ (16 бит).

(A) Первый операнд помещается в байты ACCaLO и ACCaHI (16 бит).

(B) Второй операнд помещается в байты ACCbLO и ACCbHI (16 бит).

(C) Вызов D add.

. (D) результат помещается в байты ACCbLO и ACCbHI (16 бит).

: {{оказатели:

: размер памяти: 07;

: количество циклов: 08.

j* ******************************************************************************

!*Вичитанйе: АССЬ (16 бит) - АССа (16 бит) -> АССЬ (16 бит). I (А) Первый операнд помещается в байты ACCaLO и ACCaHI (16 бит). (Б) Второй операнд помещается в байты ACCbLO и ACCbHI (16 бит.) ! (С) Вызов D add.

. (0) Результат помещается в байты ACCbLO и ACCbHI (16 битов).

I Показатели:

; объем памяти: 14;

количество циклов: 17.

I Программа соответствует инструкции по применению AN526 фирмы Microchip.

*********************************************************************************

ACCaLO

ACCaHI

ACCbLO

ACCbHI

include mpreg.h org 0

,***********************************************************t******t**************

; Вычитание с двойной точностью (АССЬ - АССа -> АССЬ).

flsub call neg A ; Отрицание байта АССа, затем сложение.

I*********************************************************************************

Сложение с двойной точностью (АССЬ + АССа -> АССЬ).

ladd movf ACCaLO.w

addwf ACCbLO ; Прибавление младшего байта,

btfsc STATUS,CABRY; Добавление переноса,

incf ACCbHI

movf ACCaHI,w

addwf ACCbHI ; Прибавление старшего байта,

retlw О

-A comf ACCaLO ; Меняем знак байта АССа (-АССа -> АССа).

incf ACCaLO

btfsc STATUS, Z bit

decf ACCaHI



comf ACCaHI retlw 0

Тестовая программа. ; Загрузка констант в АССа и АССЬ для тестирования.

Загрузка 01FF в АССа.

self

movlw

movwf

ACCaHI

movlw

movwf

ACCaLO

movlw

movwf

ACCbHI

movlw

movwf

ACCbLO

retlw

call

loadAB

call

D add

call

loadAB

call

D sub

goto

self

PIC54

goto

main

Загрузка 7FFF в АССЬ.

АССЬ + АССа -> АССЬ. Здесь АССЬ = 81FE. АССЬ - АССа ->. АССЬ. Здесь АССЬ = 7Е00.

Операции с плавающей запятой

Эти программы являются наиболее сложными даже для программистов, уже привычных к ассемблеру. Напомним, что число с плавающей запятой представляется мантиссой и порядком (показателем степени).

В предложенных программах предполагается, что операнды кодируются следующим образом: мгштисса - шестнадцатью битами с учетом знака и порядок - восьмью битами с учетом знака.

Алгоритмы программ сложения, вычитания и умножения схематично показаны на рис. 4.2 и 4,3.

Эти программы оптимизированы (что видно из листинга 4.8) р по объему кода, так и по времени выполнения. Программы заниМ -У ют следующий объем памяти:

Ночало бычитания

I Дополнение АССА до 2 (-ACCA)

Начало сложения )


q Конец

ОрИТАА

сложения и вычитания чисел с пловоющей запятой



Рис. 4.3

Q Ночало У

[ Определение зноко резулыпото


Добобление множимого к проме>(уточному результату е АССВ

1 Сдбиг бпрабо АСОВ

ТЕМР-1

-TEMP

1 ЕХРА+ЕХРВ- ЕХРВ

<.3нак +

или - 11>-

Дополнение до 2 АССВ (-АССВ)

Нормолизоция АССВ

Конец )

Алгоритм умножения чисеп с плавоющей зопятой

сложение - 55 ячеек; вычитание-61 ячейку; Ф умножение - 102 ячейк);

Количество командных циклов, в течение которых выполняются анные программы, не указывается, поскольку они зависят от раз-рл обрабатываемьЕХ чисел.

Программы использ}тот в качестве мантиссы одного из операндов байты ACCaHI, ACCaLO, ав качестве порядка - байт ЕХРа. Соответственно для второго операнда - байты ACCbHI, ACCbLO и EXPb. Мантисса результата предоставляется в байтах ACCbHI и ACCbLO, порядок - в ЕХРЬ. При вычитании вычисляется разность байтов АССЬ и АССа. При умножении возможно, хотя это не было целью, получить мантиссу форматом в 32 бита, для чего достаточно ассемблировать программу либо со строкой: node 16 equ TRUE либо

Hode 16 equ FALSE

32-разрядная мантисса размещается в регистрах ACCbHI, ACCbLO, ACCcHI и ACCcLO, а 8-разрядный порядок - в ЕХРЬ.

Лиаинг 4.8

*********************************************************************************

Сложение, вычитание, умножение с плавающей запятой.

Сложение: АССЬ (16 бит) + АССа (16 бит) -> АССЬ (16 бит).

(A) Мантисса первого операнда помещается в байты ACCaLO и ACCaHI (16 бит), порядок - в ЕХРа (6 бит).

(B) Мантисса второго операнда помещается в байты ACCbLO и ACCbHI (16 бит), порядок - в ЕХРЬ (8 бит).

(C) Вызов F add.

(D) Мантисса результата помещается в байты ACCbLO и ACObLHI (16 бит), порядок - в ЕХРЬ (6 разрядов).

Объем занимаемой памяти: 55 ячеек.

*********** tttt ****** t*i,ti,ttti,tt*i,***t************ii*************ii****************

Вычитание: АССЬ (16 битов) - АССа (16 битов) -> АССЬ (16 бит) (А) Мантисса первого операнда помещается в байты ACCaLO и ACCaHI t16 бит), порядок - в ЕХРа (8 бит).



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 [ 23 ] 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40

© 2000 - 2024 ULTRASONEX-AMFODENT.RU.
Копирование материалов разрешено исключительно при условии цититирования.