Методические указания по организации самостоятельной работы студентов. Одними из базовых арифметических операций в компьютерной системе являются арифметические операции сложения и вычитания
Одними из базовых арифметических операций в компьютерной системе являются арифметические операции сложения и вычитания, при выполнении которых используются поразрядные логические операции, а также операции сдвигов.
Компьютерная система выполняет сложение и вычитание операндов по правилам сложения и вычитания двоичных чисел рис.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. Назовите случаи, которые могут возникнуть при выполнении арифметических операций знакового сложения и вычитания.