
книги из ГПНТБ / Каган Б.М. Цифровые вычислительные машины и системы учеб. пособие
.pdfдится к арифметическому сложению. В результате уп рощаются арифметические устройства машин.
Для представления двоичных чисел в машине при меняют прямой, обратный и дополнительный коды. Во всех этих кодах предусматривается дополнительный раз
ряд |
для представления |
знака числа, причем |
знак |
«+» |
кодируется цифрой 0, а знак «—» — цифрой |
1. |
|
Положительные числа |
при прямом, обратном |
и до |
полнительном кодах имеют один и тот же вид, а отрица тельные — различный.
Прямой код (G)np двоичного числа G= |
+ 0, уиУ2,—\'п |
||
(уі= 1 или 0) определяется условиями: |
|
|
|
G при G ^ |
0, |
(2- 11) |
|
1—G при G < |
0. |
||
|
|||
Положительное двоичное число с запятой, фиксиро |
|||
ванной перед старшим разрядом, |
|
|
|
G+ = + 0 ,Y 1Ya"-Y„ |
|
(2-12) |
|
в прямом коде представляется в виде |
|
||
(G+)nP = 0, YiY2* |
|
(2-13) |
|
Аналогично отрицательное двоичное число |
|||
G = — 0, ѴаѴг-'-Ѵ» |
|
(2-12а) |
|
в прямом коде представляется в виде |
|
|
|
(G~)nP = 1, 7і Ѵг"' ’Уп- |
(2-U) |
Способы представления чисел (2-13) и (2-14) назы ваются прямым кодом соответственно положительных и отрицательных двоичных чисел.
Сложение в прямом коде чисел, имеющих одинако вые знаки, выполняется достаточно просто. Мантиссы складываются и сумме присваивается код знака слага емых. Значительно более сложной является операция алгебраического сложения в прямом коде чисел с раз личными знаками. В этом случае приходится определять большое по модулю число, производить вычитание ман тисс и присваивать разности знак большего (по модулю) числа. Таким образом, если положительные и отрица тельные числа представлены в прямом коде, операции над кодами знаков и мантиссами выполняются раз дельно.
69
Операция вычитания (алгебраического сложения) сводится к операции простого арифметического сложе ния при помощи обратного и дополнительного кодов, ис пользуемых для представления отрицательных чисел в машине. При этом операция сложения распространяется и на разряды знаков, рассматриваемых как разряды це лой части числа.
Чтобы представить двоичное отрицательное число (2-12, а) в обратном коде, нужно поставить в знаковый разряд единицу, а во всех других разрядах заменить единицы нулями, а нули — единицами:
|
(G~'o6P = 1, <4 <Ѵ • -ап, |
(2-15) |
|
где 0 , - |
1 при \'і = 0 И СГг — О при Уг— 1. |
|
|
При |
записи отрицательного |
числа в дополнительном |
|
коде ставят единицу в разряд |
знака, а цифровую часть |
числа заменяют дополнением модуля числа до целой единицы. Отрицательное число G ~ = —0, уі у2, -.-,Уп в до полнительном коде имеет вид:
(0~)доп = 1> Н е2* • ,6л> |
(2-16) |
где |
|
О, в1еа--.е п = 1 — 0, YxѴа— |
(2-17) |
Установим связь между самим отрицательным чис лом G~ и числами (G~)06p и (G- )ÄOn, представляющи ми его обратный и дополнительный коды.
Вычитая (2-12а) из (2-15), имеем:
\G )обр G = 1, Ol сг2’ ' ’°п |
( 6, ѴхУг'' *Yn)= |
= 1,11 - --1 = 2 — 2~п,
так как cri+Y*== 1- Следовательно,
(G- )O6P — G- + 2— 2~”. |
(2-18) |
Вычитая (2-12а) из (2-16), имеем:
(С~)доп — СГ = 1, ех е2• • • ея — (— 0, Yi Ys• • ■Yn)-
Учитывая (2-17), получаем:
(С")дап = СГ + 2. |
(2-19) |
70
Из (2-18) и (2-19) следует: |
|
|
(0~)доп = |
(С- )обр + 2 -"( |
(2-20) |
где п — число разрядов в |
числе. Таким образом, допол |
нительный код может быть получен из обратного путем добавления к нему единицы младшего разряда.
Рассмотрим представление нуля. В процессе вычис лений могут возникнуть «положительный» и «отрица
тельный» нули: |
|
|
|
|
+ 0,00---0; |
|
|
|
— о,оо...о. |
|
|
Представление |
«положительного» |
нуля одинаково |
|
для прямого, обратного и дополнительного кодов: |
|||
|
(+ 0)пр = 0,00...0. |
|
|
Отрицательный нуль изображается: |
|||
в прямом коде |
|
|
|
|
( - 0 ) пр= |
1,00---0; |
|
в обратном коде |
|
|
|
(— 0) )бр = |
1,1 1 . . . 1; |
||
в дополнительном коде |
|
|
|
(-0)до„ = |
|
+ 2 “ " = |
0,00... 0, |
так как перенос из разряда знака теряется.
Используя обратный или дополнительный код, мож но операции вычитания и сложения чисел различных знаков свести к арифметическому сложению кодов чисел.
Рассмотрим использование обратного кода при ал гебраическом сложении двух двоичных чисел G и Q, ког да одно из них или оба числа отрицательны. Для этого случая может быть сформулировано следующее прави ло (предполагаем, что модуль алгебраической суммы меньше единицы).
При алгебраическом сложении двух двоичных чисел с использованием обратного кода положительные слага
емые представляются |
в прямом |
коде, а отрицатель |
|
ные — в обратном и производится |
арифметическое |
сум |
|
мирование этих кодов, |
включая разряды знаков, |
кото |
рые при этом рассматриваются как разряды целых единиц. При возникновении переноса из разряда знака единица переноса прибавляется к младшему разряду
71
суммы кодов'. В результате получается алгебраическая сумма в прямом коде, если эта сумма положительна, и в обратном коде, если она отрицательна.
Это правило легко проверить. Пусть имеем двоичные
«-разрядные числа G~<i0 и |
0. Их алгебраическая |
|
сумма — 1<G~-|-Q~<;0. В соответствии |
с (2-8) можно |
|
написать: |
|
|
(<Г)обр + (<Г)обр = ( Г + 2 - |
2-" + Q - |
+ 2 - 2 ~ п = |
= 12] + (2 - 2~п) + (СГ + О”) - |
2~л. |
Двойка, стоящая в квадратных скобках, соответству ет переносу из знакового разряда. В этом случае соглас
но сформулированному правилу единица |
переноса до |
||||
бавляется к младшему разряду суммы. |
|
|
|||
В результате получаем: |
|
|
|
|
|
(G іобр + IQ Jo6p = (G |
+ Q |
) + (2 — 2 |
")— 2 +2 |
||
или |
|
|
|
|
|
(б- )обр + (Q~)O6P = (б’- + |
Q-) + |
2 - |
2~n, |
||
откуда согласно (2-18) |
|
|
|
|
|
(G )обр “г (Q |
)обр= |
(G |
-f Q )обр* |
(2-21) |
Итак, сложение с циклическим переносом обратных кодов двух отрицательных чисел дает обратный код их алгебраической суммы.
Рассмотрим алгебраическую сумму двух чисел: поло жительного G+ и отрицательного Q~. Тогда
(G+)np + (<Г)обр = G+ + Q - |
+ 2 - |
2 ~ п . (2-22) |
|
Если (G++Q - ) > 0 , то 2 + (G+-J-Q- ) > 2 |
и |
возникает |
|
перенос из разряда знака. Так как |
перенос |
цикличес |
кий, то двойку нужно в рассматриваемом выражении заменить на 2~п.
В результате имеем: |
|
(G+)пр + ( ( T W = (G+ + Q-) пр |
(2-23) |
(при G+ -f Q~ > О)- |
|
1 Такой перекос называется круговым или циклическим.
72
Если (G++Q - ) < 0 , то (2-|-G++Q~) < 2 и |
переноса |
|
не возникает. В этом случае из (2-22) получаем: |
|
|
(G+ )nP + [Q )обр = (G+ + Q )обр |
(2-24) |
|
(при G+ + Q~ < |
о). |
|
Итак, сложение кодов согласно приведенному прави |
||
лу дает алгебраическую сумму в |
прямом коде, если эта |
сумма положительна, и в обратном коде, если она отри цательна.
Рассмотрим теперь использование дополнительного кода для алгебраического сложения. Приведем соответ ствующее правило (полагаем, что модуль алгебраиче ской суммы меньше единицы).
При алгебраическом сложении двух двоичных чисел с использованием дополнительного кода положительные слагаемые представляются в прямом коде, а отрицатель ные— в дополнительном и производится арифметиче ское суммирование этих кодов, включая разряды знаков, которые при этом рассматриваются как разряды целых единиц. При возникновении переноса из разряда знака единица переноса отбрасывается. В результате получа ется алгебраическая сумма в прямом коде, если эта сум
ма положительна, и в |
дополнительном |
коде, если эта |
||||||
сумма отрицательна. |
|
|
|
|
|
|
||
В самом |
деле, |
если G~<c0 и Q ~ < 0, то согласно |
||||||
(2-18) |
|
|
|
|
|
|
|
|
(G |
)доп + |
(Q )доп = |
G |
Ң- 2 4- Q |
+ 2 |
= |
||
|
= |
2 f |
(G |
+ |
Q |
+ 2 ) . |
|
|
Так как |
— l< G ~ -fQ - <;0, |
то |
величина, |
стоящая в |
скобках, меньше двух, но больше единицы. Двойка, сто ящая вне скобки, образует перенос из разряда знака, ко торый будет отброшен. В результате получаем:
(G )доп + |
(Q )доп = (С + Q |
) + 2 = |
(G + |
Q )доп*(2-25) |
|
Если G + > 0, а Q -< 0 , то |
|
|
|
|
|
|
(G+)np 4- (Q )доп = |
(G+ + |
Q J + |
2. |
|
Если при этом 0 < G++Q- <; 1, то стоящая |
вне скоб |
||||
ки двойка |
дает единицу переноса из |
разряда |
знака, ко- |
73
торая отбрасывается. При этом получаем:
(G+)„p + (<Г)доп = |
(G+ + |
Q_ )np |
(2-62) |
|
(при G+ + Q ~> О). |
|
|
||
Если же —1 < G + + Q ~ < 0 , |
то (G++Q - ) + 2 < 2 |
и пе |
||
реноса из разряда знака |
не возникает. В этом |
случае |
||
1G-^)пр + IQ |
)доп = |
(G+ + |
Q )доп |
(2-27) |
(при G+ -f QT < О)-
Применение дополнительного или обратного кода для представления отрицательных чисел упрощает операцию алгебраического сложения. Алгебраическое сложение чисел с разными знаками заменяется арифметическим сложением кодов, при этом автоматически получается код знака результата. Однако остается нерешенным во прос о выработке признака переполнения разрядной сетки.
Допустим, что производится сложение двух отрица тельных двоичных чисел, представленных в дополнитель ном коде, причем эти числа по модулю меньше, а их сум ма по модулю больше единицы, например:
(<7)доп= 1,01010 (—0,10110)
(<3)доп = 1,00101 (— 0,11011)
0 , 0 1 1 1 1
При сложении кодов теряется единица переноса из разряда целых единиц и результат ошибочно восприни мается как положительное число, меньшее единицы.
Отметим, что при алгебраическом сложении двух чисел G и Q, каждое из которых по модулю меньше еди ницы, может возникнуть переполнение разрядной сет ки, но при этом модуль получаемой суммы всегда мень ше двух. Это обстоятельство облегчает построение кодов, по виду которых можно судить о переполнении разрядной сетки.
Для получения признака переполнения разрядной сетки применяют модифицированные прямой, дополни тельный и обратный коды. Эти коды отличаются от ра нее рассмотренных кодов тем, что для представления знака используются два разряда. При этом знак плюс обозначается 00, а знак минус — 11.
При алгебраическом сложении чисел знаковые раз ряды рассматриваются как разряды целой части числа.
74
При возникновении переноса единицы из старшего разряда знака эта единица отбрасывается, если отрица тельные числа представляются модифицированным до полнительным кодом, или производится циклический пе ренос в младший разряд мантиссы, если отрицательные числа изображаются модифицированным обратным ко дом.
При алгебраическом сложении на переполнение раз рядной сетки (модуль алгебраической суммы больше единицы) указывает несовпадение цифр в знаковых раз рядах. Комбинации 01 в знаковых разрядах соответст вует положительное число, а комбинации 10—отрица тельное число.
В этих случаях модуль суммы
|
|
|
|
1 < |
М < |
2. |
|
Сказанное иллюстрируется примерами (индексом м |
|||||||
обозначен модифицированный код). |
|
||||||
Пример 1. |
|
— |
|
|
|
|
|
G = |
0,10110 |
|
<0)^=11,01001 |
||||
Q= |
— 0,11011 |
|
(Q)“ 6p = 11,00100 |
||||
G + Q = |
— 1,00001 |
|
|||||
|
~П1,00100 |
||||||
(переполнение |
|
,11,01001 |
|||||
|
1 10,01101 |
||||||
разрядной сетки) |
|
|
—1 |
||||
|
|
|
|
|
|
10,01110 |
|
|
|
|
|
|
(G-hQ)“6p == 10,01110 |
||
|
|
|
|
(О)“ о п = |
11,01010 |
|
|
|
|
|
|
(Q)"on= |
11,00101 |
|
|
|
|
|
|
|
+ |
11,01010 |
|
|
|
|
|
|
|
|
|
|
|
|
|
_______________11,00101 |
|
||
|
|
|
|
( G + Q ) “ |
( 1) 10,01111 |
|
|
Пример 2. |
G = |
|
= |
10,01111 |
11,00011 |
||
|
|
0,10011 |
|
(Q)“6p= |
|||
G + |
Q = |
— 0,11100 |
|
(G)“ p = |
00,10011 |
||
Q = |
— 0,01001 |
|
+ |
00,10011 |
|||
(нет |
переполнения) |
|
(G + Q)“ p = |
11,00011 |
|||
|
|
|
|
|
|
1 1 , 1 0 1 1 0 |
|
|
|
|
|
|
|
I f .10110 |
75
|
|
(G)M = |
00,10011 |
|
|
|
|
|
' |
' п р |
|
|
|
|
|
(Q)M =11,00100 |
|
|
||
|
|
'^•'доп |
* |
|
|
|
|
|
|
+ |
00,10011 |
|
|
|
|
|
11,00100 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
11,10111 |
|
|
|
|
(G + Q)"on=n,10111 |
|
|
||
Пример 3. |
|
|
|
|
|
|
0 |
= |
0,10110 |
|
(G)£p = 00,10110 |
||
Q = |
0 ,1 1 1 0 1 |
|
(Q)“P= 00,11101 |
|
||
G + Q |
= |
1 ,10011 |
|
|
||
|
00,10110 |
|||||
разрядной |
|
|||||
|
+ |
|
|
|||
|
01,10011 |
|||||
(переполнение |
______________ 00,11101 |
|
||||
|
сетки) |
(G+ Q)“p= 01,10011 |
||||
Пример 4. |
|
|
|
|
|
|
G = |
— 0 ,0 1 1 0 1 |
|
(G)o6P = |
11,10010 |
||
Q = |
0 ,1 0 1 0 1 |
|
||||
|
(Q)np = 00,10101 |
|||||
G + Q = |
0 ,0 1 0 0 0 |
|
||||
|
|
11,10010 |
||||
(нет |
переполнения) |
|
+ |
|||
|
00,10101 |
|||||
|
|
|
|
100,00111 |
||
|
|
|
________I - - |
->1 |
||
|
|
|
|
|
00,01000 |
|
|
|
|
( ° |
+ Q)np = |
oo, (иooo |
(G)“on= 11.10011
(Q)“p= 00,10101 11,10011
+
_______________ 00,10101
(1)00,01000 (G + Q)np =00,0100°
Показанные на рис. 2-2 и 2-3 разрядные сетки соот ветствуют формам, в которых слова записываются в ячейки оперативной памяти. В арифметическом устрой стве для контроля переполнения вводят дополнительно второй знаковый разряд мантиссы, а также второй зна ковый разряд, порядка (для машин с плавающей запя той при отсутствии смещения порядка) и для изображе
76
ния мантиссы и порядка используют модифицированные коды с двумя знаковыми разрядами.
Отметим особенности нормализации и выполнения сдвига для отрицательных чисел, представленных в до полнительном (обратном) коде.
У нормализованного положительного или отрицатель ного числа с мантиссой, изображаемой в прямом коде, цифра в старшем 5-ичном разряде мантиссы должна быть отлична от нуля. Для отрицательных мантисс, пред ставленных в обратном или дополнительном коде, усло вие нормализации | q 1/5 выполняется, если цифра
встаршем 5-ичном разряде мантиссы есть нуль.
Вслучае чисел с плавающей запятой комбинации 01 и 10 в знаковых разрядах мантиссы указывают на нару
шение |
нормализации |
влево, |
а комбинации цифр 00 |
и 1 cr.si |
(cTsi^O) в младшем знаковом разряде и старшем |
||
5-ичном цифровом |
разряде |
мантиссы сигнализируют |
|
о нарушении нормализации |
вправо. Для восстановле |
ния нормализации производится сдвиг мантиссы впра во (или влево) на нужное число разрядов, при этом порядок увеличивается (уменьшается) на соответствую щее число единиц.
Если отрицательные числа представляются в допол нительном (обратном) коде, сдвиг производится по осо бым правилам («модифицированный сдвиг»), с тем что бы в результате сдвига дополнительного (обратного) кода числа х на т 5-ичных разрядов получился дополни тельный (обратный) код числа Smx или S~mx соответст венно для сдвига влево или вправо.
При модифицированном сдвиге дополнительного (об ратного) кода вправо в освобождающиеся старшие раз ряды мантиссы записываются единицы, а при сдвиге влево единицы записываются в освобождающиеся млад шие разряды.
2-5. К О Д И Р О В А Н И Е Д Е С Я Т И Ч Н Ы Х Ч И С Е Л
В большинстве вычислительных машин и систем для представления и хранения информации внутри машин и ее преобразований используются двоичный алфавит и двоичная система счисления. Однако и в этом случае для облегчения связи человека с машиной необходимо иметь возможность готовить и вводить в машину исход
77
ную информацию в привычной для человека десятичной системе и получать результаты обработки информации в этой же системе.
Для этой цели необходимы специальные коды, поз воляющие представлять десятичные цифры посредством букв двоичного алфавита (0 и 1). Такие коды называ ются двоично-десятичными.
Был предложен ряд систем кодирования. Выбор той или иной из них зависит от особенностей использования десятичной информации в вычислительных устройствах Если десятичные числа используются только при вводе и выводе информации, а вычисления производятся в двоичной системе, то наиболее важными требования ми к системе кодирования десятичных чисел являются наглядность представления десятичных чисел и просто та перевода чисел из десятичной системы в двоичную
иобратно.
Вмашинах, предназначенных для обработки эконо мической информации, часто сами операции над числа
ми выполняются в десятичной системе счисления. В этом случае способ кодирования десятичных чисел приходит ся выбирать с учетом удобства выполнения над ними арифметических операций.
Наконец, если определяющим моментом является достоверность подготовки десятичных данных и переда чи их в машину, то для выбора способа кодирования существенны простота контроля правильности поступа ющих данных и возможность исправления возникающих при передаче ошибок.
Система кодирования десятичных знаков, как впро чем и любых других знаков \ посредством букв дво ичного алфавита должна удовлетворять следующим ус ловиям: а) в кодовом слове легко должна определяться граница между кодами рядом записанных знаков; б) ка ждому знаку должна соответствовать одна единствен ная комбинация букв двоичного алфавита.
Проще |
всего удовлетворяется первое требование, ес |
ли коды |
всех символов имеют одинаковую дли |
ну (число разрядов). Тогда, если известно местоположе ние начала слова, легко определяется граница между соседними кодами знаков. Чтобы можно было предста-
1 В следующем параграфе рассматривается кодирование алфа витно-цифровой (текстовой) информации.
78