Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

computer_ariphm

.pdf
Скачиваний:
64
Добавлен:
15.06.2014
Размер:
582.41 Кб
Скачать

Рис. 1.1

Рассматриваемый способ преобразования потребует выполнения последовательности операций сдвига влево содержимого регистров R1 и R2 с передачей выдвигаемого из регистра R1 содержимого старшего разряда в освобождающийся младший разряд регистра R2. Двоичное число, выдвигаясь из регистра R1, будет вдвигаться в регистр R2. При этом необходимо учитывать следующую особенность выполнения сдвигов в регистре R2. Единица, выдвигаемая при сдвиге из старшего разряда группы R2, имеет вес 24 = 16. Однако, поступая в группу R2′′ (в разряд десятков), эта единица будет иметь вес 10. Таким образом, при передаче единицы из R2в R2′′ происходит потеря 6 единиц. Для компенсации этой потери потребуется прибавить 6 единиц к содержимому R2. Можно показать, что выдвижение единицы из любой 4-разрядной группы регистра R2 требует коррекции содержимого этой группы путем прибавления 6 единиц. Такая же коррекция требуется и в случае, когда после сдвига в 4- разрядной группе возникает число, большее или равное 10. В этом случае прибавление 6 единиц вызывает перенос из старшего разряда группы, который необходимо прибавлять к содержимому следующей 4-разрядной группы.

Более удобным оказывается способ, при котором коррекция производится не после сдвига, а до выполнения сдвига влево. В этом случае коррекция осуществляется прибавлением числа 3 (в результате сдвига оно удваивается и принимает значение 6), а признаком необходимости коррекции является наличие в 4- разрядной группе числа, большего или равного 5 (после сдвига это число оказывается большим или равным 10). При этом передача единицы в следующую 4- разрядную группу осуществляется только путем передачи переноса, возникающего в процессе сдвига (т. е. исключается необходимость прибавления единицы к содержимому группы, как в случае, когда коррекция выполняется после операции сдвига).

Если число разрядов регистра R1 равно n, то преобразование завершается после n-кратного выполнения сдвига.

В таблице 1.1 показан процесс преобразования числа N = 111010112 десятичное представление23510.

 

 

 

 

Таблица1.1

R2′′′

R2′′

R2

R1

 

0 0 0 0

0 0 0 0

0 0 0 0

1 1 1 0 1 0 1 1

Исходное состояние

0 0 0 0

0 0 0 0

0 0 0 1

1 1 0 1 0 1 1

Сдвиг

0 0 0 0

0 0 0 0

0 0 1 1

1 0 1 0 1 1

Сдвиг

0 0 0 0

0 0 0 0

+0 1 1 1

0 1 0 1 1

Сдвиг

 

 

0 0 1 1

 

Коррекция

 

 

1 0 1 0

 

 

0 0 0 0

0 0 0 1

0 1 0 0

1 0 1 1

Сдвиг

0 0 0 0

0 0 1 0

+1 0 0 1

0 1 1

Сдвиг

 

 

0 0 1 1

 

Коррекция

 

 

1 1 0 0

 

 

0 0 0 0

+0 1 0 1

+1 0 0 0

1 1

Сдвиг

 

0 0 1 1

0 0 1 1

 

Коррекция

 

1 0 0 0

1 0 1 1

 

 

0 0 0 1

0 0 0 1

+0 1 1 1

1

Сдвиг

 

 

0 0 1 1

 

Коррекция

 

 

1 0 1 0

 

 

0 0 1 0

0 0 1 1

0 1 0 1

 

Сдвиг

2

3

5

 

 

Рассмотрим обратное преобразование числа из десятичной системы счисления в двоичную. Очевидно, такое преобразование может быть осуществлено при использовании описанных выше действий, выполняемых в обратном порядке: осуществляется серия сдвигов вправо содержимого регистров R2 и R1 с коррекцией результата после каждого сдвига. Коррекция выполняется путем вычитания трех единиц, если содержимое 4-разрядной группы окажется больше или равно 8. Поясним необходимость в такой коррекции. Указанное условие выполняется, если происходит передача единицы из младшего разряда соседней слева группы в старший разряд данной 4- разрядной группы. При этом, если, например, в процессе сдвига передается единица из R2′′ в R2, то ее вес в R2′′ был равен 10, а в результате сдвига его значение должно быть уменьшено в два раза и, следовательно, должно быть равно 5. А так как единица, поступающая в старший разряд группы R2, будет иметь вес 8, то потребуется коррекция вычитанием возникающего избытка в три единицы.

Если число разрядов в регистре R1 равно n, то преобразование завершается после выполнения серии из n сдвигов.

В таблице 1.2 показан процесс преобразования десятичного числа 23510 в двоичную систему счисления.

 

 

 

 

Таблица 1.2

R2′′′

R2′′

R2

R1

 

0 0 1 0

0 0 1 1

0 1 0 1

 

Исходное состояние

0 0 0 1

0 0 0 1

_1 0 1 0

1

Сдвиг

 

 

0 0 1 1

 

Коррекция

 

 

 

 

 

 

 

0 1 1 1

 

 

0 0 0 0

_ 1 0 0 0

_1 0 1 1

1 1

Сдвиг

 

0 0 1 1

0 0 1 1

 

Коррекция

 

 

 

 

 

 

0 1 0 1

1 0 0 0

 

 

0 0 0 0

0 0 1 0

_1 1 0 0

0 1 1

Сдвиг

 

 

0 0 1 1

 

Коррекция

 

 

 

 

 

 

 

1 0 0 1

 

 

0 0 0 0

0 0 0 1

0 1 0 0

1 0 1 1

Сдвиг

0 0 0 0

0 0 0 0

_1 0 1 0

0 1 0 1 1

Сдвиг

 

 

0 0 1 1

 

Коррекция

 

 

 

 

 

 

 

0 1 1 1

 

 

0 0 0 0

0 0 0 0

0 0 1 1

1 0 1 0 1 1

Сдвиг

0 0 0 0

0 0 0 0

0 0 0 1

1 1 0 1 0 1 1

Сдвиг

0 0 0 0

0 0 0 0

0 0 0 0

1 1 1 0 1 0 1 1

Сдвиг

 

 

 

 

 

На рис. 1.2 и 1.3 показаны алгоритмы преобразования чисел рассмотренным способом из двоичной системы счисления в десятичную и обратно.

 

 

Рис. 1.2

Рис. 1.3

1.3.Упражнения и задания

 

 

 

 

Таблица 1.3

Номер

А

B

C

D

варианта

 

 

 

 

1

5170,2368

A39,FB416

4037,58710

1001111100,1101112

2

6304,3528

FBA,97516

3987,65410

1011111000,1011102

3

2736,5038

EFO,B9416

3095,74310

1000111101,1101112

4

16518

1D7, 6C16

26010

101111012

Над числами A-D, представленными в таблице 1.3, провести следующие операции:

преобразование восьмеричных чисел в двоичную систему счисления;

преобразование шестнадцатеричных чисел в двоичную систему счисления;

преобразование двоичных чисел в восьмеричную систему счисления;

преобразование двоичных чисел в шестнадцатеричную систему счисления;

преобразование восьмеричных чисел в десятичную систему счисления;

преобразование шестнадцатеричных чисел в десятичную систему счисления;

преобразование двоичных чисел в десятичную систему счисления;

преобразование десятичных чисел в шестнадцатеричную систему счисления.

2.ФОРМЫ ПРЕДСТАВЛЕНИЯ ЧИСЕЛ

ВЦИФРОВЫХ УСТРОЙСТВАХ

2.1. Целые числа

Числа в цифровых устройствах могут представляться в форме целых чисел, чисел с фиксированной запятой и чисел с плавающей запятой.

При решении задач целые числа встречаются в случаях представления индексов переменных, подсчета числа повторений каких-либо действий и т. д. Для хранения целых чисел в ячейке памяти предусматривается распределение разрядов (разрядная сетка), показанное на рис. 2.1, а. Один из п разрядов отводится под знак числа, остальные разряды отводятся под модуль числа.

Обычно применяют следующий способ кодирования знака числа: "+" обозначают цифрой 0 в знаковом разряде, "—" – цифрой 1 в знаковом разряде.

Модуль числа занимает в разрядной сетке ее младшие разряды, свободные старшие разряды заполняются нулями. Например, число –1310, представленное в двоичной системе счисления значением –11012, в 8- разрядной сетке имеет вид, показанный на рис. 2.1, б.

Рис. 2.1

Если количество значащих разрядов модуля числа превышает n1, происходит потеря старших разрядов модуля. Это явление, называемое переполнением разрядной сетки, приводит к ошибке в представлении числа.

Диапазон модулей чисел, которые могут быть представлены в n-разрядной сетке, от 0 (при цифре 0 во всех разрядах модуля) до 2n-1 – 1 (при цифре 1 во всех разрядах модуля).

В универсальных ЭВМ обычно используется два формата целых чисел: короткий с числом разрядов n=16 и длинный с n=32. При этом максимальные значения модулей чисел соответственно

215

1 =

25 210

1

=

32 1024

1 32 103 (при n = 16),

231

1 =

2 230

1

 

2 1030 0,3 =

2 109

(при n = 32).

2.2.Числа с фиксированной точкой

При этой форме обычно запятая, отделяющая целую часть числа от ее дробной части, фиксируется перед старшим разрядом модуля числа (рис. 2.2). Таким образом, значение модуля числа всегда оказывается меньше единицы. Это условие путем выбора определенных масштабных коэффициентов должно выполняться для исходных данных задачи и всех промежуточных результатов вычислений.

 

 

 

 

 

 

Знаковый разряд

Разряды модуля числа

Место запятой

 

 

 

 

 

 

 

Рис. 2.2

При занесении числа в ячейку памяти свободные младшие разряды заполняются нулями, а если число значащих разрядов модуля больше п1, то младшие разряды модуля, которые не поместились в разрядной сетке, теряются. Это приводит к погрешности, значение которой меньше единицы

младшего разряда разрядной сетки, т. е. ε абс < 2-(n-1).

При n=16 ε абс < 2-15 = 1/(32103), при n=32 ε абс < 2-31 = 1/(2109).

Если число имеет целую часть, то для ее хранения в разрядной сетке места нет, она теряется, число в разрядной сетке оказывается ошибочным.

Достоинство представления чисел в форме с фиксированной запятой состоит в простоте выполнения арифметических операций; недостатки – в необходимости выбора масштабных коэффициентов и в низкой точности представления чисел с малыми значениями модуля (нули в старших разрядах модуля приводят к уменьшению количества разрядов, занимаемых значащей частью модуля числа).

2.3.Числа с плавающей точкой

Для научно-технических расчетов необходимо представлять числа в широком диапазоне и с достаточно большой точностью. Указанным требованиям отвечают числа с плавающей точкой (рис. 2.3).

Рис. 2.3

Число состоит из мантиссы, старший разряд которой определяет знак числа, и порядка со знаком. Значение модуля мантиссы представляется двоичным дробным числом, т. е. запятая фиксируется перед старшим разрядом модуля мантиссы, порядок представляется целым числом. Порядок указывает действительное положение запятой в числе. Код в приведенном формате представляет значение числа в полулогарифмической форме:

N = M 2П ,

где М и П – мантисса и порядок числа.

Точность представления значений зависит от количества значащих цифр мантиссы. Для повышения точности числа с плавающей запятой представляются в нормализованной форме, при которой значение модуля мантиссы лежит в пределах 0,5≤ |М| < 1. Признаком нормализованного числа служит наличие единицы в старшем разряде модуля мантиссы. В нормализованной форме могут быть представлены все числа из некоторого диапазона за исключением нуля.

Нормализованные двоичные числа с плавающей запятой представляют значения модуля чисел в диапазоне

0,5 2Пmax

 

 

N

 

(1

2m1 )2 Пmax 2 Пmax

 

 

где Пmax = 2 p1 – максимальное значение модуля порядка.

Так, при р=7 Пmax = 2 p1

1=

26

1= 63 и диапазон представления

модулей нормализованных чисел

 

 

N

N

min

max

=

0,5 263 =

264

1064 0,3 1019 ,

=

263 10

63 0,3

1019.

Таким образом, диапазон чисел от 10-19 до 1019.

Для расширения диапазона представляемых чисел при фиксированной длине разрядной сетки (т+р) в качестве основания системы счисления выбирается 24=16. При этом число, представляемое в разрядной сетке, приобретает значение N=М16П. Нормализованная мантисса шестнадцатеричного числа с плавающей запятой имеет значение, лежащее в диапазоне 1/16 ≤ «M «< 1. Признаком нормализации такого числа является наличие хотя бы одной единицы в четырех старших разрядах модуля мантиссы. Диапазон представления чисел в этом случае

существенно расширяется, находясь при том же количестве разрядов порядка в пределах от 10-75 до 1075.

Рассмотрим погрешность представления чисел с плавающей точкой. Абсолютная погрешность представления числа

ε абс = 2(m1) 2 p.

Предельная относительная погрешность отношение абсолютной погрешности к числу при минимальном значении модуля мантиссы нормализованного числа:

ε отн

=

 

 

 

ε абс

=

2(m1) 2 p

= 4 2m.

 

М

 

min

2 p

0,5 2 p

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Отсюда видно, что точность представления чисел определяется количеством разрядов, отводимых в разрядной сетке под мантиссу.

В современных ЭВМ числа с плавающей запятой имеют основание системы счисления 16 и представляются в двух форматах: коротком (с числом разрядов 32) и длинном (с числом разрядов 64). Длинный формат предусматривает увеличение количества разрядов, отводимых в разрядной сетке под мантиссу, за счет чего повышается точность представления чисел.

2.4.Десятичные числа

Для кодирования десятичных чисел используются слова переменной длины с применением двух видов формата: упакованного и распакованного.

Каждая десятичная цифра представляется двоичной тетрадой и занимает в разрядной сетке четыре разряда. Четыре разряда отводятся и для представления знака (собственно знак представляется младшим разрядом тетрады, в остальных разрядах тетрады может использоваться постоянная комбинация 110).

При использовании упакованного формата каждый байт (8 разрядов двоичного числа) содержит две десятичные цифры (рис. 2.4, а).

 

7…4

3…0

 

 

7…4

3…0

 

7…4

3…0

 

Цифра

Цифра

Цифра

Цифра

Цифра

Цифра

 

 

байт

 

 

а)

байт

 

байт

 

 

 

 

 

 

 

 

 

 

 

 

 

 

7…4

3…0

 

 

7…4

3…0

 

7…4

3…0

 

Зона

Цифра

Зона

Цифра

Знак

Цифра

 

 

байт

 

 

б)

байт

 

байт

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рис. 2.4

 

 

 

 

 

 

 

Например, число –637810 представляется в упакованном формате в

следующем виде:

0000

0110

0011

0111

1000

1101.

 

 

 

 

 

 

 

 

 

 

 

 

байт

байт

байт

 

 

 

 

В распакованном формате каждый байт содержит лишь одну десятичную цифру в младшей тетраде; старшая тетрада, называемая зоной,

заполняется стандартной комбинацией 1111 (рис. 2.4, б). Число

–637810

представляется в этом формате в следующем виде:

 

 

1111 0110

1111 0011

1111 0111

1101 10000.

 

байт

байт

байт

байт

 

3.ВЫПОЛНЕНИЕ АРИФМЕТИЧЕСКИХ ОПЕРАЦИЙ

3.1.Машинные коды чисел

Главным преимуществом двоичной арифметики является простота выполнения арифметических операций. В частности, при двоичной системе счисления операция вычитания легко заменяется сложением. Для этого используются некоторые специальные коды чисел, суть которых поясним на простых примерах.

Пусть суммируются числа х и у, например, меньшие 100, представленные в десятичном алфавите. Примем х = 93, у = –24, тогда х+у = 93–24 = 69. Поступим теперь иначе. Заменим –24 суммой –24+100. Тогда х+у = 93+(–24+100) = 169. Чтобы получить нужный результат, следует это число уменьшить на 100, что равносильно отбрасыванию полученной в старшем разряде единицы. Такой способ вычитания называется сложением

уменьшаемого с точным дополнением вычитаемого и последующим отбрасыванием единицы в старшем разряде. Точное дополнение при этом получается дополнением цифр всех разрядов, кроме самого младшего, до основания h – 1, а младшего – до h.

Другой вид дополнения, называемый поразрядным, получается заменой каждой цифры числа ее дополнением до старшей цифры системы счисления. Для предыдущего примера поразрядное дополнение числа 24 есть число 75 (75 = –24+99). Тогда 93+75=168. Результат имеет лишнюю единицу в старшем разряде и нехватку единицы в младшем. Для получения правильного ответа единицу старшего разряда необходимо изъять и добавить ее к младшему разряду. Эта процедура называется циклическим переносом. Истинный результат в рассматриваемом примере получается следующим образом:

отбрасывается

То же имеет место и в двоичной арифметике ЭВМ, где для представления двоичных чисел применяют прямой, дополнительный (точной дополнение) и обратный (поразрядное дополнение) коды. Для обозначения знака чисел используется специальный разряд, цифра которого равна нулю, если число положительно, и единице, если число отрицательно.

В дальнейшем для простоты изложения будем оперировать целыми (положительными и отрицательными) числами.

Прямой код. Целое число х в прямом коде [х]пр представляется в виде

[x]пр =

0ε 1ε 2 ...ε n , если х ≥ 0,

[x]пр =

1ε 1ε 2 ...ε n , если х¢0,

где ε – двоичная цифра 0 или 1.

Пример 3.1.

Пусть х = +10110, тогда [х]пр= 010110; для х = –11011, [х]пр= 111011.

Обратный код. Если двоичное число х=ε 1ε 2ε n является положительным (х> 0), то обратный код этого числа совпадает с прямым.

Если х< 0, то обратный код получают следующим образом. В знаковом разряде записывается единица, а все остальные разряды заменяются дополнениями до единицы. Следовательно,

[x]обр = 1ε 1*ε 2* ...ε n* ,

где ε 1* = 1, если ε i=0, и ε i* = 0, если ε 1=1.

Таким образом, для отрицательных чисел обратный код получается заменой нулей единицами и обратно и дополнением единицы в знаковом разряде.

Пример 3.2.

Пусть х = –101, тогда [х]обр=1010.

Дополнительный код. Дополнительный код числа [х]доп совпадает с самим числом, если х≥ 0. Если х< 0, то дополнительный код получают по следующему правилу: находится обратный код числа и к последнему младшему разряду прибавляется единица.

Пример 3.3.

Пусть х = –11010, тогда [х]доп =100101+00001=100110.

3.2.Сложение и вычитание чисел в ЭВМ с использованием

кодов

Благодаря введению кодов операция чисел заменяется сложением обратных или дополнительных кодов.

Рассмотрим примеры сложения и вычитания двоичных чисел х и у и их десятичных эквивалентов в различных кодах и с помощью этих примеров установим соответствующие правила. Предположим, что технические возможности ЭВМ не позволяют оперировать числами, большими 63 (т. е. n = 6). Если окажется, что х+у > 63, то такое событие называют переполнением разрядной сетки.

Пример 3.4.

Даны х = 22, у = 34, х+у = 56.

Так как числа положительные, то обратный и дополнительный коды одинаковы, знаковый разряд равен нулю.

Отрицательное число у заменяем обратным или дополнительным кодом.

Пример 3.5.

Дано х = 54, у = –23, х+у = 31.

Соседние файлы в предмете Арифметические и логические основы вычислительной техники