Рефераты. Деление без восстановления остатка со сдвигом остатка

+

0001 0001 1010 0110 0110


1010 коррекция


+

0001 0001 0100 0110 0110


1111 1010 1000 1100 1101


+

0000 1011 1101 0011 0011


1010 1010 коррекция


+

0000 0101 0111 0011 0011


1111 1010 1000 1100 1101



0000 0000 0000 0000 0000




 

1.4 Структурная схема ОА

(Приложение А, лист № 1 )

Для реализации предложенного алгоритма выполнения операции деления необходимы следующие операционные элементы:

1)     Рг.А(0-19) – регистр делителя: 4р.- знак, 16р.- мантисса делителя.

2)     СМ (0-43) – сумматор: 4р.- знак, 32р.- мантисса делимого,

4р.- переносы.

3) Рг.В(0-19) – регистр частного: 4р.- знак, 16р.- мантисса частного.

4) регистр Рг.К(0-3) – регистр коррекции.

5) счетчик Сч.1 - этот счетчик необходим для формирования тетрады частного.

6) счетчик Сч.2 - этот счетчик необходим для выхода из цикла деления, выход будет осуществлен после того, как будут пройдены все тетрады.

7) счетчик Сч.3 - этот счетчик необходим для выхода из коррекции.



1.5 Разработка граф-схемы алгоритма (ГСА)

(Приложение А, лист № 2,3)

Для реализации любой арифметической операции необходимо знать алгоритм ее выполнения, ниже приводится алгоритм операции деления чисел с фиксированной запятой в коде 8421, 8421+6. Если блоки выполняются последовательно, то ссылки на следующий блок не приводятся.


Таблица 1 - Определение блоков

Номер блока
Назначение

A00(Л2)

Начало.

B00(Л2)

Начальная установка:

СМ:=X, Рг.А:=Y, Сч1:=0, Сч2:=0, Сч3:=0, Рг.K:="1010".

C00(Л2)

Определяем знак частного путем сложения знаковых разрядов делимого и делителя по модулю два и заносим его в Рг.B[16-19].

D00(Л2)

Первое пробное сложение делимого и делителя, делитель в дополнительном коде.

F00(Л2)

Проверяем СМ[40-43]=0000, если Да то на G00(Л2), иначе на B00(Л3).

G00(Л2)

Программа обработки прерываний (АВОСТ).

Выдача сообщения о переполнение.

B00(Л3)

Проверяем СМ[22,23]=11, т.е. на наличие запрещенных комбинаций, если Да то на D00(Л3), иначе на C01(Л3).

C01(Л3)

Проверяем СМ[21,23]=11, т.е. на наличие запрещенных комбинаций, если Да то на D00(Л3), иначе на E00(Л3).

D00(Л3)

Коррекция: СМ[20-23]:=СМ[20-23] + Рг.К[0-3].

E00(Л3)

Проверяем СМ[27,28]=11, т.е. на наличие запрещенных комбинаций, если Да то на G00(Л3), иначе на F01(Л3).

F01(Л3)

Проверяем СМ[26,28]=11, т.е. на наличие запрещенных комбинаций, если Да то на G00(Л3), иначе на B02(Л3).

G00(Л3)

Коррекция: СМ[25-28]:=СМ[25-28] + Рг.К[0-3].

B02(Л3)

Проверяем СМ[32,33]=11, т.е. на наличие запрещенных комбинаций, если Да то на D02(Л3), иначе на C03(Л3).

C03(Л3)

Проверяем СМ[31,33]=11, т.е. на наличие запрещенных комбинаций, если Да то на D02(Л3), иначе на E02(Л3).

D02(Л3)

Коррекция: СМ[30-33]:=СМ[30-33] + Рг.К[0-3].

E02(Л3)

Проверяем СМ[37,38]=11, т.е. на наличие запрещенных комбинаций, если Да то на G02(Л3), иначе на F03(Л3).

F03(Л3)

Проверяем СМ[36,38]=11, т.е. на наличие запрещенных комбинаций, если Да то на G02(Л3), иначе на B04(Л3).

G02(Л3)

Коррекция: СМ[35-38]:=СМ[35-38] + Рг.К[0-3].

B04(Л3)

Проверяем СМ[42,43]=11, т.е. на наличие запрещенных комбинаций, если Да то на D04(Л3), иначе на C05(Л3).

C05(Л3)

Проверяем СМ[41,43]=11, т.е. на наличие запрещенных комбинаций, если Да то на D04(Л3), иначе на E04(Л3).

D04(Л3)

Коррекция: СМ[40-43]:=СМ[40-43] + Рг.К[0-3].

E04(Л3)

Проверяем Сч.3=0, если Да, то переходим на B04(Л2), иначе на F05(Л3).

F05(Л3)

Проверяем Сч.3=1, если Да, то переходим на B02(Л2), иначе на B06(Л2).

B04(Л2)

Сдвигаем регистр СМ влево на 5 разрядов.

В Сч.1 заносим 9.

C04(Л2)

Сч.1:=9.

D04(Л2)

Сложение делимого и делителя, делитель в прямом коде.

F04(Л2)

Сч.3:=1.

 

Переход на коррекцию.

B02(Л2)

Проверяем СМ[40-43]=0000, если Да то на C02(Л2), иначе на C03(Л2).

C03(Л2)

Декремент Сч1 (отнимаем от текущей тетрады частного 1).

C02(Л2)

Инкремент Сч.2 (переход к следущей тетраде частного).

Присваиваем Рг.В[0-3] значение Сч1.

Сдвигаем регистр Рг.В влево на 4 разряда.

D02(Л2)

Сдвигаем регистр СМ влево на 5 разрядов.

В Сч.1 заносим 1.

E02(Л2)

Сложение делимого и делителя, делитель в дополнительном коде.

G02(Л2)

Сч.3:=2.

 

Переход на коррекцию.

B06(Л2)

Проверяем СМ[40-43]=0000, если Да то на C06(Л2), иначе на C07(Л2).

C06(Л2)

Инкремент Сч1 (прибавляем к текущей тетраде частного 1).

 

C07(Л2)

Инкремент Сч.2 (переход к следущей тетраде частного).

Присваиваем Рг.В[0-3] значение Сч1.

Сдвигаем регистр Рг.В влево на 4 разряда.

D07(Л2)

Проверяем Сч.2=0, если Да то на E07(Л2), иначе на C04(Л2).

E07(Л2)

Выводим частное, т.е. Z:=Рг.В.

F07(Л2)

Конец.


1.6 Описание моделирующей программы

(Приложение В)

Программа операции деления без восстановления остатка со сдвигом остатка с фиксированной точкой в коде 8421, 8421+6 выполнена на языке программирования ассемблера. В моделирующей программе регистрами Рг.А, Рг.В, Рг.К, а так же счетчиками СЧ.1 и СЧ.2 СЧ.3 являются регистры самой ЭВМ и оперативная память.


Описание программы построчно:

1 – 22 – Связывание данных с сегментом данных DS, очистка экрана, приглашение к вводу двух чисел, запись введенных чисел по адресам в сегменте данных.

23 – 28 – Вычисление знака частного.

29 – 72 – Вычисление количества тетрад, подготовка под знак целой тетрады, вызов процедур преобразования из ASCII в байты делимого и делителя, пробное сложение, проверка на переполнение.

73 – 79 – Вывод сообщения о переполнении и переход на выход из программы.

80 – 103 – Вызов процедуры преобразования конечного результата из байта в ASCII, вывод знакового разряда и вывод результата, стандартный выход из программы.

104 – 131 – Процедура перевода делимого из ASCII в BIN.

Страницы: 1, 2, 3, 4, 5, 6



2012 © Все права защищены
При использовании материалов активная ссылка на источник обязательна.