Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Операционное устройство. Методические указания

.pdf
Скачиваний:
0
Добавлен:
11.08.2026
Размер:
565 Кб
Скачать

 

 

 

 

П3 = A OK .

(4)

Поправка П3 прибавляется к n старшим разрядам произведения.

Для схем (рисунок 1, а и б) поправку П1 и поправку П2 (если она необходима) удобнее прибавлять к содержимому регистра-накопителя до начала выполнения анализа разрядов множителя и сдвигов. После проведения n сдвигов поправки П1 и П2 окажутся в младших разрядах произведения. Поправку П3 удобнее прибавить после завершения операции умножения - после проверки n сложений и n сдвигов. Для схем (рисунок 1, в и г) последовательность прибавления поправок должна быть противоположная.

Кроме этого, для схемы (рисунок 1, а) при отрицательных (SgA = SgB = 1) сомножителях, имеющих такое абсолютное значение, что все значащие разряды произведения располагаются в n младших разрядах, нужно учитывать, что если после прибавления П3 в старших разрядах получается -0, его необходимо преобразовать в +0. Иначе результат умножения будет ошибочным. Например, если ОК = 11.1101; ОК = 11.1101 и операция преобразования - 0 в +0 не была проведена, будем иметь следующее ошибочное произведение: OS*ОК = 11.11110100. Правильный результат: OSОК = 00.00000100.

При выполнении всех перечисленных правил произведение ОК сомножителей даст ОК результата.

Пример 5 - Умножить в ОК числа ОК = 11.0010 и ОК= 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. Если разность между i и делителем отрицательна, то, как видно из рисунка, в частное записывается qi+1 = 0, а остаток (2Аi - В) восстанавливается (2Аi - В)+В и воспринимается как новый остаток Аi+1. Таким образом, во время одного цикла производится одна или две операции сложения-вычитания.

Если используется сумматор ОК, то при определении значений разрядов частного необходимо учитывать неоднозначность представления нуля (машинное представление нуля может иметь во всех разрядах или нули, или единицы).

Пример 6 - На сумматоре ОК разделить = -9/16 на = -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) вместо вычитания делителя выполняется сложение, соответственно восстановление остатка выполняется вычитанием делителя;

-при |i| -|В| 0 очередная цифра частного qi = SgQ, при |i|-|В| < 0 qi = SgQ.

Проверка условия |i| -|В| 0 отличается от проверки условия i –В 0. Здесь уже недостаточно анализировать знаковый разряд разности (а в случае ОК значение разности «минус 0»). Очевидно, что |i| -|В| > 0 , если знак разности совпадает со знаком делимого, то есть Sg(2Аi –В) ^ SgA = 0. Значение делимого в процессе выполнения операции, как правило, не сохраняется, поэтому придется воспользоваться значениями SgQ и SgB следующим образом

SgQ ^ SgB = SgA ^ SgB ^ SgB = SgA .

(6)

Условию |i| -|В| 0 соответствует логическая функция

 

 

 

 

 

(Sg(2Аi –В) ^ SgQ ^ SgB) (2Аi –В=0).

(7)

Конечно, можно выполниять проверку условия|i| - |В| < 0, которому соответствует логическая функция

(Sg(2Аi –В) ^ SgQ ^ SgB) & (2Аi –В0).

(8)

15

Результат деления получается в ОК. Если требуется частное, представленное в ДК, то к младшему разряду регистра, содержащего отрицательное частное, нужно прибавить единицу. Результат операции в модифицированном ОК или ДК проще всего формировать путем записи в младший разряд регистра частного значения SgQ с последующим выполнением n+1 микроопераций сдвига влево Q:=L1( Q.qi) на каждом шаге алгоритма.

Пример 7 - На сумматоре ОК разделить = 9/16 на = -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

1ОК= 00.1100

 

+

 

ВОК = 11.0011

 

------------------------------

 

A2ОК = 11.1111

q2 = 0, так как A2 = 0

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 - На сумматоре ДК разделить = -9/64 на = 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

1ДК= 11.0100

 

+

 

В ДК = 00.1100

 

------------------------------

 

A2 ДК = 00.0000

q2 = 0 , так как A2 = 0

2ДК = 00.0000

 

+

 

ВДК = 00.1100

 

------------------------------

 

A3 ДК = 00.1100

q3 = 1

+

 

-ВДК = 11.0100

Восстановление

------------------------------

 

A3ДК = 00.0000

 

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, выполняется либо операция вычитания (i - В, если Аi 0), либо операция сложения (i + В, если Аi < 0). Результат выполнения операции сложения-вычитания является

новым остатком. Очередная

цифра

частного определяется

знаком

получившегося частного остатка

Аi+1=2Ai ± B. Если Аi+1 0, то в очередной

разряд частного записывается 1, а если

Аi+1 <0, то qi+1 = 0. Таким образом, во

время одного цикла выполняется только одна операция сложения-вычитания. Пример 9 - На сумматоре ДК разделить = 9/16 на = 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

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;

-в зависимости от результата выполняется либо операция вычитания (i , если знаки совпадают (SgA ^ SgB = 0), либо операция сложения, если знаки противоположные (SgA ^ SgB = 1);

-если Аi = 0, то вместо знака остатка используется знак делимого;

-результат выполнения операции сложения-вычитания является новым

остатком Аi+1=2Ai ± B;

- при |i| ± |В| 0 очередная цифра частного qi = SgQ, при |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 - На сумматоре ДК разделить = -9/16 на = 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

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

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