Поиск по сайту:

 


По базе:  

микроэлектроника, микросхема, микроконтроллер, память, msp430, MSP430, Atmel, Maxim, LCD, hd44780, t6963, sed1335, SED1335, mega128, avr, mega128  
  Главная страница > Обзоры по типам > Микроконтроллеры > HC08 > Примеры

реклама

 




Мероприятия:




Пример кодов с использованием команды DIV

* 1) Целочисленное деление 8/8 > 8-разрядное целочисленное частное
* Выполняется целочисленное, без знаков, деление 8-разрядного делимого в A на
* 8-разрядный делитель в X. 
* Регистр H должен быть очищен. Частное помещается в A, остаток помещается в H.
*

   Метка       Операция   Операнд           Комментарий

               ORG        $50               ; Адресное пространство RAM
   DIVID1      RMB        1                 ; Хранение делимого
   DIVISOR1    RMB        1                 ; Хранение делителя
   QUOTENT1    RMB        1                 ; Хранение остатка
*
               ORG        $6E00             ; Адресное пространство ROM/EPROM
               LDA        DIVID1            ; Загрузка делимого
               CLRH                         ; Очистка старшего байта делимого
               LDX        DIVISOR1          ; Загрузка делителя
               DIV                          ; Деление 8/8
               STA        QUOTENT1          ; Сохранение результата, остаток в H
*
*
* 2) Целочисленное деление 8/8 > 8-разрядное целое число и 8-разрядное дробное частное. 
* Выполняется целочисленное, без знака, 8-разрядного делимого а A на 8-разрядный делитель в X. H должен 
* быть очищен. Частное размещается в A, остаток размещается в H. В дальнейшем остаток может быть 
* дополнительно разложен выполнением дополнительной команды DIV, как это показано ниже. Десятичная 
*точка частного будет находиться между битами 7 и 8.
 
   Метка       Операция  Операнд           Комментарий

               ORG       $50               ; Адресное пространство RAM
   DIVID2      RMB       1                 ; Хранение делимого
   DIVISOR2    RMB       1                 ; Хранение делителя
   QUOTENT2    RMB       2                 ; Хранение остатка
*
               ORG       $6E00             ; Адресное пространство ROM/EPROM
               LDA       DIVID2            ; Загрузка делимого
               CLRH                        ; Очистка старшего байта делимого
               LDX       DIVISOR2          ; Загрузка делителя
               DIV                         ; Деление 8/8
               STA       QUOTENT2          ; Сохранение результата, остаток в H
               CLRA
               DIV                         ; Разложение остатка
               STA       QUOTENT2+1
*
*
*
* 3) Деление дробных чисел 8/8 > 16-разрядное дробное частное
*Выполняется деление двух дробных чисел, без знака, при котором 8-разрядное делимое, расположенное в H, 
* делится на 8-разрядный делитель, расположенный в X. Аккумулятор должен быть очищен. Частное
* размещается в A и остаток в H. В дальнейшем остаток может быть дополнительно разложен выполнением
* дополнительной команды DIV, как это показано ниже. Принято, что десятичная точка размещена одинаково
* и в делимом и в делителе. В частном десятичная точка находится слева от старшего бита. Переполнение 
* будет происходить тогда, когда делимое больше или равно делителю 
* Частное является двоичной взвешенной дробью, без знака, в диапазоне от $00 до $FF (0,9961)
*
   Метка      Операция  Операнд      Комментарий

               ORG       $50         ; Адресное пространство RAM
   DIVID3      RMB       1           ; Хранение делимого
   DIVISOR3    RMB       1           ; Хранение делителя
   QUOTENT3    RMB       2           ; Хранение остатка
*
               ORG       $6E00       ; Адресное пространство ROM/EPROM
               LDHX      DIVID3      ; Загрузка делимого в H (и делителя в X)
               CLRA                  ; Очистка младшего байта делимого
               DIV                   ; Деление 8/8
               STA       QUOTENT3    ; Сохранение результата, остаток в H
               CLRA
               DIV                   ; Разложение остатка
               STA       QUOTENT3+1
*
*
*
* 4) Полное целочисленное деление 16/8
* Данный алгоритм выполняет эквивалент длинного деления
* Вначале выполняется деление 8/8 (возможно без переполнения)
* Следующее деление 16/8 использует остаток от предшествовавшего деления (возможно без переполнения).
*Команда DIV не повреждает делитель и оставляет остаток в H - в оптимальной позиции для правильного
* выполнения операции деления. Алгоритм может быть расширен до любой точности делимого выполнением
* дополнительных операций деления.
* Все это, включая разложение остатка от деления в дробный результат, показано ниже.
*

    Метка      Операция  Операнд       Комментарий

                ORG      $50           ; Адресное пространство RAM
   DIVIDENT4    RMB      2             ; Хранение делимого
   DIVISOR4     RMB      1             ; Хранение делителя
   QUOTENT4     RMB      3             ; Хранение остатка
*
                ORG      $6E00         ; Адресное пространство ROM/EPROM
                LDA      DIVIDENT4     ; Загрузка старшего байта делимого
                                       ; в младший регистр делимого
                CLRH                   ; Очистка H (старшего регистра делимого)
                LDX      DIVISOR4      ; Загрузка делителя
                DIV                    ; Целочисленное деление 8/8 [A/X -> A; r ->H)
                STA      QUOTENT4      ; Сохранение результата (старший байт 
                                       ; результата законченной операции. Остаток 
                                       ; в H (младший регистр делимого)
                LDA      DIVIDENT4+1   ; Загрузка младшего байта делимого в 
                                       ; младший регистр делимого
                DIV                    ; Целочисленное деление16/8 [H:A/X ->A;
                                       ; r ->H]
                STA      QUOTENT4+1    ; Сохранение результата (младший байт 
                                       ; результата законченной операции. 
                CLRA                   ; Очистка младшего байта делимого 
                                       ; (подготовка к дробному делению)
                DIV                    ; Разложение остатка
                STA      QUOTENT4+2
*
*
* 5) Ограниченное целочисленное деление 16/8
* Хотя команда DIV будет выполнять целочисленное деление 16/8, она может сгенерировать только 8-разрядное 
* частное. Таким образом возможно переполнение частного, если пользователь не будет знать границы 
* делимого и делителя
*

    Метка      Операция  Операнд       Комментарий

               ORG       $50           ; Адресное пространство RAM
    DIVID5     RMB       2             ; Хранение делимого
    DIVISOR5   RMB       1             ; Хранение делителя
    QUOTENT5   RMB       1             ; Хранение остатка
*
               ORG       $6E00         ; Адресное пространство ROM/EPROM
               LDHX      DIVID5        ; Загрузка делимого в H:X 
               TXA                     ; Перемещение X в A
               LDX       DIVISOR5      ; Загрузка делителя в X
               DIV                     ; Целочисленное деление 16/8 
               BCS       ERROR5        ; Переполнение
               STA       QUOTENT5       ; Сохранение результата 
  ERROR5       EQU       *





 
Впервые? | Реклама на сайте | О проекте | Карта портала
тел. редакции: +7 (995) 900 6254. e-mail:info@eust.ru
©1998-2023 Рынок Микроэлектроники