Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка по ТСА.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
914.94 Кб
Скачать

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

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

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

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

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

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

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

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