Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учеб. пособие по ОЭВМ.doc
Скачиваний:
0
Добавлен:
31.12.2019
Размер:
4.34 Mб
Скачать

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

Выполнение операции вычитания сводится к выполнению операции сложения с отрицательным вторым слагаемым, поэтому рассмотрим алгоритм выполнение операции сложения. Если слагаемое положительно, то прямой код слагаемого совпадает с дополнительным кодом. Поэтому при выполнении операции сложения положительные слагаемые представляются в прямом коде, а отрицательные – в дополнительном. Производится сложение двоичных кодов, включая разряды знаков. Для отслеживания переполнения существует 2 основных метода:

  • по наличию и отсутствию переноса;

  • использование модифицированного кодирования.

В первом случае, если возникает перенос из знакового разряда суммы при отсутствии переноса в этот разряд или перенос в знаковый разряд при отсутствии переноса из разряда знака, то имеется переполнение разрядной сетки. Если нет переносов из знакового разряда и в знаковый разряд суммы или есть оба переноса, то переполнения нет. При этом, если знаковый разряд суммы равен 0, то сумма положительна, если 1, то сумма отрицательна и представлена в дополнительном коде.

Во втором случае для представления знака отводится два или более разрядов. В случае использования двух знаковых разрядов комбинация 00 позволяет сделать вывод о том, что результат получился положительным, 11 – отрицательным, 10 или 01 – переполнение.

Ниже на примерах демонстрируется анализ переполнения по наличию и отсутствию переносов. В лабораторной работе для отслеживания переполнения должно быть использовано модифицированное кодирование.

Пример 5.

Рассмотрим пример операции сложения: С=А+В. В качестве слагаемых возьмем 5-разрядные числа (4 информационных разряда и 1 разряд – знаковый): А=11, В=-4. В двоичной системе счисления положительные числа представляется в прямом коде, а отрицательные – в дополнительном. Следовательно, А=01011 и В=11100. Производим операцию сложения:

Зн.

Инф. разр.

0

1011

1

1100

0

0111

Переполнения разрядной сетки не было, так как был перенос и в знаковый разряд, и из знакового разряда.

Так как знак результата равен 0, то получаем положительный результат в прямом коде С=00111(2)=7(10).

Пример 6.

Рассмотрим пример операции вычитания: С=А-В. В качестве уменьшаемого и вычитаемого возьмем 5-разрядные числа (4 информационных разряда и 1 разряд – знаковый): А=11(10)=01011(2), В=-6(10)=11010(2).

Для выполнения операции вычитания берем дополнительный код вычитаемого. Получаем, что В=00110. Производим операцию сложения:

Зн.

Инф. разр.

0

1011

0

0110

1

0001

Так как был перенос в знаковый разряд, и не было переноса из знакового разряда, то произошло переполнение разрядной сетки.

Моделирование функционирования алу.

С

Швх

труктурная схема АЛУ показана на рис. 5.

RA

RB

R1

+1

RC

Швых

Рис. 5. Структурная схема АЛУ

Из оперативной памяти по входной информационной шине Швх в регистр RA поступает первое слагаемое/уменьшаемое А и в регистр RB – второе слагаемое/вычитаемое. В случае операции сложения второй операнд переписывается в регистр R1 без изменения. Если выполняется операция вычитания, то операнд переписывается в регистр R1 в обратном коде. Далее, в случае операции сложения происходит суммирование операндов, а в случае операции вычитания – суммирование с добавлением 1. Результат операции записывается в регистр суммы RC и выдается из АЛУ в оперативную память по выходной информационной шине Швых.

Для того, чтобы отследить переполнение разрядной сетки, пpи выполнении операции сложения/вычитания используется модифицированный код. Под него отводится девять разрядов: семь информационных и два знаковых. После выполнения операции производится анализ знаковых разрядов, если их значения совпадают - переполнения нет, а если значения различны - было переполнение.

Таким образом, алгоритм выполнения операции сложения/вычитания заключается в следующем:

  1. ввод операндов;

  2. дешифрация кода операции;

  3. в случае операции сложения: сложение операндов; в случае операции вычитания: представление вычитаемого в обратном коде и сложение операндов с добавлением 1;

  4. проверка на переполнение разрядной сетки результата;

  5. вывод результата.

Блок-схема выполнения операции сложения/вычитания показана на рис. 6.

На примере рассмотрим выполнение операции сложения.

В качестве Швх и Швых выступают входные восьмиразрядные регистры INPA и INPB, в которые вводятся операнды. Так как переполнение отслеживается с помощью модифицированных кодов, то регистры операндов RA и RB девятиразрядные.