|
Главная страница > Обзоры по типам > Микроконтроллеры > 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 *
|
|
|