Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
osnov.doc
Скачиваний:
9
Добавлен:
08.11.2019
Размер:
1.37 Mб
Скачать

11.2.1.Сложение и вычитание

При сложении слагаемые размещаются в регистрах SR и АС. При вычитании от уменьшаемого из регистра АС отнимается вычитаемое из регистра SR. Регистр MQ в этих случаях не используется. Результат размещается в регистре АС, поэтому сперва в АС загружается исходный операнд и результат алгебраического сложения формируется в сумматоре , а на следующем такте этот результат алгебраического сложения записывается в регистр АС. Если результат арифметического действия получился в дополнительном или обратном коде, то он после выполнения этого действия представляется в прямом коде с отрицательным знаком, т.е. в знаковый бит записывается единица.

Таким образом, при сложении: [AC] + [SR] AC, а при вычитании:

[AC] + [SR] AC. В соответствующем алгоритме можно учесть, отмеченный ранее способ организации процедуры вычитания при помощи параллельного сумматора, включенного в состав АУ, но можно и не использовать эту возможность. Рассмотрим последний вариант как более рациональный в данном случае.

Алгоритм выполнения каждого арифметического действия можно разделить на две основные части: алгоритм процедуры инициализации данного арифметического действия и алгоритм выполнения самого арифметического действия.

После загрузки операндов в регистры АС и SR можно выполнить необязательную процедуру проверки значений операндов на 0 с соответствующей реакцией, которая приведена на рис. 3.

Во время инициализации процедур сложения или вычитания выполняются следующие действия:

1. Если код процедуры соответствовал вычитанию, то знак операнда, размещенного в регистре SR, изменяется, т.е. выполняется процедура

инвертирования: [SR(S)].

2. Если AC(S) = SR(S), то 1 SI, иначе 0 SI.

3. Если AC(S) = 1, то AC(M) := [AC(M)] + 1, т.е представляется в допол-нительном коде.

4. Если SR(S) = 1, то SR(M) := [SR(M)] + 1.

После инициализации выполняется процедура самого алгебраического сложения: AC:= [AC] add2 [SR]\

5. Если при [SI] = 1 и после сложения AC(S) = SR(S), то переход к пункту 7, иначе вырабатывается сигнал переполнения: ADOV = 1, т.е. 1 ADOV и переход к пункту 9.

6. Если [SI] = 0, то переход к пункту 7.

7. Если значащая часть результата равна 0, т.е. AC(M) = 0, то в знаковый бит регистра АС засылается 0: 0 AC(S) и переход к пункту 9.

8. Если AC(S) =1, то результат получился в дополнительном коде и его преобразуют в прямой код: AC(M) := [AC(M)] + 1\

9. Конец процедуры алгебраического сложения.

Граф-схема этого варианта алгоритма алгебраического сложения приведена на рис.11.3.

11.2.2. Умножение

При умножении [SR] [MQ] касрегистр {AC-MQ}.

Умножение можно выполнять с анализом одного младшего бита множителя MQ(0) или двух младших битов множителя MQ(1,0).

Процедура инициализации умножения заключается в следующем.

1. Если один из операндов равен 0, то результату умножения при-сваивается значение 0 и тем самым процедура умножения заканчивается:

0 MQ, 0 AC\

2. Если у операндов одинаковые знаки, то результату присваивается положительный знак, т.е.0 AC(S), и 0 MQ(S), 0 SR(S)\

3. Если у операндов разные знаки, то результату присваивается отрицательный знак, т.е 0 AC(S) и 1 MQ(S), 0 SR(S)\

4. Обнуляется регистр АС: 0 AC(M).

Как уже отмечалось, при умножении чисел множимое из регистра SR умножается на множитель из регистра MQ, а произведение помещается в "касрегистр", образованный из регистров АС и MQ. В регистре АС находится старшая часть произведения, а в регистре MQ - младшая часть. Множимое остается в регистре SR, а множитель в регистре MQ теряется.

Рассмотрим сперва вариант умножения с анализом одного младшего бита множителя.

Перед началом процедуры умножения в счетчик SС записывается число

(n-1), равное числу разрядов значащей части числа в форме с фиксированной запятой, и определяющее в данном случае число элементарных шагов процедуры умножения.

На каждом элементарном шаге умножения выполняются следующие действия.

1. Если MQ(0) = 0, то содержимое касрегистра {AС(M)-MQ(M)} сдвигается вправо на один разряд: [AC(M)-MQ(M)]\

2. Если MQ(0) = 1, то содержимое регистра SR складывается с содержимым регистра АС: AC := [AC] + [SR], после чего содержимое касрегистра

{AС(M)-MQ(M)} сдвигается вправо на один разряд.

3. В конце каждого элементарного шага вычитываетя 1 из содержимого счетчика SC, после чего проверяется равно ли 0 содержимое SС, если да, то процедура умножения заканчивается. В противном случае элементарный шаг повторяется.

4. Если по окончании умножения содержимое AС(M) не равно 0 вы-рабатывается сигнал переполнения: 1 ADOV\

Теперь рассмотрим вариант умножения с анализом двух младших разрядов множителя MQ(1,0). Граф-схема соответствующего алгоритма приведена на рис.11.4.

В связи с тем, что в этом случае в процессе выполнения операции умножения на каждом цикле операции анализируется сразу два младших разряда множителя, то таких циклов понадобится (n-1)/2. Это число циклов записывается в счетчик SС. При обнулении содержимого счетчика SС процедура умножения останавливается. В конце каждого цикла производится одновременный сдвиг на два разряда вправо содержимого касрегистра {AС(M)-MQ(M)}. Обозначим эту процедуру условно как ПС. Очевидно, что и в этом случае произведение будет сформировано в разрядной сетке, первоначально отведенной для множителя, т.е. в регитре MQ.

В зависимости от результата анализа разрядов MQ(1,0) предусматриваются следующие действия.

1. Если [MQ(1,0)] = 00= то выполняются только процедуры: ПС и SC = SC-1.

2. Если [MQ(1,0)] = 01, то последовательно выполняются процедуры:

AC := [AC] + [SR], GC и SC = SC-1.

После каждого выполнения процедуры AC := [AC] + [SR] проверяется равно ли 0 содержимое AC(S)! Если нет, то выполняется процедура 1 ADOV и выполнение арифметического действия прекращается.

3. Если [MQ(1,0)] = 10, то выполняются процедуры: сдвиг множимого влево на 1 разряд, т.е. умножение его на два, потом AC := [AC] + [SR], GC и

SC = SC _ 1.

Перед сдвигом множимого, т.е. перед процедурой [SR], проверяется равно ли содержимое разряда SR(n-1) единице, если да, то выполняется процедура 1 ADOV и выполнение арифметического действия прекращается.

4. Если [MQ(1,0)] = 11, то выполняется три раза процедура AC := [AC] + [SR] потом ПС и SC = SC _ 1.

Иногда процедуру трехкратного сложения заменяют однократным вычитанием: AC := [AC] - [SR].

5. Когда [SC] = 0 - операция умножения заканчивается.

Как и в предыдущем случае если содержимое АС(М) после окончания процедуры умножения не равно нулю вырабатывается сигнал переполнения:

1 ADOV.

При умножении и делении необходимо бывает выполнить процедуру AC := [AC] _ [SR]. Как уже отмечалось, в этом случае операнд, размещенный в регистре SR, представляется в дополнительном коде непосредственно на входе сумматора, а не в самом регистре SR. Для этого на входе сумматора предусматривается специальная схема управления.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]