Одними из базовых арифметических операций в компьютерной системе являются арифметические операции сложения и вычитания, при выполнении которых используются поразрядные логические операции, а также операции сдвигов.
Компьютерная система выполняет сложение и вычитание операндов по правилам сложения и вычитания двоичных чисел рис.2.1.
Правила сложения: | Правила вычитания: |
1. 0 + 0 = 0 | 1. 0 - 0 = 0 |
2. 0 + 1 = 1 | 2. 1 - 1 = 0 |
3. 1 + 0 = 1 | 3. 1 - 0 = 1 |
4. 1 + 1 = 10 | 4. 10 - 1 = 1 |
Рисунок 2.1 - Правила сложения и вычитания двоичных чисел
При сложении беззнаковых операндов, находящихся в регистрах процессора, алгоритм выполнения операции отслеживается по счетчику тактов, начиная с младшего бита, и количество тактов равно разрядности регистра процессора. Для выполнения алгоритма сложения двоичных беззнаковых чисел в компьютерных системах можно ввести следующие обозначения: - значение слагаемого в регистре ; - значение слагаемого в регистре ; - перенос в следующий разряд; - сумма в регистре . Например, необходимо перевести в двоичную систему счисления, а затем сложить два числа () и (), записанных в десятичной системе счисления (по правилам сложения двоичных беззнаковых чисел). Длина разрядной сетки операндов равна пяти битам. Используя вышеописанные правила, мы находим сумму двоичных чисел как показано на рис. 2.2 и в таблице 2.1. Проблем не возникает до тех пор, пока значение результата не превышает разрядной сетки операнда.
;
;
regB | = |
regC | = |
Рисунок 2.2 - Исходные данные для выполнения операции сложения двух двоичных беззнаковых чисел
Таблица 2.1 - Алгоритм сложения двух двоичных беззнаковых чисел
Такты | ||||
В результате сложения двух двоичных беззнаковых чисел получена сумма, представленная на рис.2.3.
regA | = |
Рисунок 2.3 - Результат выполнения алгоритма сложения двух двоичных беззнаковых чисел
При выполнении арифметических операций непосредственное участие в алгоритме сложения и вычитания принимает операционный автомат () (рис.2.4). На рис.2.4 приняты следующие сокращения:
- регистр для хранения операнда ;
- регистр для хранения операнда ;
- регистр для хранения суммы;
- одноразрядный сумматор;
- флаг (триггер) переноса;
- сигнал сдвига влево регистра на один разряд;
- разрядность регистра (процессора).
На этой функциональной схеме прямоугольниками обозначены регистры (устройства для хранения информации), трапецией - комбинационные схемы (устройства для преобразования информации без ее запоминания). В состав () входят регистры, триггеры, комбинационные схемы, связанные между собой и таким образом, чтобы можно было выполнить определенный алгоритм (алгоритмы). Операционный аппарат представляет собой простой цифровой процессор. С помощью специальных управляющих сигналов, процессор определяет, какую именно арифметическую операцию - сложения, вычитания, умножения или деления - он будет выполнять. Структура операционного аппарата для выполнения арифметических операций двоичных беззнаковых чисел приведена на рис.2.4.
Рисунок 2.4 - Функциональная схема () для операции сложения двоичных беззнаковых чисел
Для того, чтобы компьютерная система могла оперировать как положительными, так и отрицательными числами, в разрядную сетку компьютерного представления числа вводится знаковая часть. Разработчики компьютерных систем самый крайний левый бит отвели под знак и приняли следующее обозначение: если самый крайний левый бит в разрядной сетке представления числа содержит () - это означает положительное двоичное число; если самый крайний левый бит в разрядной сетке представления числа содержит () - это означает отрицательное двоичное число. На рис.2.5 представлен формат числа в двоичной системе счисления со знаковым битом.
Рисунок 2.5 - Формат числа в двоичной системе счисления со знаковым битом
Исходя из вышесказанного будем обозначать целые знаковые числа в виде:
, (2.1)
где - знаковый бит числа ();
- цифры слева от запятой.
Неправильные дроби:
, (2.2)
где - знаковый бит числа ();
- цифры слева от запятой;
- цифры справа от запятой.
А правильные дроби:
, (2.3)
где - знаковый бит числа ();
- цифры справа от запятой.
В связи с тем, что алгоритмы выполнения операций в компьютерных системах имеют свою специфику, возникает проблема представления отрицательных чисел.
Ее решают за счет использования особых способов кодирования числовых данных.
Рассмотрим три наиболее распространенных кода, которые применяются на практике: прямой код, обратный код, дополнительный код.
Прямой код. Наиболее естественный код.
Формируется следующим образом: в знаковый бит () числа помещают знак числа ( - если число положительное и - если число отрицательное), а остальные биты используют для абсолютного значения (модуля) числа.
Правило преобразования чисел в прямом коде можно записать следующим образом:
, (2.4)
где - вес старшего разряда в - разрядной сетке, .
Отображение числовой оси двоичных чисел на числовую ось - битных наборов (прямой код) для компьютерной системы показано на рис. 2.6.
Рисунок 2.6 - Отображение числовой оси двоичных чисел на числовую ось - битных наборов (прямой код)
В табл.2.2. представленны данные с помощью которых построены числовые оси на рис.2.6.
Таблица 2.2 - Данные с помощью которых построены числовые оси на рис.2.6.
А(10) | А(2) | А(ПК) | Знаки |
0,111 | +7 | ||
0,110 | +6 | ||
0,101 | +5 | ||
0,100 | +4 | ||
0,011 | +3 | ||
0,010 | +2 | ||
0,001 | +1 | ||
0,000 | +0 | ||
8 | 1,000 | -0 | |
1,001 | -1 | ||
1,010 | -2 | ||
1,011 | -3 | ||
1,100 | -4 | ||
1,101 | -5 | ||
1,110 | -6 | ||
1,111 | -7 |
Диапазон представимых чисел: . Положительный момент заключается в удобстве операции ввода-вывода данных.
Отрицательный момент в том, что существует два представления () и операция алгебраического сложения требует анализа знаков и модулей операндов, и выбора фактической операции сложения или вычитания.
Обратный код. Обратный - разрядный двоичный код положительного целого числа состоит из одноразрядного кода знака (), за которым следует () разрядное двоичное представление модуля числа, то есть обратный код для положительного числа совпадает с прямым кодом.
Обратный - разрядный двоичный код отрицательного целого числа состоит из одноразрядного кода знака (), за которым следует () разрядное двоичное число, представляющее собой инвертированное () разрядное представление модуля числа, то есть для отрицательного числа все цифры числа заменяются на противоположные, а именно ( на , а на ) и в знаковый разряд заносится единица.
Обратный код числа определяется соотношением:
, (2.5)
где - максимальное число в - разрядной сетке.
Отображение числовой оси двоичных чисел на числовую ось - битных наборов (обратный код) для компьютерной системы показано на рис. 2.7.
Рисунок 2.7 - Отображение числовой оси двоичных чисел на числовую ось - битных наборов (обратный код)
В табл.2.3 представленны данные с помощью которых построены числовые оси на рис. 2.7.
Таблица 2.3 - Данные с помощью которых построены числовые оси на рис.2.7.
А(10) | А(2) | А(ПК) | Знаки |
0,111 | +7 | ||
0,110 | +6 | ||
0,101 | +5 | ||
0,100 | +4 | ||
0,011 | +3 | ||
0,010 | +2 | ||
0,001 | +1 | ||
0,000 | +0 | ||
15 | 1,111 | -0 | |
1,110 | -1 | ||
1,101 | -2 | ||
1,100 | -3 | ||
1,011 | -4 | ||
1,010 | -5 | ||
1,001 | -6 | ||
1,000 | -7 |
Диапазон представимых чисел: . Положительный момент заключается в том, что при сложении обратных кодов чисел как беззнаковых чисел получаем обратный код суммы.
Отрицательный момент заключается в том, что существует два представления () и при выполнении операций сложения в обратном коде требуется коррекция суммы с помощью циклического переноса единицы переполнения из знаковых разрядов суммы.
Дополнительный код. Наиболее распространенный способ представления отрицательных целых чисел в компьютерных системах.
Он позволяет заменить операцию вычитания на операцию сложения, чем упрощает архитектуру компьютерной системы.
Дополнительный код является дополнением числа до некоторого граничного числа . Дополнительный код положительного числа совпадает с прямым кодом.
Для получения дополнительного кода отрицательного числа существует три способа:
1) все цифры модуля исходного числа заменяются на взаимно обратные, то есть производится инверсия всех цифр числа, затем к полученному значению добавляется единица в младшем разряде;
2) из модуля числа вычитается () младший бит, а затем инвертируются все разряды; 3) необходимо записать - битный модуль числа.
Затем просматривать число справа налево, сохранить все младшие нули и первую встретившуюся (), а остальные биты инвертировать.
Дополнительный код числа определяется соотношением:
, (2.6)
где равняется весу не существующего в данном числе разряда, расположенного слева от знаковой цифры.
Отображение числовой оси двоичных чисел на числовую ось - битных наборов (дополнительный код) для компьютерной системы показано на рис. 2.8. Диапазон представимых чисел: .
Свойства дополнительного кода: при сложении чисел в дополнительном коде как беззнаковых чисел получаем дополнительный код суммы.
Знаковые биты суммируются обычным образом, а возникающий при их сложении перенос игнорируется; любое число в дополнительном коде можно считать младшими битами («хвостом») числа любой длины, если содержимое знакового бита копировать влево.
Рисунок 2.8 - Отображение числовой оси двоичных чисел на числовую ось - битных наборов (дополнительный код)
Эта операция называется расширением знака. Используется, когда исходные операнды в операциях сложения и вычитания имеют разную длину.
В табл.2.4 представленны данные с помощью которых построены числовые оси на рис.2.8.
Таблица 2.4 - Данные с помощью которых построены числовые оси на рис.2.8.
А(10) | А(2) | А(ПК) | Знаки |
0,111 | +7 | ||
0,110 | +6 | ||
0,101 | +5 | ||
0,100 | +4 | ||
0,011 | +3 | ||
0,010 | +2 | ||
0,001 | +1 | ||
0,000 | |||
1,111 | -1 | ||
1,110 | -2 | ||
1,101 | -3 | ||
1,100 | -4 | ||
1,011 | -5 | ||
1,010 | -6 | ||
1,001 | -7 | ||
1,000 | -8 |
Свойства кодов:
1. Операции должны выполняться над данными, представленными в одном и том же коде: , , ;
2. Положительные числа в , , не меняют своего представления;
3. Результат выполнения операций сложения и вычитания над числами, представленными в , , или , являются , , или соответственно;
4. Двоичный набор, представляющий () в и , является запрещенной комбинацией;
5. В отличие от , , в нельзя отбрасывать нули после знакового разряда в целой части и нули в конце дробной части отрицательного числа (разрешается отбрасывать ).
Для корректного выполнения операций в компьютерной системе существует регистр флагов табл.2.5.
Таблица 2.5 - Регистр флагов - FLAGS
Бит | ||||||||||||||||
Флаг | NT | IOPL | OF | DF | IF | TF | SF | ZF | AF | PF | CF |
В регистре флагов, находится группа флагов, которые отвечают за корректность выполнения арифметических операций. Эти флаги, служат признаками, представляющими общую характеристику результата выполнения арифметических операций. Наиболее широко применяются следующие арифметические флажки:
- флажок переноса (Flag Carry), обозначаемый (FC). Устанавливается в (1) в двух случаях: 1)если при выполнении операции сложения имеет место перенос из старшего бита результата (представляет собой расширение результата на 1 бит влево); 2) если при выполнении операции вычитания имеет место заем (borrow) в старший бит. Это возможно в случае, если уменьшаемое меньше вычитаемого. Если операнды интерпретируются как беззнаковые числа, данный флажок является признаком переполнения компьютерной системы.В операциях над знаковыми числами самостоятельного значения не имеет.
- флажок вспомогательного переноса или дополнительный перенос (Flag Auxiliary), обозначаемый (FA). При сложении показывает перенос, а при вычитании - заем из младшей тетрады (бит 3) результата. Используется в операциях двоично-десятичной арифметики.
- флажок нуля (Flag Zero), обозначаемый (FZ). Признак нулевого результата. Устанавливается в (1) когда результат выполнения операции равняется (0).
- флажок знака (Flag Sign), обозначаемый (FS). Повторяет состояние знакового бита.
- флажок переполнения (Flag Overflow), обозначаемый (FО). В операциях над знаковыми числами показывает, находится ли результат внутри диапазона представимых чисел:
- – результат правильный;
- – возникло переполнение. Следует отметить, что (FO) устанавливается в (1), если перенос в старший разряд и из него не совпадают.
При выполнении операций сложения и вычитания чисел в дополнительных кодах обрабатывающее устройство компьютера не делает различий между знаковыми и беззнаковыми операндами.
То есть операнды должны интерпретироваться самим пользователем как знаковые или беззнаковые.
В операции вычитания используется дополнительный код вычитаемого.
Если длина операндов превышает длину машинного слова, то сложение и вычитание выполняют в несколько приемов, организуя программный цикл.
Операцию начинают с младших частей операндов, «продвигаясь» далее в сторону старших частей.
На каждом шаге должны обрабатываться возникающие переносы (или заемы), при этом могут возникнуть четыре случая.
Обозначения принятые на рис.2.9 - 2.11:
- над стрелкой обозначает - (нет);
- над стрелкой обозначает -(да);
- - знаковый бит;
- - старший значащий бит;
- - младший значащий бит.
Случай №1. При выполнении арифметической операции (рис.2.9) (а) возникла следующая ситуация:
1. Отсутствует переход из старшего значащего бита в знаковый.
2. Отсутствует переход из знакового бита за пределы разрядной сетки.
3. Флаг переполнения .
4. Флаг переноса .
5. Флаг знака повторяет значение знакового бита.
6. Флаг нуля , если результат выполнения арифметической операции получился равен нулю, то значение флага устанавливается равным единице, в противном случае - нулю.
Случай №2. При выполнении арифметической операции (рис.2.9) (б) возникла следующая ситуация:
1. Есть переход из старшего значащего бита в знаковый.
2. Есть переход из знакового бита за пределы разрядной сетки.
3. Флаг переполнения .
4. Флаг переноса .
5. Флаг знака повторяет значение знакового бита.
6. Флаг нуля , если результат выполнения арифметической операции получился равен нулю, то значение флага устанавливается равным единице, в противном случае - нулю.
а)
б)
Рисунок 2.9 - Пример отсутствия переполнения разрядной сетки КС
Случай №3. При выполнении арифметической операции (рис.2.10) возникла следующая ситуация:
1. Есть переход из старшего значащего бита в знаковый.
2. Отсутствует переход из знакового бита за пределы разрядной сетки.
3. Флаг переполнения , есть переполнение в области положительных чисел.
4. Флаг переноса .
5. Флаг знака повторяет значение знакового бита.
6. Флаг нуля , если результат выполнения арифметической операции получился равен нулю, то значение флага устанавливается равным единице, в противном случае - нулю.
Случай №4. При выполнении арифметической операции рис.2.11 возникла следующая ситуация:
1. Отсутствует переход из старшего значащего бита в знаковый.
2. Есть переход из знакового бита за пределы разрядной сетки.
3. Флаг переполнения , есть переполнение в области отрицательных чисел.
4. Флаг переноса .
5. Флаг знака повторяет значение знакового бита.
6. Флаг нуля , если результат выполнения арифметической операции получился равен нулю, то значение флага устанавливается равным единице, в противном случае - нулю.
Рисунок 2.10 - Пример переполнения разрядной сетки КС в области положительных чисел
Рисунок 2.11 - Пример переполнения разрядной сетки КС в области отрицательных чисел
При выполнении арифметических операции знакового сложения и вычитания могут возникнуть следующие случаи:
Случай №1. Известно, что , тогда:
.
Случай №2. Известно, что и , тогда:
.
() эквивалентно переносу в знаковый разряд, т.к.: .
Тогда: .
Случай №3. Известно, что и , тогда: , по сути, представляет собой дополнительный код отрицательной разности:
, так как: .
Случай №4. Известно, что , тогда:
.
Первое () игнорируется, т.к. эквивалентно переносу в знаковый разряд, а - суммы модулей. При условии, что .
Контрольные вопросы
1. Какие флаги в регистре флагов, отвечают за корректность выполнения арифметических операций сложения и вычитания.
2. Сформулируйте правила сложения и вычитания двоичных чисел.
3. Как представляются двоичные числа в прямом, обратном и дополнительном коде.
4. Назовите свойства прямого, обратного и дополнительного кодов.
5. Объясните принцип работы флага .
6. Объясните принцип работы флага .
7. Объясните принцип работы флага .
8. Объясните принцип работы флага .
9. Назовите случаи, которые могут возникнуть при выполнении арифметических операций знакового сложения и вычитания.