Деление. Описание программы деления с плавающей точкой. Умножение и описание программы умножения

Страницы работы

Содержание работы

Деление.

Адрес

Код

Мнемокод

Комментарий

0800

3A 000B

LDA, 0B00h

Данные по адресу 0B00h à A.

0803

5F

MOV E, A

Поместить делимое в регистр E.

0804

3A 010B

LDA, 0B01h

Данные по адресу 0B01h à А.

0807

57

MOV D, A

Поместить делитель в регистр D.

0808

21 0800

LXI H, 0008h

Очистить регистр H и загрузить счётчик разрядов L.

080B

0E 00

MVI C, 00h

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

080D

7B

MOV A, E

Поместить делимое в А.

080E

17

RAL

Сдвинуть число в А влево на 1 разряд.

080F

5F

MOV E, A

Сохранить делимое в регистре E.

0810

79

MOV A, C

Загрузить в А промежуточное делимое.

0811

17

RAL

Сдвинуть число в А влево.

0812

92

SUB D

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

0813

D2 1708

JNC 0817h

Если нет займа (CY=0), то идти на 0817h

0816

82

ADD D

Иначе восстановить содержимое А.

0817

4F

MOV C, A

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

0818

3F

CMC

Инвертировать признак переноса.

0819

7C

MOV A, H

Поместить частное в А.

081A

17

RAL

Сдвинуть значение флага CY в младший разряд частного.

081B

67

MOV H, A

Сохранить частное в регистре Н.

081C

2D

DCR L

Уменьшить счётчик разрядов на 1.

081D

C2 0D08

JNZ 080Dh

Если проверены не все разряды, то продолжать (переход на 080Dh).

0820

7C

MOV A, H

Поместить частное в А.

0821

32 000B

STA 0B00h

Поместить частное по адресу 0B00h.

0824

79

MOV A, C

Поместить остаток в А.

0825

32 010B

STA 0B01h

Поместить остаток по адресу 0B01h.

0828

CF

RST

Завершить программу.

Описание программы деления с плавающей точкой. Этот быстрый способ деления известен в народе как деление столбиком, он проще, чем другой способ, где делитель просто вычитается из делимого.

Рассмотрим на примере деления числа 7 на 3:

01112=710; 00112=310

Первая команда 0800: 3A 000B (LDA, 0B00h) – поместить число (делимое (0111)) в регистр А из указанного адреса памяти.

Вторая команда 0803: 5F (MOV E, A) – переместить число (делимое (0111)) в регистр E из регистра A.

Третья команда 0804: 3A 010B (LDA, 0B01h) – поместить число (делитель (0011)) в регистр А из указанного адреса памяти.

Четвёртая команда 0807: 57 (MOV D, A) – переместить число (делитель (0011)) в регистр D из регистра A.

Пятая команда 0808: 21 0800 (LXI H, 0008h) – эта команда объединяет в себе две команды. С помощью косвенной адресации число 0008 помещается в регистры H и L. В регистр H будет записываться ответ, и поэтому его нужно очистить (00), а в регистр L помещается счётчик равный 08, так как программа деления имеет дело с двузначными числами в шестнадцатеричной системе, что равно восьмизначному числу в двоичной системе. Поэтому 08 – восемь разрядов в двоичной системе – восемь бит – один байт. В нашем примере для простоты используется четырёхзначное число.

С помощью регистровой адресации эту команду можно расписать как две отдельные (очистить регистр H и поставить число 08 в регистр L), но в этом случае она будет занимать минимум 4 слова (26 00 (MVI H, 00h - Передать непосредственно следующие данные 00h в H); 2E 08 (MVI L, 00h - Передать непосредственно следующие данные 00h в H)), а при объединении операций используется косвенная адресация, и команда занимает 3 слова (21 0800).

Шестая команда 080B: 0E 00 (MVI C, 00h) – поместить число 00 в регистр C, то есть его очистить. В регистре C находится так называемое промежуточное делимое. Объяснение промежуточного делимого будет приведено ниже – одиннадцатая команда.

Седьмая команда 080D: 7B (MOV A, E) – переместить число (делимое (0111)) в регистр A из регистра E.

Восьмая команда 080E: 17 (RAL) – сдвинуть число в регистре A влево. При сдвиге числа влево каждый разряд числа перемещается на одну позицию влево, крайний левый разряд «отрезается» и записывается в регистре флагов как CY, а на пустое место крайнего правого занимается значением из флага CY, которое он имеет до начала сдвига.

Было 0111 – сдвигаем влево получаем 1110 (или 1111 описано в двадцатой команде).

Похожие материалы

Информация о работе