Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Вычитатели, полувычитетали, вычитание на базе сумматора.doc
Скачиваний:
117
Добавлен:
11.04.2014
Размер:
242.69 Кб
Скачать

Сумматор-накопитель

Интересными свойствами обладает сумматор-накопитель, показанный на рисунке 4.

Рис. 4 - Сумматор-накопитель

На рисунке показан простейший сумматор-накопитель. На один вход сумматора подается число К, а на второй - число с выхода регистра. В начале работы регистр обнуляется (сброс). Если на входы В сумматора DD1 подать некоторое число К, то при подаче импульса на вход С регистра (такт) в него запишется число К (в начальный момент на выходе регистра лог.0). Это же число К попадет на входы А сумматора и по следующему такту в регистр запишется уже число 2К, которое опять попадет на входы А сумматора. На выходе сумматора появится число 3К и по следующему такту запишется в регистр и т. д. То есть, в сумматоре-накопителе постепенно нарастает число. Когда в сумматоре-накопителе накопленное число превышает его объем, равный 2n-1, на выходе переноса появляется сигнал лог. 1, а на выходах S число nK-2n.

Применение таких сумматоров весьма разнообразно. Если вместо регистра установить ОЗУ (это делается в многоканальных системах), тогда такой узел становится важнейшей частью микропроцессора. Посмотрим на эти свойства сумматора-накопителя. Поскольку сигнал переноса сумматора появляется через W=2n/K тактовых импульсов, то такой сумматор является обратным преобразователем входного числа К в число W. Это число можно подсчитать на счетчике. Ну а если выразить частоту появления имульсов переноса через число К, получится вот это:

Это значит, что получается преобразователь кода числа К в частоту импульсов. Такой преобразователь можно использовать в электронных музыкальных инструментах (ЭМИ), всяких звонках и т. п.

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

Арифметические основы ЭВМ.

Поразрядные операции.

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

Поразрядное дополнение – получение инверсного кода числа.

Набор x0x1…xn превращается в набор , где.

Поразрядное сложение - заключается в сложении одноименных разрядов чисел по модулю 2 в соответствии с правилом

0 + 0 = 0 , 1 + 0 =1, 0+ 1=1, 1 + 1= 0.

Применяется для сравнения двух чисел на равенство.

Поразрядное логическое сложение - заключается в сложении одноименных разрядов чисел в соответствии с правилом

0  0 = 0 , 1  0 =1, 0  1=1, 1  1= 1.

Поразрядное логическое умножение- заключается в сложении одноименных разрядов чисел в соответствии с правилом

0  0 = 0 , 1  0 =1, 0  1=1, 1 1= 1.

Применяются для модификации команд и чисел.

 

Операции сдвига.

Операции сдвига заключается в одновременном смещении цифр числа на фиксированное число разрядов влево или вправо.

Логический сдвиг – смещение всей числовой последовательности (слова ) включая разряд знака, при котором в освободившиеся при сдвиге k разрядов записываются нули.

k – константа сдвига.

Циклический сдвиг - смещение всей числовой последовательности (слова ), при котором, цифры выходящие за пределы разрядной сетки, снова вводятся в освобождающиеся позиции слова.

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

Простой сдвиг влево:

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

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

Простой сдвиг вправо:

  1. для прямого кода – сдвигается только цифровая часть числа;

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

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

 

Операция нормализации.

Операция нормализации влево – каждый сдвиг мантиссы влево сопровождается вычитанием 1 из порядка числа.

Операция нормализации вправо – каждый сдвиг мантиссы вправо сопровождается увеличением на 1 порядка числа.

 

Сложение и вычитание целых двоичных чисел.

Рассматриваются операции над целыми числами со знаком, в диапазоне

где n – число разрядов сетки.

При сложении чисел, заданных дополнительным кодом, двоичная передача из разряда знака в формировании суммы не участвует. Результат представляется в дополнительном коде при условии что [ x + y ] не выходит за пределя допустимого диапазона.

[ x ]3 + [ y ]3 = [x + y ]3

Пример.

[ x]3 = 0.1001  [ x ]3 = 1.0111 [y ]3 = 1.1011  [ y ]3 = 1.1011 [ x+y]3 = 0.0100  [x +y ]3 = 1.0010

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

Пример.

[ x]2 = 1.0011 [ x ]2 = 1.0110 [y ]2 = 0.1110 [ y ]2 = 1.1011 [ x+y]2 = 0.0010 [x +y ]2 = 1.0010

Переполнение разрядной сетки.

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

 Пример 1. [ x]3 = 0.1011 , [y ]3 = 0.1101  [ x+y]3 = (0)1.1000

Пример 2. [ x ]3 = 1.0101 , [ y ]3 = 1.0011 , [x +y ]3 = (1)0.0010

В первом примере перенос в знаковый разряд равен 1, а из знакового равен 0. Во втором примере перенос в знаковый разряд равен 0, а из знакового равен1. Это свидетельствует о переполнении разрядной сетки.

Операция вычитания.

Вычитание целых чисел произвольного знака можно свести к операции алгебраического сложения x - y = x + ( -y).

Для дополнительного и обратного кода получим

[ x]3 – [y ]3 = [ x]3 + [ y ]3 +1 = [ x – y ]3 [ x]2 – [y ]2 = [ x]2 + [ y ]2 = [ x – y ]2 ,

где [ y ]  - означает инвертирование кода.

Для вычитания в сумматоре должна быть предусмотрена как прямая, так и инверсная передача кодов исходных чисел.

Пример.

x = 1001, [x]3 = 0.1001 [x]3 = 0.1001 y = -0011, [y]3 = 1.1101 [y]3 = 0.0010 [x -y ]3 =0.1001+ 0.0010+1 = 0.1100

[x -y ]3 = 0.1100

Пример.

x = -1001, [x]2 = 1.0110 [x]2 = 1.0110 y = -0100 , [y]2 = 1.1011 [y]2 = 0.0100 [x -y ]2 = 1.0110 -  0.0100 = 1.1010

Алгебраическое представление двоичных чисел

Знак числа обычно кодируется двоичной цифрой, при этом код 0 означает знак + (плюс), код 1 — знак – (минус). Для алгебраического представления чисел, то есть для представления чисел с учетом их знака, в машинах используются специальные коды:

 прямой код числа;

 обратный код числа;

 дополнительный код числа.

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

Дополнительный код обеспечивает более быстрое выполнение операций, поэтому в компьютере применяется чаще именно он.

1. Прямой код числа N — [N]пр. Пусть N = a a a ... a;

 если N > 0, то [N]пр = 0, a a a ... a;

 если N < 0, то [N]пр = 1, a a a ... a;

 если N = 0, то имеет место неоднозначность: [0]пр = 0,0... или [0]пр = 1,0...

Обобщая результаты, получим:

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

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

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

2. Обратный код числа N — [N]обр.

Символ а* означает величину, обратную а (инверсию а), то есть если а = 1, то а* = 0, и наоборот.

 если N > 0, то [N]обр = [N]пр = 0, a a ... a,

 если N < 0, то [N]обр = 1, a* a* ... a*,

 если N = 0, то неоднозначность, [0]обр = 0,00 ... 0 или [0]обр = 1,11...1.

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

Например, число N = 0,1011, [N]обр = 0,1011. Число N = –0,1011, [N]обр = 1,0100. В случае, когда N < 0, [N]обр = 10 – 1·10–n + N, то есть [N]обр = 1,1111 + N.

Обобщая результаты, получим

3. Дополнительный код числа N — [N]доп

 если N >= 0, то [N]доп = [N]пр = 0, a a ... a,

 если N <= 0, то [N]доп = 1, a* a* ... a* + 0,0 0 ... 1.

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

Например, N = 0,1011, [N]доп = 0,1011; N = –0,1100, [N]доп = 1,0100; N = –0,0000, [N]доп = 10,0000 = 0,0000 (1 исчезает). Неоднозначности в изображении 0 нет. Обобщая, можно записать:

СОВЕТ. Эмпирическое правило: для получения дополнительного кода отрицательного числа необходимо все символы этого числа инвертировать, кроме последней (младшей) единицы и тех нулей, которые за ней следуют.

Прочие системы счисления

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

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

Двоично-десятичная система не экономична с точки зрения реализации технического построения машины (примерно на 20 % увеличивается потребное оборудование), но очень удобна при подготовке задач и при программировании. В двоично-десятичной системе счисления основанием системы счисления является число десять, но каждая из 10 десятичных цифр (0, 1, ..., 9) изображается при помощи двоичных цифр, то есть кодируется двоичными цифрами. Для представления одной десятичной цифры используются четыре двоичных. Здесь имеется, конечно, избыточность, поскольку четыре двоичных цифры (или двоичная тетрада) могут изобразить не 10, а 16 чисел, но это уже издержки производства в угоду удобства программирования. Существует целый ряд двоично-кодированных десятичных систем представления чисел, отличающихся тем, что определенным сочетаниям нулей и единиц внутри одной тетрады поставлены в соответствие те или иные значения десятичных цифр1.

В наиболее часто используемой естественной двоично-кодированной десятичной системе счисления веса двоичных разрядов внутри тетрады естественны, то есть 8, 4, 2, 1 (табл. 3.1).

Таблица 3.1. Таблица двоичных кодов десятичных и шестнадцатеричных цифр

Цифра

Код

Цифра

Код

0

0000

8

1000

1

0001

9

1001

2

0010

A

1010

3

0011

B

1011

4

0100

C

1100

5

0101

D

1101

6

0110

E

1110

7

0111

F

1111

Например, десятичное число 9703 в двоично-десятичной системе выглядит так: 1001011100000011.

Шестнадцатеричная система счисления При программировании иногда используется шестнадцатеричная система счисления, перевод чисел из которой в двоичную систему счисления весьма прост — выполняется поразрядно (полностью аналогично переводу из двоично-десятичной системы). Для изображения цифр, больших 9, в шестнадцатеричной системе счисления применяются буквы А = 10, В = 11, С = 12, D = 13, E = 14, F = 15.

Например, шестнадцатеричное число F17B в двоичной системе выглядит так: 1111000101111011.

Выполнение арифметических операций в компьютере

Правила выполнения арифметических операций в двоичной системе счисления аналогичны правилам операций в десятичной системе счисления.

Например:

Сложение

101110

Вычитание

101110

+

001011

001011

Результат

111001

Результат

100011

Умножение

101101 x 101

Деление

101101/101

101101

1

000000

10

101101

101

Результат (произведение)

11100001

Результат (частное)

1001

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

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

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

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

Выполнение арифметических операций над числами, представленными в дополнительных кодах

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

Сложение производится по обычным правилам сложения двоичных чисел: единица переноса, возникающая из старшего знакового разряда, просто отбрасывается.

Примеры сложения:

 Х = –0,1101; Y = 0,1001. Результат сложения: 11,0011 + 00,1001 = 11,1101 (или —1100);

 Х = 0,1101; Y = 0,1001. Результат сложения: 00,0011 + 00,1001 = 01,0110 (переполнение, после сдвига вправо получим 00,10110, или +10110);

 Х = 0,1101; Y = –0,1001. Результат сложения: 00,1100 + 11,0111 = 100,0100 (или 00,0100);

 Х = –0,1101; Y = –0,1001. Результат сложения: 11,0011 + 11,0111 = 10,1010 (переполнение, после сдвига вправо получим 11,01010, или –10110).

Умножение чисел в дополнительных кодах производится по обычным правилам умножения двоичных чисел. Единственной особенностью является то, что если сомножитель является отрицательным (знаковые разряды равны 11), то перед началом умножения следует приписать к нему слева столько единиц, сколько значащих разрядов у другого сомножителя справа от запятой. Результат (произведение) всегда получаем в дополнительном коде.

ПРИМЕЧАНИЕ. Добавление единиц слева перед отрицательным числом не изменяет его величины, так как перед положительным числом можно написать сколь угодно нулей не изменяя величины числа; наоборот, перед отрицательным числом (в дополнительном или обратном кодах) добавление лишних нулей недопустимо.

Примеры операции умножения:

Х = 00,111 Ч 00,101 = 00,100011 Х = 00,111 Ч 11111,011 = 11,011101

00,111 00,111

х 00,101 х 11111,011

________________ __________________

00111 00111

00000 00111

00111 00000

00000 00111

00000 00111

___________ 00111

00100011 00111

00111

___________________________

0011011,010101->11,011101

Х = 11111,001 Ч 00,101 = 11,011101 Х = 11111,001 Ч 11111,011 = 00,100011

11111,001 11111,001

х 00,101 х 11111,011

11111001 11111001

00000000 11111001

11111001 00000000

00000000 11111001

00000000 11111001

001011,011101 -> 11,01101 11111001

11111001

11111001

1111010000,100011 -> 00,100011

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

Выполнение арифметических операций в шестнадцатеричной системе счисления

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

Примеры операции сложения:

A58

5BAC

67851

+ 34C

+ 2A45

+ BEFA

= DA4

= 85F1

= 7384B

Особенности представления информации в ПК

Числовая информация внутри ПК кодируется в двоичной или в двоично-десятичной системах счисления; при вводе и выводе любой информации в ПК используются специальные коды представления информации — коды ASCII, эти же коды применяются для кодирования буквенной и символьной информации и внутри ПК.

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

Таблица 3.2. Двоичные совокупности

Количество двоичных разрядов в группе

Наименование единицы измерения

1

Бит

8

Байт

16

Параграф

8 * 1024

Кбайт (килобайт)

8 * 10242

Мбайт (мегабайт)

8 * 10243

Гбайт (гигабайт)

8 * 10244

Тбайт (терабайт)

8 * 10245

Пбайт (пентабайт)

Последовательность нескольких бит или байт часто называют полем данных.

Биты в числе (в слове, в поле и т. п.) нумеруются справа налево, начиная с 0-го разряда. В ПК могут обрабатываться поля постоянной и переменной длины.

Поля постоянной длины:

 слово — 2 байт;

 двойное слово — 4 байт;

 полуслово — 1 байт;

 расширенное слово — 8 байт.

Числа с фиксированной запятой чаще всего имеют формат слова и полуслова; числа с плавающей запятой — формат двойного и расширенного слова.

Поля переменной длины могут иметь любой размер от 0 до 255 байт, но обязательно равный целому числу байт.

Пример. Структурно запись двоичного числа –11000001(2), равного десятичному –193(10), в разрядной сетке ПК выглядят следующим образом (рис. 3.1, 3.2).

Рис. 3.1. Число с фиксированной запятой формата слово со знаком

Рис. 3.2. Число с плавающей запятой формата двойное слово

Двоично-кодированные десятичные числа могут быть представлены в ПК полями переменной длины в так называемых упакованном (рис. 3.3) и распакованном форматах. В упакованном формате для каждой десятичной цифры отводится по три двоичных разряда (полбайта), при этом знак числа кодируется в крайнем правом полубайте числа (1100 — знак «+» и 1101 — знак «–»).

Рис. 3.3. Структура поля упакованного формата

Здесь и далее: Цф — Цифра, Знак — Знак числа. Упакованный формат используется обычно в ПК при выполнении операций сложения и вычитания двоично-десятичных чисел.

В распакованном формате (рис. 3.4) для каждой десятичной цифры отводится по целому байту, при этом старшие полубайты (зона) каждого байта (кроме самого младшего) в ПК заполняются кодом 0011 (в соответствии с ASCII-кодом), а в младших (левых) полубайтах обычным образом кодируются десятичные цифры. Старший полубайт (зона) самого младшего (правого) байта используется для кодирования знака числа.

Рис. 3.4. Структура поля распакованного формата

Распакованный формат используется в ПК при вводе-выводе информации, а также при выполнении операций умножения и деления двоично-десятичных чисел.

Например, число –193(10) = –000110010011(2 – 10) в ПК будет представлено:

 в упакованном формате:

0001 1001 0011 1101

 в распакованном формате:

0011 0001 0011 1001 1101 0011

Код ASСII (American Standard Code for Information Interchange — американский стандартный код для обмена информацией) имеет основной стандарт и расширение (рис. 3.5). Основной стандарт для кодирования символов использует шестнадцатеричные коды 00–7F, расширение стандарта — коды 80–FF.

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

ПРИМЕЧАНИЕ. Любой символ, представленный в этой таблице, при работе в DOS может быть введен в ПК с клавиатуры набором его десятичного кода (соответствующего шестнадцатеричному ASCII-коду) на малой цифровой клавиатуре при нажатой клавише Alt.

Наряду с кодом ASCII в ВС, в частности в сети Интернет, используется общий для всех стран мира универсальный код — Уникод (Unicode). Этот код основан на паре байт — машинном слове. Шестнадцати бит хватает для отображения 65 535 знаков. Такого количества достаточно для всех существующих алфавитов (то есть алфавиты большинства стран мира размещаются в основном стандарте этого кода).