![](/user_photo/_userpic.png)
книги из ГПНТБ / Бирюков Н.Е. Основы электронной вычислительной техники
.pdf§8. к о д ы ДВОИЧНЫХ ЧИСЕЛ
ВЭЦВМ схемы, реализующие операцию сложения, получаются гораздо проще и компактнее схем, выполняющих операцию вычи тания. Поэтому обычно в цифровых машинах применяются только схемы сложения, а операцию вычитания заменяют сложением со ответствующих кодов чисел.
Вцифровых вычислительных машинах различными кодами изображаются только двоичные числа, выраженные правильными дробями. Применяются следующие коды чисел: прямой, обратный, дополнительный, обратный модифицированный и дополнительный модифнцированиый.
Прямой код используют при умножении н делении, а осталь ные— для замены операции вычитания операцией сложения.
Изображения положительных чисел совпадают во всех кодах, а изображения отрицательных чисел в обратном и дополнительном кодах, а также в их модификациях —- различны.
Прямой код. Число х в прямом коде условно обозначается |
(х)пр. |
||||
Прямой код |
числа х |
получается |
по следующему правилу: |
если |
|
х —+ 0, Х\Х2Ха. |
. . .хг. |
. . ,хп, |
где х — двоичные цифры, то (х)пр = |
||
= х = 0,Х1Х2хл. |
. ,х;. . . |
,хп; |
если |
х = — 0,х,х2Хз. . .xt . . ,хп, то |
|
(Пир™ 1 |
. ,Х[ .. |
. .Л/7. |
|
|
|
Таким образом, прямой код двоичного числа совпадает по изо бражению с записью самого числа, но в разряде знака стоит 0 или 1 соответственно для положительного пли отрицательного числа.
Обратный код. Обратный код числа х обозначается (х)0бр. Обратный код положительного числа совпадает с его прямым ко дом. Поэтому, если х > 0, то (х) 0бр = (х) Г1„ = х.
Для отрицательного числа обратный код получается но сле дующему правилу: в знаковый разряд числа вписывается единица, а в цифровых разрядах пули заменяются единицами, а единицы — нулями.
Таким |
образом, |
. |
если |
имеем |
отрицательное |
число |
|
х = —0,XiX2x,4. |
. . .х. . |
.х, то его изображение в обратном коде бу |
|||||
дет (х)0бр = l,xix2x3. . |
. |
.л',-.. ■ -х„, где |
Xi = 1, |
если х г = 0; |
х( = 0, |
||
если х i -----1. |
|
|
|
|
|
|
|
Приме р . |
х = —0,101010; |
(х)обр = 1,010101. |
|
||||
|
|
||||||
В ЭЦВМ при сложении обратных кодов |
по соответствующим |
||||||
правилам получаем обратный код суммы. |
|
|
Дополнительный код. Дополнительный код числа х обозна чается (х)доп. При х > 0; (х) доп = (х)пр = х, т. е. дополнительный код положительного числа совпадает с его прямым кодом.
Дополнительный код отрицательного числа получается по сле дующему правилу. В знаковый разряд числа вписывается единица,
20
а во всех цифровых разрядах нули заменяются единицами, а еди
ницы нулями, |
и к младшему разряду прибавляется |
единица. Та |
||
ким образом, |
если |
имеем отрицательное |
число х = —0,Х]Х2Хз. . . . |
|
х ь . . .xWl to |
его |
изображение в дополнительном |
коде будет |
|
(х )доп= 1 ,*1*2*з- ■ ■ ■Х1 . . .хп+ 0,000. . . |
.1, n-разрядов, где х/ = 1 |
|||
если х =0 н х i = 0, если x t —1. |
|
|
Пример.
jc= —0,101011; (х)дои= 1,010100 + 0,000001 = 1,010101.
Дополнительный код отрицательного двоичного числа есть до полнение этого числа до двух (10 в двоичной системе), т. е.
(*)дои=10 + *- Если х = - 0,101011, то (х) чоп= 10—0,101011 = = 1,010101.
При сложении дополнительных кодов по соответствующим пра вилам в машине получают дополнительный код суммы.
Модифицированный обратный код. Модифицированный обрат ный код х обозначается (х)”б . Правильные двоичные дроби пере
водятся в модифицированный обратный код по правилам, которые применяются для перевода в обратный код. Отличие лишь в том, что в модифицированном обратном коде па изображение знака отводятся два разряда.
Пример. |
|
х = 0,101010; |
(лг)”вр = 00,101010. |
х = —0,101010; |
(x)“jp = 11,010101. |
Модифицированный дополнительный код. Число х в модифици рованном дополнительном коде обозначается (х)“011. Числа пере
водятся в этот код так же, как и в дополнительный, но на изобра жения знака отводятся два разряда.
Пример.
х= 0,101011; (jc)"on = 00,101011.
*= —0,101011; (х) дОП= 11,010101.
§9. СЛОЖЕНИЕ ЧИСЕЛ В МАШИНАХ
1.Сложение чисел в машинах с фиксированной запятой
Вмашинах с фиксированной запятой числа складываются в од ном из рассмотренных выше кодов. При сложении обязательно должно выполняться условие, чтобы каждое из слагаемых и их
сумма были меньше единицы.
1) Сложение чисел в дополнительном коде
Числа в дополнительном коде складываются поразрядно, при чем знаковые разряды складываются как разряды целых чисел. Особенность сложения дополнительных кодов заключается в том, что единица переноса, образующаяся при сложении знаковых раз рядов, отбрасывается.
21
Пусть |
складываемые числа х и |
у — правильные дроби, т. е. |
|||
(х + у) < |
1. |
При сложении дополнительных |
кодов |
чисел, удовле |
|
творяющих этим условиям, могут встретиться четыре случая. |
|||||
а) х > 0; |
у > 0; х + у > 0: |
|
|
|
|
|
|
прямой код |
дополнительный код |
||
|
х = 0,100101 |
|
(X) =0,100101 |
||
|
у = 0,001101 |
|
(>')доп = |
0,001101 |
|
* + # = 0,110010 |
(* + |
У)доп = |
0,110010 |
Данный случай не выявляет особенностей сложения в дополни тельном коде, потому что слагаемые положительны, н их изобра жения в дополнительном и прямом кодах совпадают,
б) х > 0; |
у < 0; |
х + у < 0: |
прямой код |
дополнительный код |
|
х — 0,011001 |
( * ) д о п = 0,011001 |
|
у = —0,101101 |
.1у)доп= 1,010011 |
|
х + у = —0,010100 |
(* + У)доп=1,101100 |
|
в) х > 0; |
у < 0; |
х~|-у > 0: |
прямой код |
дополнительный код |
|
х = |
0,101101 |
(•*)ДОп = 0,101101 |
у = —0,011001 |
(У)доп= 1,100111 |
|
х + у = |
0,010100 |
(х -{- у)Доп — 0,010100 |
Единица переноса, получившаяся в разрезе целых чисел после сложения в дополнительном коде, отбрасывается,
г) х < 0; у < 0; х + у < 0: |
|
прямой код |
дополнительный код |
* = —0,100101 |
(*)доп= 1,011011 |
г/= —0,011001 |
(У)доп=и00111 |
х + у = —0,111110 |
(JC + у)дон = 1,000010 |
Сложение чисел в дополнительном коде дает сумму чисел в до полнительном коде, если полученная сумма отрицательная.
2) Сложение чисел в обратном коде
Обратные коды чисел складываются так же, как и дополнитель ные коды, поразрядно, причем знаковые разряды складываются как разряды целых чисел. Особенность сложения обратных кодов состоит в том, что если получается единица переноса из знакового разряда, она прибавляется к младшему разряду суммы кодов, т. е. осуществляется так называемый циклический перенос:
а) х > 0; у > 0; х+г/ > 0.
22 |
N |
Так как слагаемые положительны, то изображения их в обрат ном и прямом кодах совпадают;
б) х > 0; у < 0; х-\-у < 0:
прямой код обратный код
х = 0,001001
р= - 0,010001
х+ у = —0,001000
в) х > 0; у < 0; х-\-у > 0:
прямой код
х = 0,101001
#= —ОДЮПО!
х+ у= +0,011100
(х)обр = 0,001001 (У)обр = 1.101110
(Л- + У)обр= 1,110111
обратный код
(Аг)0б р = |
0,101001 |
(У)0бр = |
1.110010 |
|
10,011011 |
|
!------ >+ 1 |
(■* + У)обР = |
0,011100 |
В данном примере возникает циклический перенос. Единица переноса, получившаяся в разряде целых чисел, прибавляется к младшему разряду суммы обратных кодов;
г) X < 0; у < 0; |
Х + у < О.- |
|
|
прямой код |
обратный код |
||
х ——0,101001 |
(■*)обр= |
1,010110 |
|
~ь |
( У ) о б р = |
1,101110 |
|
у = —0,010001 |
= |
11,000100 |
|
х + г/= —0,111010 |
|||
|
1---- '"I '1 |
||
|
(-,сд-у)обр= |
1,000101 |
3) Признаки переполнения разрядной сетки при сложении чисел в дополнительном и обратном кодах
Если при сложении в дополнительном пли обратном кодах сумма превышает единицу по абсолютному значению, то происхо дит переполнение разрядной сетки суммирующего устройства. Эго приводит к искажению результата вычислений.
П р и м е р Е
Переполнение разрядной сетки при сложении дополнительных кодов чисел:
прямой код |
|
дополнительный код |
|
х = —0,110011 |
_ |
(х)доп=: 1,001101 |
|
_________{/= —0,101101_______ |
[у )доп= |
1,010011_____ |
|
х + у = —1,100000 |
|
(х -|- у)Доп = |
0,100000 |
В результате сложения получился дополнительный код положи тельного числа, в то время как действительная сумма числа отри цательная и равна - 1,100000. Произошло переполнение разряд ной сетки.
П р и м е р 2.
Переполнение разрядной сетки при сложении обратных кодов:
прямой код дополнительный код
х = —0,101010 |
(х)обр= |
1,010101 |
_________ г/= —0,010111_______ |
(у)обр = |
1,101000 |
Х + у = -1,000001 |
' |
10,111101 |
|
__________________ |
|
|
(* + 3 ')о б р = |
0,111110 |
В результате сложения получился обратный код положитель ного числа, в то время как действительная сумма отрицательная.
Результат сложения в обратном коде не соответствует действи тельности.
Переполнение разрядной сетки происходит в тех случаях, когда слагаемые х и у имеют одинаковые знаки. Из приведенных приме ров видно, что признаком переполнения может служить противо положность знака полученной суммы знакам слагаемых. Если целые части складываемых дополнительных или обратных кодов были единицами, то в целой части суммы получается нуль, и на оборот, если целые части складываемых кодов содержат нули, то в целой части суммы получается единица. Следовательно, чтобы зафиксировать момент переполнения разрядной сетки, необходимо устройство, сравнивающее целую часть полученной суммы с це лыми частями обоих слагаемых. Если эти части не совпадают, устройство должно выработать управляющий сигнал для оста новки машины.
При сложении чисел в дополнительном или обратном кодах, устройства, которые обнаруживают переполнение разрядной сетки получаются довольно сложными.
Удобнее и проще обнаруживать переполнение разрядной сетки, если применять модифицированные коды.
4)Сложение чисел в модифицированном дополнительном коде
Вмодифицированном дополнительном коде числа склады ваются так же, как и в дополнительном коде. При сложении воз можны четыре случая:
а) х > 0; у > 0; |
х + у > 0: |
прямой код |
модифицированный |
дополнительный код |
|
х=0,010101 |
' (*)“оп = 00,010101 |
0= 0,101001 |
(у)?оп = 00,101001 |
* + 0 = о , п ш о |
(х~+ У); ~ = 00, 111 п о |
24
б) х > 0; у < 0; х + у > 0:
прямой код
х = 0,110101 у = —0,010100
х+-у = 0,100001 в) х < 0; у < 0; х-\-у < 0:
прямой код
х = — 0,010101
^= — 0,010001
х+ у ——0,100110
модифицированный дополнительный код
ИИш = оо,1ЮЮ1
№ п = П.101 ЮР
(* + У)Зоп = 00,100001
модифицированный дополнительный код
(*)“„„= 11,101011
№п = 1М 01 i n
U -Г У)д0П= 11.01101°
Единица переноса, получившаяся в разряде целых чисел послед сложения в модифицированном дополнительном коде, отбрасы вается.
5)Сложение чисел в модифицированном обратном коде
Вмодифицированном обратном коде числа складываются та ким же образом, как и в обычном обратном коде. В случае возник новения циклического переноса в разряде целых чисел единица переноса прибавляется к младшему разряду суммы обратных
кодов:
х = |
0,110001 |
(*)"бр= |
00,110001 |
У= — |
0,001001 |
(У)обр = |
11,110110 |
х + у= |
0,101000 |
|
100,100111 |
|
______________ 1— >4-1 |
||
|
С*+ |
У)“вр = |
00,101000 |
6) Переполнение разрядной сетки при сложении модифицированных кодов
Переполнение разрядной сетки при сложении модифицирован ных кодов наступает в том случае, если сумма по абсолютной ве личине превышает единицу. Переполнение разрядной сетки проис ходит, когда слагаемые имеют одинаковые знаки.
Рассмотрим примеры переполнения разрядной сетки.
1. Переполнение при сложении модифицированных дополни тельных кодов:
* = —0,101011 |
№ п = |
п,010101 |
у = —0,110010 |
(v)«on= |
11,001 ПО |
х +у —— 1,011101 |
|
10,100011 |
25
Результат сложения 10,100011 в модифицированном дополни
тельном коде не существует. |
модифицированных |
обратных |
|
2. |
Переполнение при сложении |
||
кодов: |
|
|
|
|
* = 0,101101 |
(Х)обр == 00,101101 |
|
|
у = 0,111101 |
(У)о”бр == 00,111101 |
|
|
* + //=1,101010 |
01,101010 |
|
Полученный результат 01,101010 в |
модифицированном |
обрат |
ном коде не существует.
Из приведенных примеров видно, что переполнение разрядной сетки при сложении модифицированных кодов выражается в том, что результат, полученный при сложении, нельзя назвать ни одним из модифицированных кодов.
Признаком переполнения является несовпадение цифр, полу чающихся в двух знаковых разрядах. Чтобы обнаружить момент переполнения, необходимо сравнить цифры в этих разрядах с по мощью специальных устройств.
При несовпадении цифр устройство должно вырабатывать со ответствующий сигнал. Устройство контроля за переполнением раз рядной сетки, применяемое при сложении в модифицированных кодах, может быть значительно проще, чем аналогичное устрой ство, используемое при сложении в дополнительном и обратном кодах.
2. Сложение чисел в машинах с плавающей запятой
При сложении чисел в машинах с плавающей запятой сначала уравниваются порядки слагаемых чисел, а затем складываются их мантиссы. Уравнивание порядков заключается в том, что меньший порядок числа увеличивается до большего п при этом соответ ственно изменяется (денормализуется) мантисса. После этого ман тиссы складываются в одном из модифицированных кодов.
Порядком суммы является общий порядок слагаемых чисел.
Рассмотрим пример действия с нормализованными числами, выполняемого при помощи операций сдвига и сложения, т. е. так, как это осуществляется в машине с плавающей запятой.
|
мантисса |
порядок |
Первое число |
х= 1,101100110 |
ООП. |
Второе число |
г/= 0,110101101 |
0101. |
Сложение производится в следующем порядке:
1. Слагаемое х сдвигается вправо на два знака с тем, чтобы уравнять его порядок 011 с порядком 101 слагаемого у. После сдвига запись слагаемого х будет иметь вид
* = 1,001011001 0101.
26
2. Перевод мантисс х и у в обратный модифицированный код:
мантисса |
х= 11,110100110 |
|
|
мантисса |
г/= 00,110101101. |
|
|
3. |
Сложение мантисс: |
|
|
|
|
(*)о"бр= 11ДЮ100110 |
|
|
|
№ р = |
00,110101101 |
|
|
|
100,101010011 |
|
|
|
I----------- >—|—1 |
|
|
(*+-V)“6p = |
00,101010100 |
4. |
Перевод суммы (х + у) “6 |
в прямой код: |
х+ у = 0,101010100.
5.Запись результата:
х + у = 0,101010100 0101.
Результат сложения после перевода в прямой код мог оказаться и ненормализованным, т. е. после знакового разряда цифровой разряд мантиссы начинался бы не с единицы, а с нуля. В этом слу чае перед записью в ячейку памяти ЗУ необходимо нормализовать мантиссу, т. е. произвести сдвиг числа влево на один знак. Соответ ственно нужно уравнять порядок, т. е. уменьшить его на единицу.
При сложении двух чисел могут быть случаи переполнения раз
рядной |
сетки. Причиной переполнения является то, что |
сумма |
/х + у/ + |
1. Признаком переполнения является наличие |
разных |
цифр в знаковых разрядах, причем комбинация 01 указывает, что сумма положительна, а комбинация 10 — на то, что сумма отрица тельна. Следовательно, по левому из двух знаковых разрядов можно установить знак суммы (0 ы «+ »; 1 « —»). Исходя из этих обозначений, можно сразу получить сумму, не делая повтор ных вычислений. Для этого нужно сдвинуть результат сложения на один разряд вправо, во второй знаковый разряд занести цифру, стоящую в левой части знакового разряда и увеличить порядок на единицу. Эти операции машина выполняет автоматически, после того, как устройство сравнения выработает сигнал, свидетель ствующий о наличии разных цифр в знаковых разрядах.
Переполнение разрядной сетки в машинах с плавающей запя той принято называть нарушением нормализации влево.
Предположим, что после сложения в модифицированном обрат ном коде получили сумму х + у = 10,101011110 0110, т. е. произошло нарушение нормализации влево.
Для осуществления нормализации числа необходимо: 1. Сдвинуть результат вправо:
11010101111.
2. Преобразовать в прямой код:
1101010000.
27
3.Увеличить порядок 0110 на единицу:
,ОНО
■_ 1
0111
4. Результат вычислений будет 1101010000 |
0111. |
§ 10. УМНОЖЕНИЕ ЧИСЕЛ В МАШИНАХ
Умножение чисел в ЭЦВМ сводится к определению знака и чис ловой величины произведения.
Знак произведения определяется суммой знаков сомножителей:
0+ 0= 0; 0+1 = 1; 1+ 0= 1; 1+ 1= 0.
Результат, получающийся при таком сложении, полностью со ответствует правилу алгебры о знаках произведения:
( + ) • ( + ) = ( + ); ( + ) • ( - ) = ( - ) ; ( - ) ■ ( + ) = ( - ) ;
( - ) • ( - ) = ( + )•
После определения знака произведения перемножаются сами числа. Численная величина произведения получается путем после довательного перемножения множимого на все разряды множи теля.
1. Умножение чисел в машинах с фиксированной запятой
Числа в ЭЦВМ с фиксированной запятой умножаются по обыч ным правилам арифметики двоичных чисел. Процесс умножения может осуществляться со сдвигом множимого как влево, так и вправо. В первом случае умножение начинается с младшей цифры множителя, во втором — со старшей.
Сдвиг множимого влево: |
Сдвиг множимого вправо |
1111 |
1111 |
1011 |
1011 |
1111 |
1111 |
1111 |
1111 |
1111 |
1111 |
10100101 |
10100101 |
Произведение множимого на какой-либо разряд множителя называется частным произведением. При умножении двоичных чи сел частное произведение может быть равно или множимому, при умножении на единицу, или нулю, при умножении на нуль. Таким образом, весь процесс умножения в машинах сводится к сдвигам множимого влево или вправо и сложению частных произведений.
28
2. Умножение чисел в машинах с плавающей запятой
В машинах с плавающей запятой умножение осуществляется в следующем порядке:
1.Определяется знак произведения мантисс;
2.Определяется порядок произведения путем алгебраического
сложения порядков сомножителей;
3.Перемножаются мантиссы сомножителей;
4.Осуществляется нормализация порядка (если необходимо).
Пример.
х = —0,00110101; |
у= 10010,1. |
В нормальной форме в ячейках машины сомножители должны быть записаны в следующем виде:
х -> 1110101 |
1010 |
у -^ 0100101 |
0101. |
1. Определение знака произведения:
0+1 = 1.
2. Определение порядка произведения:
(—010) + ( + 101) = + 011.
3. Перемножение мантисс сомножителей:
0,110101
0,100101
110101
110101
__________ 110101
0,011110101001.
Если ячейка памяти запоминающего устройства рассчитана, например, на 10 разрядов, то результат перемножения запишется в следующем виде:
10111101010 ООП.
4. Нормализация результата произведения:
11111010100 0010.
§ 11. ДЕЛЕНИЕ ЧИСЕЛ В МАШИНАХ
Операция деления в ЭЦВМ выполняется значительно реже, чем сложение и умножение.
Деление — это процесс, обратный умножению. Если процесс умножения в двоичной системе счисления сводится к сдвигам мно жимого и сложению частных произведений, то деление чисел можно осуществить методом многократных сдвигов и вычитания делимого, остатков и делителя.
29