Главная страница Комбинированное использование портов *******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. *********************************************************************************
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
Загрузка 7FFF в АССЬ. АССЬ + АССа -> АССЬ. Здесь АССЬ = 81FE. АССЬ - АССа ->. АССЬ. Здесь АССЬ = 7Е00. Операции с плавающей запятой Эти программы являются наиболее сложными даже для программистов, уже привычных к ассемблеру. Напомним, что число с плавающей запятой представляется мантиссой и порядком (показателем степени). В предложенных программах предполагается, что операнды кодируются следующим образом: мгштисса - шестнадцатью битами с учетом знака и порядок - восьмью битами с учетом знака. Алгоритмы программ сложения, вычитания и умножения схематично показаны на рис. 4.2 и 4,3. Эти программы оптимизированы (что видно из листинга 4.8) р по объему кода, так и по времени выполнения. Программы заниМ -У ют следующий объем памяти: Ночало бычитания I Дополнение АССА до 2 (-ACCA) Начало сложения ) q Конец ОрИТАА сложения и вычитания чисел с пловоющей запятой Рис. 4.3 Q Ночало У [ Определение зноко резулыпото
Нормолизоция АССВ Конец ) Алгоритм умножения чисеп с плавоющей зопятой сложение - 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 бит).
|
© 2000 - 2024 ULTRASONEX-AMFODENT.RU.
Копирование материалов разрешено исключительно при условии цититирования. |