Пример 11. Сложить десятичные двоично-кодированные числа, размещенные в А и R5:
ADD A, R5 ; двоичное сложение
DA A ; десятичная коррекция результата
Пример 12. Вычитание байтов. Данная операция может выполняться двумя способами: 1) перевести уменьшаемое как отрицательное в дополнительный код и выполнить операцию добавления; 2) перевести уменьшаемое в обратный код и произвести инверсию суммы.
Например, из данных в А необходимо отнять данные регистра R3. Вычитание выполняем по алгоритму:
А ¬
CPL A ; инверсия аккумулятора
ADD A, R3 ; добавление байтов
CPL A ; получение разности
Пример 13. Сложить два двоичных многобайтных числа. Оба слагаемых находятся в РПД, начиная из младшего байта. Начальный адрес слагаемых находится в R0 и R1, формат в R2. Результат размещают на месте первого слагаемого.
CLR С ; сбрасывание переноса
LOOP: MOV A,@R0 ; загрузка в аккумулятор; бегущего байта первого слагаемого
ADDC A,@R1 ; добавление байтов с учетом переноса
MOV @R0, A ; размещение байта результата
INC R0 ; смещение указателя
INC Rl ; смещение указателя
DJNZ R2, LOOP ; цикл, если не все байты просуммированы
Время суммирования составляет (1+7N) мкс, где N – длина в байтах.
Пример 14. Перемножить число в аккумуляторе на число 2х, где х ≤ 8 – значение в R6. Умножение на 2 заменяется арифметическим сдвигом аккумулятора и R0:
MOV R0,#0 ; сброс R0
CLR С ; сброс переноса
LI: RLC А ; сдвиг влево 16-разрядного данного в А и R0
ХСН А, R0
RLC A
ХСН А, R0
DJNZ R6, L1 ; цикл
Пример 15. Умножение (MUL). Выполняется для двух беззнаковых чисел, которые находятся в регистрах А и В. После выполнения операции младший байт произведения размещается в А, а старший – в В.
Умножение числа любого формата на константу 168. Число размещено в РПД, адрес младшего байта находится в R0. Формат числа в байтах задан в R2.
MOV А,#00Н ; сброс аккумулятора А
LOOP: ADD A,@R0 ; загрузка множимого
MOV B,#168D ; загрузка множителя
MUL AB ; перемножение
MOV @R0, A ; запись младшего байта частичного произведения
INC R0 ; прирост адреса
MOV А, В ; пересылка старшего байта частичного произведения в аккумулятор А
ХСН A,@R0 ; предшествующее формирование очередного байта произведения
JNZ R2, LOOP ; цикл, если не все байты начального числа перемноженные на константу.
Полученный результат находится на месте начального числа и занимает в РПД на 1 байт больше. Время вычисления произведения составляет (1+13N) мкс, где N – длина числа в байтах.
Пример 16. Деление (DIV) – делится содержимое аккумулятора на значение в В. После деления в А находится целая часть, в В-остаток. Команда может быть использована для быстрого преобразования двоичного числа в двоично-десятичный формат.
Программа переводит двоичное число, находящееся в аккумуляторе, в двоично-десятичный код, который может быть трехразрядным (в десятичной системе счисления). В этом случае число сотен будет размещено в
R0,
десятки и единицы – соответственно в А и В.
MOV B,#100D ; (B) ¬ 100 для вычисления числа сотен в числе
DIV AB ; в А є число сотен (то есть старшая цифра)
MOV R0, A ; пересылка в R0 старшей цифры
ХСН А, В ; пересылка остатка от деления входного числа в А Перейти на страницу: 1 2
Другое по теме:
Модернизация беспроводной сети на базе технологии WiMAX стандарта 802.16d до стандарта 802.16e Aperto PacketMAX - первая система широкополосного беспроводного радиодоступа класса WiMAX, сертифицированная WiMAX-форумом. Система ориентирована на передачу услуг triple play (данные, видео, голос) с высоким качеством. Оборудование ...