
370
.pdfПримеры: |
|
|
|
|
|
|
|||
а) |
х = 0,110 001 |
[x]мобр = 00,110 |
001 |
|
|
||||
|
y = 0,001 001 |
[y]мобр |
= 00,001 |
001 |
|
|
|||
|
x+y = 0,111 010 |
[х+y]мобр= 00,111 010 |
|||||||
Складываются машинные изображения чисел. Ответ: 0,111 |
010. |
||||||||
б) |
х =- 0,110 001 |
[x]мобр = 00,110 001 |
|||||||
|
y = |
0,001 001 |
|
[y]мобр = 11,110 |
110 |
|
|
||
|
x+y = 0,101 000 |
100,100 111 |
|||||||
|
|
|
|
|
+ |
1 |
|
[x+ y]мобр =00,101 000
Единица переноса знакового разряда прибавляется к младшему разряду (циклический перенос)− особенность работы в обратном коде.
Складываются машинные изображения чисел. Ответ: 0,101 000.
в) |
х = -0,110 001 |
[x]мобр = 11,001 110 |
||||||
|
y = |
0,001 001 |
[y]мобр |
= 00,001 001 |
|
|||
|
x+y = |
-0,101 000 |
[x +y]мобр = 11,010 111 |
|||||
|
Складываются машинные изображения чисел. Ответ: -0,101 000. |
|||||||
г) |
х =-0,110 001 |
[x]мобр= 11,110 110 |
||||||
|
y =-0,001 001 |
[y]мобр = 11,001 |
110 |
|
||||
|
x+y = -0,111 010 |
111,000 |
100 |
|
||||
|
|
|
|
+ |
1 |
|
|
[x +y]мобр= 11,000 101
Единица переноса, как и в примере б), прибавляется к младшему разряду.
Складываются машинные изображения чисел. Ответ: -0,111 010. Особенность сложения в обратных кодах: единица переноса
знакового разряда прибавляется к младшему разряду сетки (циклический перенос).
11
2.5. Операция сложения (вычитания) в форме с фиксированной запятой в дополнительном коде
При выполнении операции умножения в машинах с плавающей запятой их порядки складываются (вычитаются). Порядки записываются в разрядной сетке в виде целых чисел. В рассматриваемых примерах сетка имеет 8 разрядов, 1 разряд знаковый.
В разрядную сетку записываются целые числа, запись начинается с заполнения младших разрядов, незанятые разряды заполняются нулями. Примеры:
а) |
А = 101 |
А > 0 |
[A]доп = 0,000 0101 |
|
|
В = 111 |
|
В > 0 |
[B]доп =0,0000 111 |
|
А+В=1100 |
|
[A+B]доп = 0,0001 100 |
Складываются машинные изображения чисел. Ответ: 1100
б) А = 101 |
А > 0 |
[А]доп = 0,0000 101 |
|||||
|
В = -111 |
|
В < 0 |
[B]доп = 1,1111 |
001 |
||
|
А+В =-010 |
|
[A+B]доп = 1,1111 |
110 |
|||
|
|
|
|
- |
|
1 |
|
1,1111 101 инвертируем
-0,0000 010
При переводе результата в обычную двоичную запись из младшего разряда вычитается единица, полученное число инвертируется. Ответ: -10.
в) А = -101 |
А < 0, |
[А]доп = 1,1111 011 |
|||||
|
В = -111 |
|
В < 0 |
[B]доп = 1,1111 001 |
|||
|
А+В =-1100, |
|
[A+B]доп =11,1110 100 |
||||
|
|
|
|
отбрасывается 1 |
|||
|
|
|
|
1,1110 100 |
|||
|
|
|
|
- |
|
1 |
|
|
|
|
|
|
1,1110 011 |
||
|
|
|
|
инвертируем |
|||
|
|
|
|
- 0001 100 |
|
||
|
Особенность |
работы: в дополнительном коде |
«лишняя единица», |
12
полученная в знаковом разряде, отбрасывается. Ответ: -1100
г) |
А = -101 |
А < 0 |
[А]доп |
|
= 1,1111 011 |
|
|
В = |
111 |
В > 0 |
[B]доп = 0,0000 111 |
||
|
А+В = |
010 |
|
[A+B]доп = 10,0000 010 |
отбрасывается 1
0,0000 010
Ответ: 10.
2.6. Переполнение разрядной сетки, простой и модифицированный сдвиги, нарушение нормализации числа
В рассматриваемых примерах сетка имеет 8 разрядов, 1 разряд знаковый. Операция сложения выполняется над мантиссами.
Примеры:
а) |
А = 1 000 000 |
А > 0 |
[А]доп.=0,1000 000 |
|
В = 1 000 011 |
В > 0 |
[B]доп =0,1000 011 |
|
А+В = 10 000 011 |
|
[A+B]доп =1,0000 011 |
При сложении положительных чисел получили отрицательное число, произошло переполнение разрядной сетки. Признак переполнения: знак результата противоположен знакам слагаемых.
б) |
А = |
-1 000 000 |
А < 0 |
[А]доп =1,1000 000 |
|||
|
В = -1 000 011 |
В < 0 |
+ [B]доп |
= 1,0111 |
101 |
|
|
|
А+В =-10 000 011 |
|
[A+B]доп =10,1111 |
101 |
|
||
|
|
|
|
отбрасывается 1. |
|||
|
При |
сложении |
отрицательных |
чисел имеем положительное число, |
произошло переполнение разрядной сетки. Для получения правильного результата необходим простой сдвиг. Для коррекции результата, полученного в примерах а), б), необходимо выполнить простой сдвиг вправо. Рассмотрим,
как выполняется простой сдвиг влево |
и |
вправо положительного и |
отрицательного чисел. |
|
|
Число положительное |
|
Число отрицательное |
0, а1 а2 … аn |
|
1, а1 а2 …аn |
Сдвиг влево на один разряд |
|
Сдвиг влево на один разряд |
13
а1, а2 … аn 0 |
а1, а2 …аn |
Сдвиг вправо на один разряд |
Сдвиг вправо на один разряд |
0,0 а1 а2 … аn-1 |
0, 1 а1 а2 … аn-1 |
зависит от кода: для дополнительного кода =0, для обратного =1. |
|
При сдвиге вправо результата |
в примере а) получим [A+B]доп |
=0,1000001, при этом показатель степени суммы должен быть увеличен на единицу. Аналогичные преобразования необходимо выполнить с результатом, полученным в примере б).
Запишем числа А и В в модифицированном обратном коде и выполним
операцию сложения. |
|
|
|
|
|
|
в) А = 1 000 000 |
[А]обр=00,1000 000 |
|||||
В = 1 000 011 |
[B]обр =00,1000 011 |
|||||
|
[А +В]мобр=01,0000 011 |
|||||
г) А = -1 000 000 |
[А]обр = 11,0111 111 |
|||||
В = -1 000 011 |
[B]обр |
= 11,0111 100 |
|
|
||
|
[А +В]мобр=110,1111011 |
|
|
|||
|
|
+ |
1 |
|
||
|
10,1111100 |
В знаковых разрядах этих примеров имеем комбинацию 01, что является признаком положительного переполнения, и комбинацию 10, которая является признаком отрицательного переполнения, т.е. в результате выполнения операции сложения получилась сумма больше единицы. В этом случае необходимо выполнить модифицированный сдвиг вправо.
Операция, выполняемая над модифицированными изображениями,
дает следующие результаты. |
|
|
|
|
|
||
Исходная комбинация: |
Сдвиг влево |
|
Сдвиг вправо |
||||
|
|
|
на 1 разряд |
|
на 1 разряд |
||
00, а1 |
а2 |
… аn |
0а1, а2 а3 а4… аn -1 |
00,0 а1 |
а2 |
… аn-1 |
|
01, а1 |
а2 |
… аn |
1а1, а2… |
аn 0 |
00,1 а1 |
а2 |
… аn-1 |
10, а1 |
а2 |
… аn |
0а1, а2… |
аn |
11,0 а1 |
а2 |
… аn-1 |
11, а1 |
а2 |
… аn |
1а1, а2… |
аn |
11,1 а1 |
а2 |
… аn-1 |
зависит от кода: для дополнительного кода = 0, для обратного = 1.
При сдвиге вправо результата примера в) получим 00,1000 001, при этом показатель должен быть увеличен на единицу. Подобные преобразования должны быть выполнены в примере г).
Выше было отмечено, что числа с плавающей запятой в вычислительных
машинах должны быть записаны в в нормализованном виде: q-1 ≤ |m | < 1,
14
где q-1– признак нарушения нормализации слева, а 1 – признак нарушения нормализации справа. Когда результат по абсолютной величине оказывается меньше q-1, сдвиг выполняется влево, показатель степени при этом уменьшается на единицу.
2.7. Арифметические операции сложения (вычитания) над двоичными числами с плавающей запятой
В современных вычислительных машинах числа с плавающей запятой хранятся в памяти в прямом коде в нормализованном виде, т.е. представлены мантиссой и порядком.
При выполнении операции сложения необходимо выровнять порядки, операция выравнивания приводит к выталкиванию младших разрядов у чисел с меньшим порядком. Возникает погрешность.
Для выравнивания порядков число с меньшим порядком сдвигается вправо на разницу порядков. После перевода слагаемых в соответствующий код выполняется операция сложения (вычитания). В заключение осуществляется нормализация результата и коррекция значений порядка.
2.8.Умножение двоичных чисел, представленных в форме
сплавающей запятой
Внастоящее время разработано достаточно много методов умножения, включая ускоренные. Они отличаются друг от друга составом используемого оборудования, быстродействием, реализуемыми алгоритмами, точностью полученных результатов. При умножении двоичных чисел можно начинать умножение со старших разрядов и с младших.
Впроизведении двух чисел количество разрядов в пределе доходит до суммы количеств значащих цифр множимого и множителя. Следовательно, при умножении двух мантисс количество разрядов для хранения произведения должно быть удвоено.
Операция умножения состоит из ряда последовательных операций
сложения частных произведений. Операциями сложения управляют разряды множителя. Если в разряде множителя находится единица, то к сумме частных произведений добавляется множимое, если в разряде множителя нуль, то множимое не прибавляется. При этом возможны различные варианты сдвигов: либо должно сдвигаться множимое, либо сумма частичных произведений. Рассмотрим более подробно один из
15
возможных вариантов умножения двоичных чисел в форме с плавающей запятой.
Для запоминания двоичных цифр служит двоичный элемент, имеющий два четко различимых состояния. Этот элемент триггер. Совокупность из n таких двоичных элементов, позволяющая зафиксировать n-разрядное двоичное число, называется регистром (Р). Множимое и множитель хранятся в регистрах.
Умножение осуществляется в 4 этапа:
1)определение знака произведения,
2)определение порядка произведения,
3)перемножение мантисс сомножителей,
4)нормализация результата, если необходимо.
Пример. |
Умножить x*y. |
x = 0, 10 101·2110 |
, |
y=-0,10 |
111·2-011. |
||||
Умножение |
мантисс |
ведется |
в прямом |
коде. |
Множимое: |
мантисса |
|||
[ x] пр = 0, 10 101, его показатель [ x1] обр =0,0 110, множитель: |
мантисса |
||||||||
[y]пр = 1,10 111, его показатель [y1]обр =1,1 100. |
|
|
|
|
|||||
1. Для определения знака |
произведения |
используется логическая |
|||||||
функция сумма по модулю 2, которая обозначается |
О, |
нулем кодируется |
|||||||
знак положительного числа, единицей – знак отрицательного числа. |
|||||||||
|
|
0 О 0 = 0 |
0 О 1 = 1 |
|
|
|
|||
|
|
1 О 0 = 1 |
1 О 1 = 0 |
|
|
|
|||
Знак произведения 0 О 1=1, т.е. отрицательный. |
|
|
|
||||||
2. Порядок произведения определяется |
в |
|
результате |
сложения |
|||||
(вычитания) показателей степени в обратных кодах. |
|
|
|
||||||
|
[x1]обр + [y1обр] = 0,0 110 + 1,1100=0,0011. |
|
|||||||
3. Определение |
мантиссы |
произведения |
(табл. 2). Для |
записи |
множимого и множителя используется разрядная сетка по шесть разрядов: один разряд используется для записи знака, пять – для записи значащих цифр. Для хранения мантиссы произведения потребуется 11 разрядов: 1 знаковый разряд, остальные 10 для хранения значащих цифр мантиссы.
16
|
|
|
Таблица 2 |
|
Определение мантиссы произведения |
||||
|
|
|
|
|
x (P1) |
y (P2) |
→ ∑ |
Пояснения |
|
неподвижен |
→ |
(сумматор) |
|
|
0,10101 |
0,10111 |
0,00000 00000 |
1 такт |
|
|
|
+ 0,10101 |
Анализ R2, если |
|
|
0,01011 |
0,10101 00000 |
младший разряд 1, то x |
|
|
|
заносится в ∑, |
|
|
|
|
0,01010 10000 |
далее сдвиг y и ∑ |
|
|
|
|
|
|
0,10101 |
0,01011 |
0,01010 10000 |
2 такт |
|
|
|
+ 0,10101 |
Анализ R2, если |
|
|
0,00101 |
0,11111 10000 |
младший разряд 1, то x |
|
|
|
заносится в ∑, |
|
|
|
|
0,01111 11000 |
далее сдвиг y и ∑ |
|
0,10101 |
0,00101 |
0,01111 11000 |
3 такт |
|
|
|
+ 0,10101 |
Анализ R2, если |
|
|
0,00010 |
1,00100 11000 |
младший разряд 1, то x |
|
|
|
заносится в ∑, |
|
|
|
|
0,10010 01100 |
далее сдвиг y и ∑ |
|
0,10101 |
0,00010 |
0,10010 01100 |
4 такт |
|
|
|
Анализ R2, если |
|
|
|
|
|
младший разряд 0, то x |
|
|
|
|
не заносится в ∑, |
|
|
0,00001 |
0,01001 00110 |
далее сдвиг y и ∑ |
|
|
|
|
|
|
|
|
|
|
|
0,10101 |
0,00001 |
0,01001 00110 |
5такт |
|
|
|
+ 0,10101 |
Анализ R2, если |
|
|
|
0,11110 00110 |
младший разряд 1, то x |
|
|
0,00000 |
|
заносится в ∑, |
|
|
|
0,01111 00011 |
далее сдвиг y и ∑ |
|
|
|
|
|
|
Ответ: 0,01111 00011.
В рассмотренном примере реализован метод умножения, начиная с младших разрядов, со сдвигом содержимого множителя и сумматора. Для его реализации требуется 2n-разрядный регистр сумматора, два n- разрядных регистра для размещения множимого и множителя.
4.Нормализуем полученный результат: 0,11110 00110*20010.
2.9.Деление двоичных чисел, представленных в форме
сплавающей запятой, с восстановлением остатка
При реализации операции деления в форме с плавающей запятой необходимо выполнить следующие действия:
17

1)определить знак частного,
2)определить показатель степени частного,
3)найти частное,
4)нормализовать полученный результат.
Для определения знака частного, как и в операции умножения, используется функция сумма по модулю 2. Показатель у частного определяется в соответствии с правилами сложения чисел в форме с фиксированной запятой (см. п. 2.5).
Операция деления, как и в десятичной арифметике, является обратной операции умножения и сводится к последовательности операций сдвига и вычитания. Мантиссы должны быть представлены в дополнительном или обратном коде, и над ними выполняются следующие действия (табл. 3).
|
|
|
|
|
|
Таблица 3 |
|||
|
|
|
|
|
|
|
|
|
|
Знаки делимого |
+ |
|
|
+ |
_ |
_ |
|
|
|
А |
|
|
|
|
|
|
|
|
|
Знак делителя |
+ |
|
|
_ |
+ |
_ |
|
|
|
В |
|
|
|
|
|
|
|
|
|
Что делать |
А+ |
|
|
А+В |
А+В |
А+ |
|
|
|
В |
В |
||||||||
|
|
|
|
|
|
|
|
|
|
В табл. 3 символ В указывает на изменение знака операнда на противоположный.
Рассмотрим на примере получение мантиссы частного. А = - 0,100111 (мантисса делимого).
В = - 0,110001 Ошибка! Ошибка связи.
Запишем машинные изображения мантисс в обратном модифицированном коде.
А обрмод 11,011000
В мод |
11,001110 |
|
|
мод |
00,110001 |
В |
|||||
обр |
|
|
|
обр |
|
При делении мантисс результат будет получен в прямом коде. Найдем мантиссу частного (табл. 4), через Сi обозначим цифру,
которая записывается в частное.
|
|
|
Определение мантиссы частного |
|
|
Таблица 4 |
|||
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
←∑ |
|
←Регистр частного |
Примечание |
|||||
11,011 000 |
|
|
000 000 |
←Сдвиг |
|
||||
10,110 001 |
|
|
000 00 __ |
Заносим в ∑ |
|
||||
|
+ 00,110 001 |
|
|
000 001 |
|
|
обрмод |
|
|
|
|
В |
|||||||
11,100 010 |
|||||||||
|
|
|
C1=1, так как знаки |
|
|||||
|
|
|
|
|
|
||||
|
|
|
|
|
делимого |
|
|||
|
|
|
|
|
и остатка совпадают |
|
18

|
|
|
|
|
|
|
|
|
|
|
|
Продолжение табл. 4 |
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
←∑ |
|
←Регистр частного |
Примечание |
|||||||||
11,000 101 |
|
|
|
00001__ |
←Сдвиг |
|||||||||||||
+00,110 001 |
|
|
|
000011 |
Заносим в ∑ |
|
|
|
|
мод . |
||||||||
В |
||||||||||||||||||
11,110 110 |
|
|
|
|
|
|
|
|
|
|
обр |
|||||||
|
|
|
|
С2=1, так как знаки |
||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
делимого |
||||||
|
|
|
|
|
|
|
|
|
|
|
|
и остатка совпадают. |
||||||
11,101 101 |
|
|
|
00011__ |
← Сдвиг |
|||||||||||||
+ |
|
|
00,110 001 |
|
|
|
000110 |
Заносим в ∑ |
|
|
мод |
|||||||
В |
||||||||||||||||||
|
|
|
|
100,011 110 |
|
|
|
|
|
|
|
|
|
|
обр |
|||
|
|
|
|
|
|
С3=0, так как знаки |
||||||||||||
|
|
|
|
|
1 |
|
|
|
|
|||||||||
|
|
|
|
|
|
|
|
|
||||||||||
|
|
|
|
|
|
|
|
|
делимого |
|||||||||
00,011 111 |
|
|
|
|
||||||||||||||
|
|
|
|
и остатка разные |
||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
||||||||
00,011 111 |
|
|
|
|
Восстановление остатка |
|||||||||||||
+ 11,001 110 |
|
|
|
00 110__ |
∑=∑+ |
|
мод |
|||||||||||
В |
||||||||||||||||||
11,101 101 |
|
|
|
|
|
|
|
|
|
обр |
||||||||
11,011 011 |
|
|
|
|
← Сдвиг |
|||||||||||||
|
+00,110 001 |
|
|
|
00110_ |
Заносим в ∑ |
|
мод |
||||||||||
|
|
|
В |
|||||||||||||||
|
|
|
|
|
|
|
||||||||||||
|
|
|
100,001 100 |
|
|
|
|
|
|
|
|
|
|
|
обр |
|||
|
|
|
|
|
|
С4=0,так как знаки |
||||||||||||
|
|
|
|
|
1 |
|
|
|
|
001100 |
||||||||
|
|
|
|
|
|
|
|
|
||||||||||
|
|
|
|
|
|
|
|
|
делимого и остатка |
|||||||||
|
|
|
|
|
0,001 101 |
|
|
|
|
|
||||||||
|
|
|
|
|
|
|
|
|
|
не совпадают |
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
00,001101 |
|
|
|
|
← |
||||||||
+11,001110 |
|
|
|
|
001100__ |
Восстановление остатка |
||||||||||||
|
|
|
|
|
11,011011 |
|
|
|
|
|
|
|
|
|
|
|
||
10,110 111 |
|
|
|
|
← Сдвиг |
|||||||||||||
|
+00,110 001 |
|
|
|
01100_ |
Заносим в ∑ |
|
мод |
||||||||||
|
|
|
В |
|||||||||||||||
|
|
|
|
|
|
|
||||||||||||
11,101 000 |
|
|
|
011001 |
|
|
|
|
|
|
обр |
|||||||
|
|
|
С5=1,так как знаки |
|||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
делимого |
||||||
|
|
|
|
|
|
|
|
|
|
|
|
и остатка совпадают |
||||||
|
|
|
|
|
11,010 001 |
|
|
← Сдвиг |
||||||||||
|
+00,110 001 |
|
|
11001_ |
Заносим в ∑ |
|
мод |
|||||||||||
|
|
В |
||||||||||||||||
|
|
|
|
|
|
|||||||||||||
100,000 010 |
|
|
|
|
|
|
|
|
|
обр |
||||||||
|
|
|
С6=0, так как знаки |
|||||||||||||||
+ |
|
1 |
|
|
110010 |
|||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
делимого |
||||||
|
|
|
|
|
0,000 011 |
|
|
|
||||||||||
|
|
|
|
|
|
|
|
и остатка разные |
||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
00,000011 |
|
|
|
|
← Сдвиг |
||||||||
|
+11,001110 |
|
|
|
|
0,110010 |
Восстановление остатка |
|||||||||||
|
|
|
|
|
11,010001 |
|
|
|
|
|
|
|
|
|
|
|
Ответ: 0,110010.
Операция деления относится к числу неточных, результат получается с некоторой погрешностью. Признаком окончания операции может быть достижение заданной точности (количество разрядов в частном) либо получение остатка, равного 0. Как правило, контроль ведется за количеством сдвигов, равным количеству разрядов в частном.
19
Контрольные вопросы
1.Напишите изображения чисел А=-0,1001 001, В=0,1010 011 в прямом, обратном, дополнительном кодах.
2.Напишите изображения чисел А=-0,1001 001, В=0,1010011 в модифицированном обратном и дополнительном кодах.
3.Назовите особенности операции сложения в обратном и дополнительном кодах.
4.Назовите признаки переполнения разрядной сетки при выполнении операции сложения (вычитания).
5.Сформулируйте алгоритм выполнения операции сложения в цифровых вычислительных машинах с плавающей запятой.
6.Как определяется знак произведения в цифровых вычислительных машинах с плавающей запятой?
7.Как определяется порядок в цифровых вычислительных машинах с плавающей запятой?
8.В каком коде получается результат при выполнении операции деления?
3.ДВОИЧНОЕ КОДИРОВАНИЕ ТЕКСТОВОЙ ИНФОРМАЦИИ
Начиная с конца 60-х годов, компьютеры стали использоваться не только для выполнения сложных математических расчетов, но и для обработки текстовой информации. В настоящее время большая часть персональных компьютеров в мире (и наибольшее время) занята обработкой именно текстовой информации.
При вводе в память компьютера текстовой информации происходит ее двоичное кодирование, символ преобразуется в его двоичный код. Пользователь нажимает на клавиатуре клавишу с символом, и в память компьютера поступает последовательность из электрических импульсов (двоичный код символа). Код символа хранится в оперативной памяти компьютера.
В процессе вывода символа на экран компьютера производится обратный процесс – декодирование, т.е. преобразование кода символа в его изображение.
Традиционно, для того чтобы закодировать один символ, используется количество информации, равное 1 байту, т. е. I = 1 байту = 8 битам. При помощи формулы, которая связывает между собой количество возможных событий К и количество информации I, можно вычислить, сколько
20