Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Теория цифровых автоматов. Учебное пособие
.pdf
61
10
.
..
др
зф
X
Знак 2
6
2
5
2
4
2
3
2
2
2
1
2
0
Знак 2
-1
0 0 0 1 1 0 0 0
0 1 1 0 0 0 0 0
2
-2
2
-3
2
-4
2
-5
2
-6
2
-7
Веса разрядов
Веса разрядов
а
б
Диапазон представления в ЭВМ дробных двоичных чисел будет
приближенно определяться неравенством
Рис. 14. Представление в ЭВМ целых (а) и дробных (б) чисел с
фиксированной запятой
3.3. Кодирование отрицательных чисел в ЭВМ
.
Наиболее широко распространены три способа представления чисел
в зависимости от их знаков или кодирования чисел в ЭВМ: прямой,
обратный и дополнительный коды [5].
Прямой код чисел соответствует обычной записи чисел со своим
знаком:
А1 = +0,0101, [А1]пр = 00101;
А2 = – 0,0101, [А2]пр = 10101.
Для целых чисел в двоичной системе счисления:
А1 = + 1100, [А1]пр = 01100;
А2 = – 1100, [А2]пр = 11100.
Нуль в прямом коде имеет два изображения:
+ 0 = 000…00 = [0]пр,
Прямой код используется в ЭВМ для выполнения арифметических
операций над положительными числами, для записи положительных и
отрицательных чисел в ЗУ, а также в устройствах ввода и вывода.
– 0 = 100…00 = [0]
пр

62
,100110][;111001][;11001,0
111
обр
др
пр
дрдр
AAA
.101010][;110101][;10101
222
обр
ц
пр
цц
AAA
1001110][;1110010][
др
доп
др
пр
AA
1110010][;1001110][
ц
доп
ц
пр
AA
.1110111][;1001001][
ц
доп
ц
пр
AA
Для упрощения выполнения арифметических операций в ЭВМ
отрицательные числа представляются в обратном и дополнительном
кодах.
Обратный код. Чтобы представить двоичное отрицательное число в
обратном коде, нужно поставить в знаковый разряд единицу, а во всех
значащих разрядах единицы заменить нулями, а нули – единицами:
А = – 0,1010. [А]
= 10101.
обр
Примеры обратного кода отрицательных дробного и целого чисел:
Дополнительный код. Для представления отрицательного числа в
дополнительном коде необходимо поставить единицу в знаковом разряде,
а значащую часть числа заменить дополнением модуля числа до единицы,
соответствующей весу знакового разряда числа.
Правило перевода отрицательных чисел из прямого кода в
дополнительный.
В знаковом разряде ставится единица, младшие нулевые разряды до
младшей значащей единицы и младшая значащая единица оставляются
без изменения, в остальных значащих разрядах единицы заменяются
нулями, а нули – единицами.
Примеры:
,
,
Правило перевода отрицательных чисел из обратного кода в
дополнительный.
Дополнительный код отрицательного числа может быть получен из
обратного путем прибавления к нему единицы младшего разряда.

Примеры:
63
[A]
[A]пр =111101; [A]
= 101010; [A]
пр
= 110101; [A]
обр
= 100010; [A]
обр
=110110,
доп
=100011.
доп
Отрицательный нуль изображается:
- в обратном коде [–0]
= 111111…11;
обр
- в дополнительном коде отрицательный нуль отсутствует, т.е. код
нуля в дополнительном коде соответствует коду нуля положительного
числа.
Важно запомнить правило: положительные числа в прямом,
обратном и дополнительных кодах имеют одинаковую форму записи.
Модифицированный код. При выполнении арифметических
операций в ЭВМ иногда возникает необходимость для представления
знака числа использовать не один, а два знаковых разряда. При этом знак
плюс обозначается – 00, а знак минус – 11. Прямой, обратный или
дополнительный коды при машинном представлении числа, в котором для
знака выделяется два разряда, называются модифицированными.
Примеры:
[A1]
[A1]
[A3]
3.4. Сложение и вычитание двоичных чисел, представленных в форме
= 1 01001, [A1]
пр.
= 1 10110, [A1]
обр.
= 1 10111, [A3]
доп.
пр. мод.
обр. мод.
доп. мод.
= 11 01001,
= 11 10110,
= 11 10111.
с фиксированной запятой
Операция сложения двух чисел (целых иди дробных) с
фиксированной запятой с произвольными знаками может выполняться в
ЭВМ в прямых кодах или сводится к арифметическому сложению кодов
чисел путем применения для представления отрицательных чисел
обратного или дополнительного кодов, преимущественно
дополнительного.
При сложении чисел, представленных в прямых кодах,
анализируются знаки слагаемых. Если слагаемые имеют одинаковые
знаки, производится поразрядное суммирование их модулей в
соответствии с правилами сложения двоичной арифметики (А+В):

64
А В А+В
0 0 0 0 1 1 1 0 1
1 1 10
Знаковые разряды участвуют в сложении точно так же, как и
цифровые разряды. При возникновении переноса из разряда знака
единица переноса отбрасывается.
Если результат сложения превышает максимально возможное число
для заданной разрядной сетки, т.е. происходит выход полученного
результата за пределы разрядной сетки в сторону знакового разряда, то
имеет место переполнение (значащий разряд становится знаковым,
результат операции неверный).
Способы выявления переполнения.
1. Для представления чисел применяют модифицированный
код. На переполнение при сложении двух чисел указывают несовпадение
цифр в знаковых разрядах результата. Комбинация 01 соответствует
переполнению положительного результата, а комбинация 10 –
отрицательного.
Пример 1. Найти сумму двух отрицательных машинных чисел с
фиксированной запятой в формате шесть двоичных разрядов со знаком,
представленных в дополнительном коде:
А
А
1 доп
2 доп
= 101001 (целое десятичное число «–23»);
= 101110 (целое десятичное число «–18»).
Для приведенного примера суммируем числа в дополнительном
модифицированном коде
11 01001
+
11 01110
10 10111.
Комбинация 10 в знаковых разрядах результата является признаком
отрицательного переполнения результата.
Результат операции неверный и дальнейшее решение задачи не
имеет смысла. ЭВМ вырабатывает сигнал S = 1 (Останов), если сигнал
S = 0, то переполнения нет, результат верный и можно продолжить
решение задачи.

65
.21,0
,21,1
знзнесли
знзнесли
S
.21,0
,21,1
ppесли
ppесли
S
).(2121,0
),(21,1
реззнзнзнилизнзнесли
реззнзнзнесли
S
Если обозначить знаковые разряды: младший разряд – зн1, старший
разряд – зн2, то значение сигнала S будет вырабатываться по формуле
Если оба слагаемых из того же примера будут положительными
числами
00 10111 (целое число «+23»)
+
00 10010 (целое число «+18»)
01 01001,
то комбинация 01 в знаковых разрядах указывает на переполнение
положительного результата суммирования.
2. Анализируются два переноса – из старшего значащего разряда в
знаковый (p1) и из знакового разряда (p2). Если есть оба переноса или нет
ни одного переноса, то переполнения нет, если есть только один из
переносов, то переполнение. Сигнал S («Останов») будет вырабатываться
по формуле
В современных моделях ЭВМ широко используется второй способ
определения переполнения разрядной сетки результата суммирования.
3. Если отсутствует возможность обнаружения переноса из старшего
значащего разряда в знаковый, например, в случае аппаратной реализации
на многоразрядных сумматорах, то можно использовать способ на основе
анализа знаковых разрядов слагаемых и результата. Переполнение не
возникает, если знаки слагаемых разные, или если знаки слагаемых и знак
результата одинаковые. Если знаки слагаемых одинаковые и не совпадают
со знаком результата, то возникло переполнение.
Алгоритм алгебраического суммирования чисел с фиксированной
запятой, заданных в прямом коде (для представления отрицательных
чисел будем использовать дополнительный код):

66
1) положительные числа остаются без изменения (в прямом коде),
отрицательные числа переводятся в дополнительный код;
2) суммируются полученные коды чисел, причем знаковый разряд
суммируется как значащий;
3) анализируется результат (сумма) на переполнение
(анализируем переносы из старшего значащего разряда и из
знакового): если из двух есть только один перенос, то
вырабатывается сигнал S = 1 и ЭВМ останавливает решение
задачи;
4) если переполнения нет (имеет место два переноса или
отсутствуют оба переноса), то анализируется результат по
знаковому разряду: 0 – результат в прямом коде, 1 – результат
в дополнительном коде.
Пример 2. Заданы числа. Выполнить операцию сложения (А1+ А2).
[А1]пр = 0 0100,
Суммируем [А1]
[А2]пр = 1 1010, [А2]
+ [А2]
пр
доп
+
:
0 0100
1 0110
1 1010
= 1 0110.
доп
пр
доп
.
доп
Переполнения нет, так как отсутствуют оба анализируемых
переноса. Результат отрицательный (в знаковом разряде 1) и представлен
в дополнительном коде:
[А1]
пр
+ [А2]
= 11010
доп
= (10110)
доп
2пр
= (–6)
10.
Проверка: (+4) + (–10) = (–6).
Пример 3. Заданы числа. Выполнить операцию сложения (А1+ А2).
Суммируем [А1]
[A1]пр = 1 0110, [A1]
[A2]пр = 1 1001, [A2]
доп
+ [А2]
:
доп
= 1 1010.
доп
= 1 0111.
доп

67
1 1010
+
доп
1 0111
1 0001
доп
доп.
Единица переноса из знакового разряда в результате игнорируется.
Результат отрицательный и представлен в дополнительном коде.
Переполнения нет, так как присутствуют оба анализируемых переноса.
Результат: [A
рез]доп
= 1 0001; [A
= 1 1111.
рез]пр
Проверка: (–6) + (–9) = (–15).
Пример 4. Заданы числа. Выполнить операцию сложения (А1+ А2).
[A1]пр = 0 0111,
[A2]пр = 0 1110.
Суммируем [А1]
+ [А2]пр:
пр
0 0111
+
0 1110
пр
пр
1 0101пр.
Переполнение есть, так как имеется только один из анализируемых
переносов. Результат неверный. Вырабатывается сигнал «Останов» S = 1.
Операция вычитания чисел (целых или дробных), представленных
с фиксированной запятой, сводится в ЭВМ к алгебраическому сложению
по формуле
[A1]пр – [A2]пр = [A1]пр + [–A2]пр.
Знак вычитаемого, представленного в прямом коде, искусственно
инвертируется. После этого выполняется операция алгебраического
сложения уменьшаемого и вычитаемого по вышерассмотренному
алгоритму с использованием дополнительного кода для представления
отрицательных слагаемых.
Последовательность действий при выполнении в ЭВМ операции
вычитания в дополнительных кодах (числа на вычитание поступают в
прямых кодах).
1. Знаковый разряд вычитаемого, представленного в прямом
коде, инвертируется.

Пример 5. Выполнить операцию вычитания [A1]пр – [A2]пр. Заданы
числа:
68
2. Положительные числа остаются в прямом коде,
отрицательные представляются в дополнительном коде.
3. Суммируются арифметически коды уменьшаемого и
вычитаемого.
4. Анализируется результат арифметического суммирования
кодов на переполнение и в случае его отсутствия
вырабатываются признаки результата (переполнение, равен
0, отрицательный, положительный).
[A1]
[A2]
= 0 1010;
пр
= 0 0111.
пр
[– A2]пр = 1 0111.
Уменьшаемое остается без изменения, так как оно положительное, а
вычитаемое (оно отрицательное) представляем в дополнительном коде:
[– A2]
Алгебраическое суммирование [A1]пр + [– A2]
+
1 1001
= 1 1001.
доп
0 1010
пр
доп
доп
:
0 0011пр.
Переполнения нет, так как присутствуют оба анализируемых
переноса. Результат положительный (в знаковом разряде результата 0) и в
прямом коде.
Проверка: (+10) – (+7) = (+3).
Пример 6. Найти разность чисел [A1]пр – [A2]пр. Заданы числа:
[A1]пр = 1 0111, [A1]
= 1 1001;
доп
[A2]пр = 0 1110, [–A2]пр = 1 1110;
[–A2]
= 1 0010.
доп

69
Алгебраическое суммирование уменьшаемого и вычитаемого в
дополнительном коде:
+1 1001доп
1 0010доп
0 1011доп.
Имеет место переполнение, так как присутствует только один из
анализируемых переносов. Результат неверный. Вырабатывается сигнал
«Останов» S = 1.
3.5. Алгоритм умножения двоичных чисел в прямых кодах в форме с
фиксированной запятой
Правила для умножения методом уголка целых и дробных чисел
можно записать следующим образом:
1) Z = X * Y = Сл1 + Сл2 + … + Слn,
т. е. произведение Z равно сумме слагаемых Слi (i=1, 2, …n), где n –
количество числовых разрядов;
3) Слагаемые Слi и Сл
сдвинуты относительно друг друга на
i+1
один разряд.
Приведенные правила (1-3) позволяют сформулировать алгоритм
пошагового вычисления произведения Z путем отыскания на каждом i-м
шаге частичного произведения ЧПi.
При этом принимается, что на начальном шаге ЧП0 = 0. Число шагов
определяется количеством числовых разрядов множителя.
В общем случае этому алгоритму соответствуют формулы:
Поясним приведенные формулы. Символ «’» означает, что при
вычислении произведения Z рассматриваются только числовые разряды
множителя. В случае использования прямых кодов сомножители (X и Y)
должны быть представлены модулями.
Алгоритм можно компактно сформулировать таким образом:

70
1) сумма частичных произведений ΣЧП0 = 0;
2) анализируется младший разряд множителя Yi:
- если младший разряд множителя
то к предыдущему
значению суммы частичных произведений ΣЧПi прибавляется множимое
;
- если младший разряд множителя
, то предыдущее значение
суммы частичных произведений ΣЧПi не изменяется (прибавление
множимого не выполняется);
3) сдвигается полученная или оставшаяся без изменения сумма
частичных произведений ΣЧПi вправо на 1 разряд. Одновременно
сдвигается множитель
вправо на 1 разряд;
4) пункты 2) и 3) циклически повторяются n раз, где n – число
значащих разрядов множителя
;
5) сумма частичных произведений сдвигается вправо на 1 разряд для
правильной постановки произведения в двойной разрядной сетке.
Пример 7. Умножение в прямом коде Zпр = Апр * Впр.
А
= 10110 = (–6)10;
пр
В
= 11101 = (–13)10.
пр
В этом случае перемножаются модули чисел, а произведению
присваивается знак «плюс», если знаки сомножителей одинаковы, или
знак «минус», если знаки разные.
|А| =00110; |В| = 01101.
Перемножаем числа целые, следовательно, произведение должно
быть представлено двойной (2n) разрядностью.
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
