
- •Основы микропроцессорной техники
- •Введение
- •1. Цель работы
- •2. Теоретическая часть
- •2.3 Двоичная арифметика.
- •2.4 Синтез логических схем на элементах комбинационного типа.
- •Основные теоремы алгебры логики
- •Теоремы для двух переменных и более
- •Не и и-или-не
- •Х2 х2
- •2.6 Система команд однокристального микропроцессора
- •3 Материалы, приборы, оборудование
- •4 Указания по технике безопасности
- •5 Порядок проведения лабораторного практикума
2.3 Двоичная арифметика.
Правила арифметики во всех позиционных системах аналогичны, и в двоичной позиционной системе счисления выполнение арифметических действий над двоичными числами задается с помощью таблиц двоичного сложения, вычитания и умножения. Основной операцией, которая используется в цифровых устройствах при выполнении различных арифметических действий, является операция алгебраического сложения чисел, т. е. сложения, в котором могут участвовать как положительные, так и отрицательные числа. Вычитание легко сводится к сложению путем изменения на обратный знак вычитаемого, а операции умножения и деления также сводятся к алгебраическому сложению и некоторым логическим действиям.
Сложение двух чисел в двоичной системе счисления выполняется на основе таблицы двоичного сложения:
0 + 0 = 0,
0 + 1 = 1,
1 + 0 = 1,
1 + 1 = 10.
Двузначная сумма в последнем случае означает, что при сложении двух двоичных цифр, равных 1, в каком-либо разряде двоичного числа возникает перенос в соседний старший разряд. Этот перенос должен быть прибавлен к сумме цифр, образовавшейся в соседнем разряде.
При сложении двух многоразрядных двоичных чисел цифры разрядов суммы формируются последовательно, начиная с младшего разряда. Цифра младшего разряда суммы образуется суммированием цифр младших разрядов слагаемых. При этом кроме цифры разряда суммы формируется цифра переноса в следующий, более старший разряд, если оба младших разряда единицы. Таким образом, в разрядах, начиная со второго, могут суммироваться три цифры: цифры соответствующего разряда слагаемых и перенос, поступающий в данный разряд из предыдущего. Пример сложения двух многоразрядных двоичных чисел:
1 1 0 1 1 0 1 — первое слагаемое
+
1 0 0 1 1 1 1 — второе слагаемое
0 1 0 0 0 1 0 — поразрядная сумма без учета переносов
+
1 1 1 1 — переносы
10 1 1 1 1 0 0 — окончательная сумма
Непосредственно под двумя слагаемыми записан результат поразрядного сложения без учета переноса. В тех разрядах, в которых оба слагаемых равны единице, поразрядная сумма равна 0. В этих разрядах образовался перенос в соседний старший разряд, который отмечен в следующей строке. В результате сложения строки поразрядных сумм со строкою переносов получается окончательная сумма. При сложении поразрядной суммы с переносами удобно пользоваться следующим правилом: если в результате поразрядного суммирования образовалась группа единиц, расположенных рядом, и в младший разряд этой группы поступает перенос 1, то он переводит все единицы этой группы в нули, а ближайший за рядом единиц 0 — в 1. Это правило можно использовать при сложении следующих чисел:
1 0 1 1 0 1 0 0 1 — первое слагаемое
+
1 1 0 0 1 1 1 1 1 — второе слагаемое
0 1 1 1 1 0 1 1 0 — поразрядная сумма
+
1 1 1 — переносы
1 1 0 0 0 0 1 0 0 0 — окончательная сумма
Использование этого правила позволяет ускорить формирование окончательной суммы.
Вычитание двух чисел в двоичной системе выполняется на основе таблицы двоичного вычитания:
0 — 0 = 0,
1 — 0 = 1,
1 — 1 = 0,
10—1 = 1.
Если при поразрядном вычитании приходится вычитать из нуля в уменьшаемом единицу в вычитаемом, то делается заем в соседнем старшем разряде, т. е. единица старшего разряда представляется как две единицы данного разряда. Вычитание в этом случае выполняется в соответствии с таблицей. Если в соседнем разряде или в нескольких старших разрядах стоят нули, то заем делается в ближайшем старшем разряде, в котором стоит единица. Эта единица представляется в виде суммы числа, состоящего из единицы во всех промежуточных разрядах, в которых находились нули, и двух единиц в данном разряде. Далее производится поразрядное вычитание в соответствии с таблицей. Естественно, что необходимости в дополнительном заеме во всех промежуточных разрядах появиться не может. Например, при вычитании чисел
1 1 1 0 0 0 1 1 — уменьшаемое
__1 1 0 1 1 (11) 1 1 — уменьшаемое с учетом заема
1 0 0 1 0 1 1 0 — вычитаемое
0 1 0 0 1 1 0 1 — разность
В цифровой технике операция вычитания с использованием заема практически не применяется (за исключением отдельных устройств) и реализуется как алгебраическое сложение с применением специальных кодов для представления отрицательных чисел. При этом операция вычитания сводится к операции простого арифметического сложения при помощи обратного и дополнительного кодов, используемых для представления отрицательных чисел.
Обратный код отрицательных двоичных чисел может быть сформирован по следующему правилу: цифры всех разрядов, кроме знакового, заменяются на обратные (инвертируются) — единицы заменяются нулями, а нули единицами. В знаковый разряд ставится единица Обратное преобразование из обратного кода в прямой производится по тому же правилу. При использовании обратного кода операция вычитания реализуется как арифметическое сложение положительного числа, представленного в прямом коде, с отрицательным числом, представленным в обратном коде. Например, при вычитании из числа 10110 числа 01101 уменьшаемое представляется как положительное число в прямом коде 0 10110, а вычитаемое— как отрицательное число в обратном коде 1 10010. В представлении чисел знаковые разряды выделены полужирным шрифтом. При выполнении операции арифметического сложения над этими числами получаем алгебраическую сумму
Перенос, возникающий из знакового разряда, при использовании обратного кода должен прибавляться в младший разряд суммы. В данном примере уменьшаемое по модулю больше вычитаемого, поэтому алгебраическая сумма положительная и представлена в прямом коде. При изменении знаков слагаемых в приведенном примере на обратные
1 01001 — первое слагаемое в обратном коде
+
0 01101 — второе слагаемое в прямом коде
1 10110 — сумма в обратном коде
результатом сложения будет отрицательное число и оно будет представлено в обратном коде.
Дополнительный код отрицательных двоичных чисел может быть сформирован по следующему правилу: цифры всех разрядов, кроме знакового, инвертируются, и в младший разряд прибавляется единица. Дополнительный код может быть получен и из обратного путем прибавления единицы к младшему разряду обратного кода. При этом в знаковый разряд отрицательного числа в дополнительном коде ставится единица. Обратное преобразование из дополнительного кода в прямой производится по тому же правилу.
При использовании дополнительного кода для вычитания двоичных чисел из предыдущего примера получим
0 10110 — первое слагаемое в прямом коде
+
1 10011 — второе слагаемое в дополнительном коде
0 01001 — сумма в прямом коде
При сложении складываются цифры знаковых разрядов с отбрасыванием возникающего из этого разряда переноса. Алгебраическая сумма, полученная в результате сложения, является положительным числом и поэтому представлена в прямом коде. Если знаки слагаемых меняются на обратные:
1 01010 — первое слагаемое в дополнительном коде
+
0 01101 — второе слагаемое в прямом коде
1 10111 — сумма в дополнительном коде
то результат сложения есть отрицательное число и оно оказывается представленным в дополнительном коде.
При алгебраическом сложении двоичных чисел в образовавшейся сумме возможно переполнение разрядной сетки, которое заключается в том, что результат операции — сумма содержит большее число разрядов, чем число разрядов в устройстве, предназначенном для их хранения. Для выявления переполнения разрядной сетки используется модифицированный код. В нем два знаковых разряда и в обоих разрядах положительные числа содержат нули, а отрицательные числа — единицы. Выполнение операций суммирования с использованием модифицированного дополнительного или модифицированного обратного кода производится по сформулированным выше правилам. Если результат суммирования содержит в знаковых разрядах комбинации 01 или 10, то это служит признаком переполнения разрядной сетки. Например, при сложении чисел
00 11011 — первое слагаемое в прямом модифицированном коде
+
11 01011 — второе слагаемое в дополнительном модифицированном коде
00 00110 — сумма в прямом модифицированном коде
Переполнения разрядной сетки не возникает. Перенос из старшего знакового разряда отбрасывается. При сложении чисел 00 10110 и 00 11011
00 10110
+
00 11011
01 10001
в знаковых разрядах результата суммирования возникает комбинация 01, что свидетельствует о переполнении разрядной сетки и ошибочности зафиксированного результата. Возникновение ошибки связано с тем, что при суммировании положительных чисел перенос из старшего разряда оказался зафиксированным во втором из знаковых разрядов. Для регистрации результата суммирования в данном примере требуется шесть разрядов (кроме знаковых). При суммировании отрицательных чисел также возможно переполнение разрядной сетки;
11 010011
+
11 100011
10 110110
В этом случае комбинация 10 в знаковых разрядах указывает на переполнение разрядной сетки.
Умножение двоичных многоразрядных чисел включает в себя операции — определение знака произведения и определение его абсолютной величины. Знаковый разряд может быть получен суммированием цифр знаковых разрядов сомножителей без формирования переноса:
0 + 0 = 0,
0 + 1 = 1,
1 + 0 = 1,
1 + 1 = 0 без формирования переноса
При несовпадении цифр получается 1, что соответствует знаку произведения двух сомножителей с разными знаками.
Абсолютная величина значения произведения определяется путем перемножения чисел без учета их знаков. Перемножение многоразрядных двоичных чисел производится на основе таблицы двоичного умножения
0 x 0 = 0,
0 x 1 = 0,
1 х 0 = 0,
1 х 1 = 1.
При умножении двух двоичных чисел множимое последовательно умножается на каждую цифру множителя, начиная либо с младшей, либо со старшей, и для учета веса соответствующей цифры множителя сдвигается либо влево, если умножение производится, начиная с младшего разряда множителя, либо вправо, если умножение производится, начиная со старшего разряда множителя, на такое число разрядов, на которое соответствующий разряд множителя сдвинут относительно младшего или старшего разряда.
Получающиеся в результате умножения и сдвига частичные произведения после суммирования дают полное произведение. Особенность умножения двоичных чисел состоит в том, что частичное произведение может быть либо сдвинутым на соответствующее число разрядов множимым, если соответствующая цифра множителя равна 1, либо нулем, если соответствующая цифра множителя равна 0:
10111 — множимое
______1101 — множитель
10111 — первое частичное произведение
00000 — второе частичное произведение
10111 — третье частичное произведение
10111_____— четвертое частичное произведение
100101011 — произведение
Тот же результат можно получить при умножении, начиная со старших разрядов множителя:
10111
х 1101
10111
10111
00000
10111
100101011
В цифровых устройствах процессу суммирования частичных произведений придают последовательный характер: формируется одно из частичных произведений, к нему с соответствующим сдвигом прибавляется следующее частичное произведение, к полученной сумме прибавляется с соответствующим сдвигом очередное частичное произведение, и т. д., пока не окажутся просуммированными все частичные произведения и не будет получено полное произведение.
Пример умножения чисел этим методом:
10111 — четвертое частичное произведение
101110 — сдвиг на разряд влево
_10111 — третье частичное произведение
1000101 —прибавление третьего частичного произведения
10001010 — сдвиг на разряд влево
00000 — второе частичное произведение
10001010 — прибавление второго частичного произведения
100010100 — сдвиг на разряд влево
10111 — первое частичное произведение
100101011 — прибавление первого частичного произведения
При таком методе все частичные произведения суммируются с требуемыми сдвигами друг относительно друга, благодаря чему образуется ранее приведенный результат умножения этих чисел.
При умножении дробных чисел меньше единицы умножение удобнее начинать с младшего разряда множителя. Так, при перемножении дробных чисел 0,10111 и 0,1101 получим
0,10111: — первое частичное произведение
0,01011: 1 — сдвиг на разряд вправо
+
00000: — второе частичное произведение
0,01011: — прибавление второго частичного произведения
0,00101: 11 — сдвиг на разряд вправо
+
10111: — третье частичное произведение
0,11100: 11 — прибавление третьего частичного произведения:
0,01110: 011 — сдвиг на разряд вправо
+
10111: — четвертое частичное произведение
1,00101: 011 — прибавление четвертого частичного произведения
0,10010: 1011— сдвиг на разряд вправо
Если требуется сохранить все разряды в произведении, то в разрядной сетке устройства должно быть предусмотрено число разрядов, равное сумме числа разрядов множимого и множителя. Однако при умножении дробных чисел часто в произведении требуется иметь то же число разрядов, что и в множимом. В таком приближенном представлении результата не фиксируются цифры разрядов при сдвигах, выдвигаемые правее вертикальной штриховой линии, показанной в приведенном выше примере. Таким образом, цифры младших разрядов окажутся потерянными и будет получен приближенный результат 0,100101. Далее отбрасывается последний из разрядов, и если этот разряд содержит 1, то 1 прибавляется к следующему разряду для округления результата. Следовательно, полученный результат 0,10011.
Если множимое, или множитель, или оба вместе содержат и целую и дробную части, то запятые в множимом и множителе не учитываются, они умножаются как два целых числа и от полученного произведения справа отделяются запятой т+п разрядов, где п — число дробных разрядов множимого, a m — число дробных разрядов множителя.
Деление двоичных многоразрядных чисел включает в себя две операции — определение знака частного и определение его абсолютной величины.
Знаковый разряд частного может быть получен, как и знаковый разряд произведения, суммированием цифр знаковых разрядов делимого и делителя без формирования переноса. Абсолютная величина частного определяется делением чисел без учета их знаков.
Деление начинается с того, что от делимого слева отделяется группа разрядов, причем количество разрядов в этой группе должно либо равняться количеству разрядов в делителе, либо быть на один разряд больше. Если отделение такой группы возможно, в старший разряд частного записывается 1, в противном случае в разряд единиц частного записывается нуль. Если выявилось, что частное содержит целую часть, то образуется новая группа разрядов путем вычитания из выделенной группы делителя и приписывания к разности очередной цифры делимого. Если в результате получилось число, превышающее делитель, то в частное записывается 1, в противном случае следующая цифра будет равна 0.
В дальнейшем выполняется ряд одинаковых циклов. Если последняя цифра частного была равна 1, то новая группа образуется вычитанием делителя из предыдущей группы и приписыванием очередной цифры делимого. Если последняя цифра частного 0, то для образования новой группы достаточно приписать к предыдущей группе очередную цифру делимого. Последняя цифра целой части частного получается тогда, когда после определения очередной цифры частного 1 или 0 в делимом не останется больше цифр для того, чтобы приписывать их к разности между предыдущей группой и делителем или к самой предыдущей группе. После этого начинается выделение дробных членов частного. Оно отличается от вычисления целых членов только тем, что вместо очередных цифр делимого к предыдущим группам приписываются нули.
Рассмотрим примеры, в которых делимое больше и меньше делителя:
В цифровых устройствах при выполнении операции деления так же, как и при выполнении операции алгебраического сложения, используется дополнительный и модифицированный коды. Например, при делении числа 0,11011 на 0,11101 представляем делитель в дополнительном коде 00011:
При вычитании сдвинутые делители представляются в дополнительном коде.
Для ускорения деления используется деление без восстановления остатка. При этом способе допускаются как положительные, так и отрицательные остатки при вычитании делителя. Если очередной остаток положителен, то в частное пишется 1, а на следующем цикле работы делитель вычитается из сдвинутого на один разряд влево остатка. Если же очередной остаток отрицателен, то в частное пишется 0, а на следующем цикле работы делитель прибавляется к сдвинутому на один разряд влево остатку.
Например, при делении числа N1= 10011 на число N2=0,11001 по способу без восстановления остатка при переходе к модифицированным дополнительным кодам получим N1 = 00 10011, N2=00 11001,
—N2=11 100111:
Как видно из приведенных примеров, деление является весьма трудоемкой операцией. В ряде случаев в цифровых устройствах эта операция заменяется нахождением обратной величины делителя по специальной подпрограмме и последующим умножением делимого на найденную обратную величину делителя, которая вычисляется приближенно на основе какой-либо быстро сходящейся итерационной формулы.