Партнерка на США и Канаду по недвижимости, выплаты в крипто

  • 30% recurring commission
  • Выплаты в USDT
  • Вывод каждую неделю
  • Комиссия до 5 лет за каждого referral

Входными параметрами программы Прогр. 5.3, алгоритм которой приведен ниже, на Рис. 5.1 (стр. 60), являются следующие регистры: регистр D – множимое, регистр E – множитель. Результат записывается в регистровую пару BC.

Прогр. 5.3. Программа умножения двух однобайтных чисел с получением двухбайтного результата.

MVI D, A1h

;Запись в D множимого.

MVI E, 9Bh

;Запись в E множителя.

LXI B, 0000h

;Очистить регистры B и C.

MVI L, 08h

;Загрузка счетчика.

LAB_1:

MOV A, E

;Множитель в Акк.

RAR

;Сдвиг анализируемого бита в триггер C.

MOV E, A

;Возврат в E сдвинутого множителя.

JNC LAB_2

;Если бит множителя равен нулю, то идти

; на LAB_2.

MOV A, B

;Загрузка в Акк. старшей частичной суммы.

ADD D

;Прибавление к нему множимого.

MOV B, A

;Возврат в B старшей частичной суммы.

LAB_2:

MOV A, B

;Загрузка в Акк. старшей частичной суммы.

RAR

;Сдвиг старшей частичной суммы вправо

; (младший бит в C).

MOV B, A

;Возврат в B старшей частичной суммы.

MOV A, C

;Загрузка в Акк. младшей частичной суммы.

RAR

;Сдвиг младшей частичной суммы вправо

; (C в старший бит).

MOV C, A

;Возврат в C младшей частичной суммы.

DCR L

;Декрементация счетчика.

JNZ LAB_1

;Если разряд не последний, то идти на LAB_1.

HLT

;Выход из программы.

6.1.3.  Деление чисел.

Деление двоичных чисел, как и чисел, представленных в любой другой системе счисления, основывается на последовательном вычитании делителя из делимого и остатков от деления. Однако двоичное деление реализуется проще, т. к. использование только двух цифр (0, 1) исключает в каждом цикле деления необходимость определения числа делителей, содержащихся в текущем значении делимого или остатка (достаточно только сравнить их). Схема алгоритма деления однобайтных чисел (целых без знака) со сдвигом делимого (или остатков) влево приведена ниже, на Рис. 5.2 (стр. 62). Реализует данный алгоритм программа Прогр. 5.4.

НЕ нашли? Не то? Что вы ищете?

При делении делитель вычитается из все большей части делимого и после каждого вычитания анализируется бит заема (C). Если делитель больше той части делимого, из которой он вычитается, то C = 1. В этом случае цифра частного равна нулю, и делитель суммируется с результатом вычитания для восстановления исходной части делимого (остатка). Если при вычитании заема не возникает (C = 0), то цифра частного равна 1, а результат используется
как новое промежуточное делимое.

Рис. 5.1. Алгоритм работы программы умножения двух однобайтных чисел с получением двухбайтного результата.

Входными параметрами данной программы являются делимое (в регистре Е) и делитель (в регистре D), а выходными параметрами – частное (в регистре Н) и остаток (в регистре С). Перед началом выполнения программы признак переноса C должен быть сброшен.

Прогр. 5.4. Программа деления двоичных чисел.

MVI E, A9h

;Загрузка в E делимого.

MVI D, 54h

;Загрузка в D делителя.

LXI H, 0008h

;Загрузить счетчик битов (L) и очистить

; регистр H.

MVI C, 00h

;Очистить регистр промежуточного делимого.

LAB_1:

MOV A, E

;Загрузить делимое в Акк.

RAL

;Сдвинуть старший бит в разряд С.

MOV E, A

;Возвратить делимое в регистр E.

MOV A, C

;В Акк. промежуточное делимое из регистра С.

RAL

;Сдвинуть разряд С в младший бит Акк.

SBB D

;Вычесть из содержимого Акк. делитель

; с учетом заема.

JNC LAB_2

;Если результат положительный, то идти

; на LAB_2 (C = 0).

ADD D

;Сложить содержимое регистра D с Акк.

LAB_2:

MOV C, A

;Возвратить промежуточное делимое в

; регистр С.

CMC

;Инвертировать разряд С.

MOV A, H

;Запись цифры частного.

RAL

MOV H, A

DCR L

;Проверены ли все 8 разрядов.

JNZ LAB_1

;Если нет, продолжать.

HLT

;Выход из программы.

6.1.4.  Вычисление специальных функций.

Для вычисления специальных функций (, , , , , и пр.) применяются специальные алгоритмы. Функции , , можно вычислить, воспользовавшись их разложением в ряд [6] (см. Табл. 5.1, стр. 63). Число членов ряда определяется исходя из условия получения требуемой точности. Для вычисления функции с точностью до целых чисел можно применить алгоритм, основанный на том, что квадрат числа можно определить сложением последовательности нечетных чисел (см. Табл. 5.2, стр. 63).

Из приведенного примера видно, что какое число необходимо возвести в квадрат, такое количество последовательных нечетных чисел, начиная с 1, и необходимо сложить.

Вычисление специальных функций по приведенным выражениям занимает длительное время и обеспечивает низкую точность. Это обусловлено небольшой длиной машинного слова и ограниченным быстродействием МП. Поэтому, в тех случаях, когда ставятся жесткие условия по быстродействию и точности, применяется вычисление функций с помощью таблиц. Программа Прогр. 5.5 (см. ниже) иллюстрирует это.

Программа Прогр. 5.5 определяет квадрат чисел от 0 до 10 включительно. Входной параметр программы – число x. Оно записывается в регистр L. Выходной параметр – значение x в регистре Н.


Рис. 5.2. Алгоритм программы де­ления двоичных чисел.

Табл. 5.1. Примеры разложения некоторых элементарных функций в степенной ряд (ряд Тейлора).

Табл. 5.2. К вычислению квадратного корня с точностью до целых чисел.

Число

Сумма нечетных чисел

Результат

1

1

= 1

2

1 + 3

= 4

3

1 + 3 + 5

= 9

4

1 + 3 + 5 + 7

= 16

5

1 + 3 + 5 + 7 + 9

= 25

Прогр. 5.5. Программа для определения квадрата чисел от 0 до 10 включительно.

LAB_1:

MVI H, 00h

;Очистить регистр Н.

LXI D, 0100h

;Загрузить начальный адрес таблицы.

DAD D

;Получить адрес элемента.

MOV H, M

;Загрузить его в регистр Н.

JMP LAB_1

;Безусловный переход для организации

; вечного цикла.

HLT

;Выход из программы.

;Таблица квадратов целых чисел:

; 0100 – 00h 0106 – 24h

; 0101 – 01h 0107 – 31h

; 0102 – 04h 0108 – 40h

; 0103 – 09h 0109 – 51h

; 0104 – 10h 010A – 64h

; 0105 – 19h

6.2.  Задания для самоподготовки

1.  Изучить подгруппу арифметических команд МП.

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14