Операционное устройство. Методические указания
.pdf
|
|
|
|
П3 = A OK . |
(4) |
||
Поправка П3 прибавляется к n старшим разрядам произведения.
Для схем (рисунок 1, а и б) поправку П1 и поправку П2 (если она необходима) удобнее прибавлять к содержимому регистра-накопителя до начала выполнения анализа разрядов множителя и сдвигов. После проведения n сдвигов поправки П1 и П2 окажутся в младших разрядах произведения. Поправку П3 удобнее прибавить после завершения операции умножения - после проверки n сложений и n сдвигов. Для схем (рисунок 1, в и г) последовательность прибавления поправок должна быть противоположная.
Кроме этого, для схемы (рисунок 1, а) при отрицательных (SgA = SgB = 1) сомножителях, имеющих такое абсолютное значение, что все значащие разряды произведения располагаются в n младших разрядах, нужно учитывать, что если после прибавления П3 в старших разрядах получается -0, его необходимо преобразовать в +0. Иначе результат умножения будет ошибочным. Например, если IАОК = 11.1101; IВОК = 11.1101 и операция преобразования - 0 в +0 не была проведена, будем иметь следующее ошибочное произведение: OS*ОК = 11.11110100. Правильный результат: OSОК = 00.00000100.
При выполнении всех перечисленных правил произведение ОК сомножителей даст ОК результата.
Пример 5 - Умножить в ОК числа IАОК = 11.0010 и IВОК= 11.0100. Последовательность действий, производимых над числами, показана в таблице
6.Ответ: OSОК = OSПК = 00.10001111.
2.2Алгоритмы деления
Кнаиболее распространённым методам деления, для которых время выполнения операции не зависит от величины исходных чисел А и В, а определяется только лишь разрядностью n, относятся деление с восстановлением остатка и деление без восстановления остатка. Для этих методов Q содержит старшие n разрядов точного частного А / В.
Операция деления, как и операция умножения, выполняется на сумматорах, и для вычисления разности А - В требуется операция вычитания (сложение А и В, имеющих разные знаки), поэтому в основе ОА должен лежать двоичный сумматор обратного кода или сумматор дополнительного кода.
11
Таблица 6
S |
B |
Комментарий |
|
00.0000 |
110100 |
S:="+0"; B:=IB; A:=IA(0).IA; |
|
11.0010 |
|
S:= S + П1; |
|
11.0010 |
|
||
|
|
||
11.0000 |
|
S:= S + П2; |
|
10.0010 |
|
|
|
1 |
|
|
|
10.0011 |
110100 |
|
|
|
|
B(5)=0; |
|
11.0001 |
→1 11010 |
B:= R1(S(5).B); S := R1(0.S) |
|
11.1000 |
→11 1101 |
B(5)=0; |
|
B:= R1(S(5).B); S := R1(0.S) |
|||
11.0010 |
|
B(5)=1; |
|
10.1010 |
|
S:= S + A; |
|
1 |
|
|
|
10.1011 |
|
|
|
11.0101 |
→111 110 |
B:= R1(S(5).B); S := R1(0.S) |
|
11.1010 |
→1111 11 |
B(5)=0; |
|
00.1101 |
|
B:= R1(S(5).B); S := R1(0.S) |
|
|
S := S + П3; |
||
00.0111 |
|
||
|
|
||
1 |
1111 |
OS := S(0:5).B(0:3) |
|
00.1000 |
|||
OS = 00.10001111 |
Если операнды представлены в ПК, то знак частного Q определяется сложением по модулю 2 знаков операндов, которые в определении цифровых разрядов частного не используются. То есть, А и В в процессе деления считаются положительными числами.
Если операнды представлены в ОК или ДК, то их можно предварительно преобразовать в ПК или выполнять деление в исходном коде, учитывая при определении разрядов частного знаки делимого и делителя.
Для операции деления важно точно определить положение точки в формате чисел, так как правила выравнивания делимого и делителя для целых чисел и правильных дробей отличаются. Здесь будем считать, что операнды являются правильными дробями. Тогда необходимым условием возможности выполнения операции деления является выполнение неравенства:
А < В . |
(5) |
Если А≥В , то есть А/В≥1, то должен вырабатываться признак переполнения.
12
Пронумеруем разряды частного Q = q0 , q1 , q2 , ... qn . Само деление представляет собой циклический процесс; на i-м цикле определяется очередная двоичная цифра частного qi. Общее количество циклов деления равно n+1. Начальный (нулевой) цикл отличается от других, здесь выполненяется проверка неравенства (5) путем вычисления разности |А| - |В|. Инверсию знака полученной разности используют для формирования:
-признака (флага) переполнения OVFL, при делении чисел в ПК;
-значения разряда переполнения при делении чисел в ДК или ОК, представленных модифицированными кодами. На последующих циклах определяются значения цифровых разрядов. Реализация алгоритмов деления будет более простая, если результат деления, состоящий из признака или разряда переполнения и цифровых разрядов частного, будет формироваться
микрооперацией сдвига слево частного Q:=L1( Q.qi), i = 0, …, n.
Так как операция деления относится к операциям, не всегда дающим точный результат, признаком окончания операции может быть:
-достижение заданной точности;
-заполнение разрядной сетки частного (признаком окончания операции деления является число сдвигов очередного частного остатка, равное количеству разрядов частного);
-получение в процессе деления остатка Аi = 0. В этом случае операция может быть остановлена и в оставшиеся разряды частного записывается нуль.
2.2.1Деление с восстановлением остатка
На рисунке 2.1 показан алгоритм одного (i+1)-го цикла деления положительных чисел с восстановлением остатка.
Рисунок 2 - Алгоритм выполнения (i+1)-го цикла деления с восстановлением остатка
Здесь (i+1)-й цикл начинается со сдвига на один разряд влево (удвоения) остатка Аi , полученного во время предыдущего i-го цикла. После этого вычисляется разность между удвоенным остатком и делителем. Если она неотрицательна, то в очередной разряд частного записывается цифра qi+1 =1, а
13
эта разность является новым остатком Аi+1. Если разность между 2Аi и делителем отрицательна, то, как видно из рисунка, в частное записывается qi+1 = 0, а остаток (2Аi - В) восстанавливается (2Аi - В)+В и воспринимается как новый остаток Аi+1. Таким образом, во время одного цикла производится одна или две операции сложения-вычитания.
Если используется сумматор ОК, то при определении значений разрядов частного необходимо учитывать неоднозначность представления нуля (машинное представление нуля может иметь во всех разрядах или нули, или единицы).
Пример 6 - На сумматоре ОК разделить IА = -9/16 на IВ = -12/16 представленные в ПК. Разрядность операндов n = 4. Для этого и всех последующих примерах будем считать, что входные слова сохраняются в ячейках памяти операционного автомата в виде внутренних слов A и B.
Машинные изображения делимого и делителя: АПК = 1.1001; ВПК = 1.1100. Определим знак частного: SgQ = SgA ^ SgB = 1 1 = 0 . В процессе выполнения деления A и B считаем положительными, их представление в прямом и обратном кодах совпадает АОК = 0.1001; ВОК = 0.1100.
Для выполнения операции вычитания потребуется отрицательное значение делителя В: -ВОК = 1.0011.
Проверим, выполняется ли условие (5) и затем определим цифру за цифрой разряды частного:
АОК = 0.1001
+
-ВОК = 1.0011
------------------------------- |
А < В , q0 = 0 – переполнения нет (OVFL=0) |
SОК = 1.1100 |
|
+ |
|
ВОК = 0.1100 |
Восстановление |
------------------------------ |
|
АОК = 0.1001 |
|
2АОК = 1.0010 |
|
+ |
|
-ВОК = 1.0011 |
|
------------------------------ |
q1 = 1 |
A1ОК = 0.0110 |
|
2А1ОК= 0.1100 |
|
+ |
|
-ВОК = 1.0011 |
|
------------------------------ |
q2 = 1, так как A2=0 |
A2ОК = 1.1111 |
|
2А2ОК = 1.1111 |
|
+ |
|
-ВОК = 1.0011 |
|
------------------------------ |
q3 = 0 |
A3ОК = 1.0011 |
14
+ |
|
ВОК = 0.1100 |
Восстановление |
------------------------------ |
|
A3ОК = 1.1111 |
|
2А3ОК = 1.1111 |
|
+ |
|
-ВОК = 1.0011 |
|
------------------------------ |
q4 = 0 |
A4ОК = 1.0011 |
|
+ |
|
ВОК = 0.1100 |
Восстановление |
------------------------------ |
|
A3ОК = 1.1111 |
|
Ответ формируем из значений SgQ и q1 , q2 , q3 , q4 : QПК = 0.1100, Q=3/4. Следует отметить, что хотя операция деления, выполняемая согласно
алгоритму (рисунок 2), проводится либо на сумматоре ОК, либо на сумматоре ДК, частное получается в ПК.
Если делимое и делитель представлены в ОК или ДК, то деление можно выполнять с учетом их знаков. Правила выполнения алгоритма изменяются следующим образом:
-на каждом шаге выполняется проверка условия |2Аi| - |В| ≥ 0, для этого при отрицательном частном (SgQ=1) вместо вычитания делителя выполняется сложение, соответственно восстановление остатка выполняется вычитанием делителя;
-при |2Аi| -|В| ≥ 0 очередная цифра частного qi = SgQ, при |2Аi|-|В| < 0 qi = SgQ.
Проверка условия |2Аi| -|В| ≥ 0 отличается от проверки условия 2Аi –В ≥ 0. Здесь уже недостаточно анализировать знаковый разряд разности (а в случае ОК значение разности «минус 0»). Очевидно, что |2Аi| -|В| > 0 , если знак разности совпадает со знаком делимого, то есть Sg(2Аi –В) ^ SgA = 0. Значение делимого в процессе выполнения операции, как правило, не сохраняется, поэтому придется воспользоваться значениями SgQ и SgB следующим образом
SgQ ^ SgB = SgA ^ SgB ^ SgB = SgA . |
(6) |
||
Условию |2Аi| -|В| ≥ 0 соответствует логическая функция |
|
||
|
|
|
|
(Sg(2Аi –В) ^ SgQ ^ SgB) (2Аi –В=0). |
(7) |
||
Конечно, можно выполниять проверку условия|2Аi| - |В| < 0, которому соответствует логическая функция
(Sg(2Аi –В) ^ SgQ ^ SgB) & (2Аi –В≠0). |
(8) |
15
Результат деления получается в ОК. Если требуется частное, представленное в ДК, то к младшему разряду регистра, содержащего отрицательное частное, нужно прибавить единицу. Результат операции в модифицированном ОК или ДК проще всего формировать путем записи в младший разряд регистра частного значения SgQ с последующим выполнением n+1 микроопераций сдвига влево Q:=L1( Q.qi) на каждом шаге алгоритма.
Пример 7 - На сумматоре ОК разделить IА = 9/16 на IВ = -12/16 представленные в ОК. Разрядность операндов n = 4.
Машинные изображения делимого и делителя: АОК = 00.1001; ВОК = 11.0011 . Для выполнения операции вычитания потребуется отрицательное значение делителя В: -ВОК = 00.0011.
Определим знак частного: SgQ = SgA ^ SgB = 0 ^ 1 = 1 .
Проверим, выполняется ли условие (5.1) и затем определим цифру за цифрой разряды частного:
АОК = 00.1001
+
ВОК = 11.0011
------------------------------- |
А < В q0 = 1, так как SgQ = 1 |
SОК = 11.1100 |
|
+ |
|
-ВОК = 00.1100 |
Восстановление |
------------------------------ |
|
АОК = 00.1001 |
|
2АОК = 01.0010 |
|
+ |
|
ВОК = 11.0011 |
|
------------------------------ |
|
A1ОК = 00.0110 |
q1 = 0 |
2А1ОК= 00.1100 |
|
+ |
|
ВОК = 11.0011 |
|
------------------------------ |
|
A2ОК = 11.1111 |
q2 = 0, так как A2 = 0 |
2А2ОК = 11.1111 |
|
+ |
|
ВОК = 11.0011 |
|
------------------------------ |
|
A3ОК = 11.0011 |
q3 = 1 |
+ |
|
-ВОК = 00.1100 |
Восстановление |
------------------------------ |
|
A3ОК = 11.1111 |
|
2А3ОК = 11.1111 |
|
+ |
|
ВОК = 11.0011 |
|
------------------------------ |
|
A4ОК = 11.0011 |
q4 = 1 |
16
+ |
|
-ВОК = 00.1100 |
Восстановление |
------------------------------ |
|
A4 ОК = 11.1111 |
|
Ответ: QОК = 11.0011 , Q= -3/4.
Пример 8 - На сумматоре ДК разделить IА = -9/64 на IВ = 12/64 представленные в ДК. Разрядность операндов n = 4.
Машинные изображения делимого и делителя: АДК = 11.0111; ВДК = 00.1100 . Для выполнения операции вычитания потребуется отрицательное значение делителя В: -ВДК = 11.0100 .
Определим знак частного: SgQ = SgA ^ SgB = 0 ^ 1 = 1.
Проверим, выполняется ли условие (5) и затем определим цифру за цифрой разряды частного:
АДК = 11.0111
+
ВДК = 00.1100
------------------------------- |
А < В q0 = 1, так как SgQ = 1 |
SДК = 00.0011 |
|
+ |
|
-ВДК = 11.0100 |
Восстановление |
------------------------------ |
|
АДК = 11.0111 |
|
2АДК = 10.1110 |
|
+ |
|
ВДК = 00.1100 |
|
------------------------------ |
|
A1 ДК = 11.1010 |
q1 = 0 |
2А1ДК= 11.0100 |
|
+ |
|
В ДК = 00.1100 |
|
------------------------------ |
|
A2 ДК = 00.0000 |
q2 = 0 , так как A2 = 0 |
2А2ДК = 00.0000 |
|
+ |
|
ВДК = 00.1100 |
|
------------------------------ |
|
A3 ДК = 00.1100 |
q3 = 1 |
+ |
|
-ВДК = 11.0100 |
Восстановление |
------------------------------ |
|
A3ДК = 00.0000 |
|
2А3ДК = 00.0000 |
|
+ |
|
ВДК = 00.1100 |
|
------------------------------ |
|
17
A4 ДК = 00.1100 |
q4 = 1 |
+ |
|
-ВДК = 11.0100 |
Восстановление |
------------------------------ |
|
A4 ДК = 00.0000 |
|
Ответ: QОК = 11.0011, QДК = 11.0100, Q= -3/4.
2.2.2 Деление чисел без восстановления остатка
Алгоритм выполнения одного (i+1)-го цикла деления положительных чисел без восстановления остатка показан на рисунке 3.
Рисунок 3 - Алгоритм выполнения (i+1)-го цикла деления без восстановления остатка
Цикл начинается со сдвига на один разряд влево (удвоения) остатка Аi , полученного во время предыдущего i-го цикла деления. Далее в зависимости от того, каков был знак предыдущего частного остатка Аi, выполняется либо операция вычитания (2Аi - В, если Аi ≥ 0), либо операция сложения (2Аi + В, если Аi < 0). Результат выполнения операции сложения-вычитания является
новым остатком. Очередная |
цифра |
частного определяется |
знаком |
получившегося частного остатка |
Аi+1=2Ai ± B. Если Аi+1 ≥ 0, то в очередной |
||
разряд частного записывается 1, а если |
Аi+1 <0, то qi+1 = 0. Таким образом, во |
||
время одного цикла выполняется только одна операция сложения-вычитания. Пример 9 - На сумматоре ДК разделить IА = 9/16 на IВ = 12/16,
представленные в ПК. Разрядность операндов n = 4.
Машинные изображения делимого и делителя, представленные в ПК и ДК будут совпадать АПК = АДК = 0.1001; ВПК = ВДК = 0.1100.
Определим знак частного: SgQ = SgA ^ SgB = 0 ^ 0 = 0 .
Для выполнения операции вычитания потребуется отрицательное значение делителя - BДК = 11.0100 .
18
Проверим, выполняется ли условие (5) и затем определим цифру за цифрой разряды частного:
АДК = 00.1001
+
-ВДК = 11.0100
------------------------------- |
А < В , q0 = 0 – переполнения нет |
|
SДК = 11.1101 |
||
2АДК = 11.1010 |
|
|
+ |
|
|
ВДК = 00.1100 |
|
|
------------------------------ |
|
|
A1 |
ДК = 00.0110 |
q1 = 1 |
2А1ДК= 00.1100 |
|
|
+ |
|
|
-ВДК = 11.0100 |
|
|
------------------------------ |
|
|
A2 |
ДК = 00.0000 |
q2 = 1, так как A2 = 0 |
2А2 |
ДК = 00.0000 |
|
+ |
|
|
-ВДК = 11.0100 |
|
|
------------------------------ |
|
|
A3 |
ДК = 11.0100 |
q3 = 0 |
2А3ДК = 10.1000 |
|
|
+ |
|
|
ВДК = 00.1100 |
|
|
------------------------------ |
|
|
A4 |
ДК = 11.0100 |
q4 = 0 |
Частное получается в прямом коде из значений SgQ и q1 , q2 , q3 , q4 .
Ответ: QПК = 0.1100, Q=3/4.
Если делимое и делитель представлены в ОК или ДК, то деление можно выполнять с учетом их знаков. Правила выполнения алгоритма изменяются следующим образом:
-на каждом шаге сравниваются знаки остатка SgAi и делителя SgB;
-в зависимости от результата выполняется либо операция вычитания (2Аi -В, если знаки совпадают (SgA ^ SgB = 0), либо операция сложения, если знаки противоположные (SgA ^ SgB = 1);
-если Аi = 0, то вместо знака остатка используется знак делимого;
-результат выполнения операции сложения-вычитания является новым
остатком Аi+1=2Ai ± B;
- при |2Аi| ± |В| ≥ 0 очередная цифра частного qi = SgQ, при |2Аi| ± |В| < 0 qi = SgQ.
Очередную цифру частного можно определить путем сравнения знака получившегося частного остатка Аi+1 и делимого: если знак Аi+1 совпадает со
19
знаком делимого или Аi+1=0, то очередная цифра частного qi = SgQ , иначе - qi = SgQ . Таким образом, условием для qi = SgQ является
(Sg(Аi+1) ^ SgQ ^ SgB) &(2Аi+1 ≠ 0). |
(9) |
Результат деления получается в ОК, если требуется частное, представленное в ДК, то к младшему разряду регистра, содержащего отрицательное частное, нужно прибавить единицу. Результат операции в модифицированном ОК или ДК проще всего формировать путем записи в младший разряд регистра частного значения SgQ с последующим выполнением n+1 микроопераций сдвига влево Q:=L1( Q.qi).
Пример 10 - На сумматоре ДК разделить IА = -9/16 на IВ = 12/16, представленные в ДК. Разрядность операндов n = 4.
Машинные изображения делимого и делителя, представленные в ДК,
АДК = 11.0111; ВДК = 00.1100.
Определим знак частного: SgQ = SgA ^ SgB = 1 ^ 0 = 1 .
Для выполнения операции вычитания потребуется отрицательное значение делителя - BДК = 11.0100 .
Проверим, выполняется ли условие (5) и затем определим цифру за цифрой разряды частного:
АДК = 11.0111
+
ВДК = 00.1100
------------------------------- |
А < В , q0 = 1 – переполнения нет |
SДК = 00.0011 |
|
2АДК = 00.0110 |
|
+ |
|
-В ДК = 11.0100 |
|
------------------------------ |
|
A1 ДК = 11.1010 |
q1 = 0 |
2А1 ДК= 11.0100 |
|
+ |
|
ВДК = 00.1100 |
|
------------------------------ |
|
A2 ДК =00.0000 |
q2 = 0, так как A2=0 |
2А2 ДК =00.0000 |
|
+ |
|
ВДК =00.1100 |
|
------------------------------ |
|
A3 ДК = 00.1100 |
q3 = 1 |
2А3ДК = 01.1000 |
|
+ |
|
-В ДК = 11.0100 |
|
------------------------------ |
|
A4 ДК = 00.1100 |
q4 = 1 |
20
