Компьютерная арифметика
Понятия и определения компьютерной арифметики. Классификация систем счисления и их выбор для использования в компьютерной системе (КС). Выполнение арифметических операций в КС над двоичными числами с фиксированной точкой и над числами с плавающей точкой.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | учебное пособие |
Язык | русский |
Дата добавления | 08.12.2015 |
Размер файла | 966,0 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
23 |
2 |
0, |
1 |
2 |
5 |
|||||
22 |
11 |
2 |
2 |
|||||||
1 |
10 |
5 |
2 |
0, |
2 |
5 |
0 |
|||
1 |
4 |
2 |
2 |
2 |
||||||
1 |
2 |
1 |
0, |
5 |
0 |
0 |
||||
0 |
2 |
|||||||||
1, |
0 |
0 |
0 |
Рисунок 2.28 - Перевод из десятичной системы счисления в двоичную систему счисления неправильной дроби А = 23.125(10).
Таким образом, получаем: 23.125(10) - 10111.001(2).
Для перевода восьмеричного (шестнадцатеричного) числа в двоичное необходимо каждую цифру исходного числа записать в виде эквивалентного ей трехбитного (четырехбитного) двоичного числа.
Например: необходимо перевести из восьмеричной системы счисления в двоичную систему счисления неправильную дробь А = 273.5(8).
Решение: исходя из вышесказанного разобьем каждую цифру неправильной восьмеричной дроби на триады и переведем каждую цифру отдельно:
273.5(8) = |
0 1 0 |
1 1 1 |
0 1 1, |
1 0 1(2) |
= 010111011,101(2) или 10111011,101(2) |
|
веса: |
4-2-1 |
4-2-1 |
4-2-1 |
4-2-1 |
Например: необходимо перевести из шестнадцатеричной системы счисления в двоичную систему счисления неправильную дробь А = 5АЕ.18(16).
Решение: исходя из вышесказанного разобьем каждую цифру неправильной шестнадцатеричной дроби на тетрады и переведем каждую цифру отдельно:
5АЕ.18(16)= |
0 1 0 1 |
1 0 1 0 |
1 1 1 0, |
0 0 0 1 |
1 0 0 0(2) |
=10110101110,00011(2) |
|
веса: |
8-4-2-1 |
8-4-2-1 |
8-4-2-1 |
8-4-2-1 |
8-4-2-1 |
Все рассмотренные алгоритмы предназначены для программного перевода чисел. Известно также множество алгоритмов перевода, ориентированных на реализацию их аппаратными средствами. Однако изучать такие алгоритмы целесообразно вместе с изучением компьютерных аппаратных средств.
3. Представление числовых данных в компьютерных системах
компьютерный арифметика счисление двоичный
Система вещественных чисел, используемая в ручных расчетах, предполагается бесконечной и непрерывной, т.е. отсутствуют ограничения на диапазон используемых чисел и точность (количество значащих цифр).
Пояснение: для любого вещественного числа существует бесконечно много чисел, которые больше или меньше его, и между любыми двумя вещественными числами находится также бесконечно много чисел.
В компьютерной технике размеры устройств ограничены. Эти ограничения касаются диапазона чисел и точности их представления. Поэтому система машинных чисел является конечной и дискретной, образуя подмножество системы вещественных чисел.
На рис. 3.1 схематически представлена система машинных чисел где (Xmax) и (Xmin) - соответственно максимально и минимально представимые числа, между которыми находится конечное множество допустимых чисел.
Рисунок 3.1 - Система машинных чисел
Если результат операции по модулю превышает |Xmax|, то возникает переполнение (overflow). Если модуль результата |X|<|Xmin|, фиксируется антипереполнение (underflow). В этом случае большинство компьютеров возвращают в качестве результата операции (0). Поэтому область чисел от
(-Xmin до Xmin), за исключением истинного нуля, называют машинным нулем. В современных универсальных компьютерных системах преимущественно используют две формы представления чисел:
- с фиксированной запятой (фиксированной точкой - fixed point) - естественная форма;
- с плавающей запятой ( плавающей точкой - floating point) - альтернативные названия - нормальная, экспоненциальная, научная запись или полулогарифмическая.
Например, пусть задано число:
. (3.1)
где: Х - некоторое число;
- цифры слева от запятой;
- цифры справа от запятой.
В позиционной системе счисления с основанием (2) его можно записать в виде:
. (3.2)
где: Х - некоторое число;
M - мантисса;
2 - основание системы счисления;
P - порядок.
Если каждому числу (X) в компьютерной системе однозначно соответствует мантисса (M), а порядок (Р) фиксирован для всех чисел, то число (X) представлено в форме с фиксированной запятой. Порядок (Р) в этом случае устанавливается заранее при подготовке задачи к решению, причем число (2-P), по существу, является масштабным коэффициентом, на который необходимо умножить исходные данные для того, чтобы избежать переполнения разрядной сетки.
Естественная форма характеризуется тем, что положение разрядов (и запятой) в машинном представлении чисел остается всегда постоянным независимо от величин чисел, с которыми оперирует компьютерная система. С целью упрощения процедуры определения масштабных коэффициентов запятую обычно фиксируют перед старшим разрядом мантиссы или после ее младшего разряда.
В первом случае компьютерная система оперирует с числами, которые по абсолютной величине меньше единицы, то есть, с правильными дробями. Если количество разрядов для представления мантиссы равно (n), то: (|Xmin|=2-n, |Xmax|=1-2-n).
Во втором случае компьютерная система выполняет операции с целыми числами, абсолютные величины которых находятся в пределах от (1 (минимального, не равного нулю числа) до 2n-1).
Если каждому числу (X) однозначно соответствует пара (М) и (Р), то такое представление называют формой с плавающей запятой. Следует иметь в виду, что положение запятой в реальной разрядной сетке компьютерной системы физически никак не указывается, а только «подразумевается» и само число можно записать в виде:
. (3.3)
. (3.4)
где: Х - некоторое число;
М - мантисса числа (Х);
Е - разделитель мантиссы и порядка числа (Х);
Р - порядок числа (Х).
Для однозначного представления числа в нормальной форме принято, что мантисса должна удовлетворять условию:
. (3.5)
то есть мантисса должна быть правильной дробью, а ее старшая цифра -- отличной от (0). В таком случае представление числа является нормализованным. Помимо однозначного представления, это дает еще и сохранение максимального количества значащих цифр мантиссы при выполнении операций. Положение разрядов числа в форме с плавающей запятой не является постоянным, то есть запятая как бы плавает.
С учетом рассмотренных ранее структурных единиц информации, различают несколько форматов данных с фиксированной запятой. Например, в компьютерах IBM PC AT машинное слово имеет длину 16 бит (2 байта).
Используются следующие форматы: слово, полуслово (байт), двойное слово (doubleword), учетверенное слово (quadword).
В соответствии с перечисленными форматами различают базовые типы целочисленных данных:
- слово - 8 бит;
- целое слово - 16 бит;
- короткое целое слово - 32 бит;
- длинное целое слово - 64 бит.
Для того, чтобы компьютерная система могла оперировать как положительными, так и отрицательными числами, в разрядную сетку машинного представления числа необходимо ввести знаковую часть.
В двоичной системе счисления принято знак положительного числа обозначать «0», а знак отрицательного числа - «1» (обычно это крайний левый бит в представлении числа), как показано на рис.3.2.
Рисунок 3.2 - Формат числа в двоичной системе счисления со знаковым битом
Будем обозначать целые знаковые числа в виде:
. (3.6)
а правильные дроби:
. (3.7)
В связи с тем, что алгоритмы выполнения операций в компьютерных системах имеют свою специфику, возникает проблема представления отрицательных чисел.
Ее решают за счет использования особых способов кодирования числовых данных.
Рассмотрим три наиболее распространенных кода, которые применяются на практике: - прямой код; - обратный код; - дополнительный код.
Прямой код используется для представления отрицательных чисел в запоминающем устройстве компьютерной системы, а также при умножении и делении.
Обратный и дополнительный коды используются для замены операции вычитания операцией сложения, что упрощает устройство арифметического блока компьютерной системы.
К кодам выдвигаются следующие требования:
- разряды числа в коде жестко связаны с определенной разрядной сеткой;
- для записи кода знака в разрядной сетке отводится фиксированный, строго определенный разряд.
1. Прямой код. Наиболее естественный код. Формируется следующим образом: в знаковый бит (SX) числа помещают знак числа (0 - если число положительное и 1 - если число отрицательное ), а остальные биты используют для абсолютного значения (модуля) числа. Правило преобразования чисел в прямом коде можно записать так:
. (3.8)
где A - вес старшего разряда в n-разрядной сетке, A=2s-1.
Отображение s-битных наборов ( прямой код верхняя числовая прямая) на числовую ось ( числа нижняя числовая прямая ) для компьютерной системы показано на рис. 3.3
Рисунок 3.3- Отображение s-битных наборов (прямой код) на числовую ось
Например:
Десятичное число |
Двоичное число |
Прямой код |
Комментарии |
|
(0(10)) |
0000(2) |
0,000 |
положительный (0) |
|
(0(10)) |
0000(2) |
1,000 |
отрицательный (0) |
|
(4(10)) |
0100(2) |
0,100 |
положительная (4) |
|
(- 4(10)) |
1100(2) |
1,100 |
отрицательная (4) |
|
(3(10)) |
0011(2) |
0,011 |
положительная (3) |
|
(- 3(10)) |
1011(2) |
1,011 |
отрицательная (3) |
Диапазон представимых чисел: -(2s-1-1)…(2s-1).
Положительный момент заключается в удобстве операции ввода-вывода данных. Отрицательный момент в том, что существует два представления (0) и операция алгебраического сложения требует анализа знаков и модулей операндов, и выбора фактической операции сложения или вычитания.
2. Обратный код. Обратный (n - разрядный) двоичный код положительного целого числа состоит из одноразрядного кода знака (0), за которым следует ( n - 1) разрядное двоичное представление модуля числа, то есть обратный код для положительного числа совпадает с прямым кодом.
Обратный ( n - разрядный ) двоичный код отрицательного целого числа состоит из одноразрядного кода знака (1), за которым следует ( n - 1) разрядное двоичное число, представляющее собой инвертированное (n - 1) разрядное представление модуля числа, то есть для отрицательного числа все цифры числа заменяются на противоположные, а именно ( 1 на 0, а 0 на 1) и в знаковый разряд заносится единица.
Обратный код числа определяется соотношением:
. (3.9)
где B=2s-1=Xmax - максимальное число в n-разрядной сетке.
Отображение s-битных наборов ( обратный код верхняя числовая прямая) на числовую ось ( числа нижняя числовая прямая ) для компьютерной системы показано на рис. 3.4.
Рисунок 3.4 - Отображение s-битных наборов (обратный код ) на числовую ось
Например:
Десятичное число |
Двоичное число |
Обратный код |
Комментарии |
|
(0(10)) |
0000(2) |
0,000 |
положительный (0) |
|
(0(10)) |
1111(2) |
1,111 |
отрицательный (0) |
|
(4(10)) |
0100(2) |
0,100 |
положительная (4) |
|
(- 4(10)) |
1011(2) |
1,011 |
отрицательная (4) |
|
(3(10)) |
0011(2) |
0,011 |
положительная (3) |
|
(- 3(10)) |
1100(2) |
1,100 |
отрицательная (3) |
Диапазон представимых чисел: -(2s-1-1)…(2s-1).
Положительный момент заключается в том, что при сложении обратных кодов чисел как беззнаковых чисел получаем обратный код суммы.
Отрицательный момент заключается в том, что существует два представления (0) и при выполнении операций сложения в обратном коде требуется коррекция суммы с помощью циклического переноса единицы переполнения из знаковых разрядов суммы.
3. Дополнительный код. Наиболее распространенный способ представления отрицательных целых чисел в компьютерных системах.
Он позволяет заменить операцию вычитания на операцию сложения, чем упрощает архитектуру компьютерной системы.
Дополнительный код является дополнением числа до некоторого граничного числа (|Xmax+1|=2s).
Дополнительный код положительного числа совпадает с прямым кодом.
Для получения дополнительного кода отрицательного числа существует три способа:
- все цифры модуля исходного числа заменяются на взаимно обратные, то есть производится инверсия всех цифр числа, затем к полученному значению добавляется единица в младшем разряде;
- из модуля числа вычитается (1) младший бит, а затем инвертируются все разряды;
- необходимо записать n-битный модуль числа. Затем просматривать число справа налево, сохранить все младшие нули и первую встретившуюся (1), а остальные биты инвертировать.
Дополнительный код числа определяется соотношением:
. (3.10)
. (3.11)
где - , C = Xгр. равняется весу не существующего в данном числе разряда, расположенного слева от знаковой цифры.
Отображение s-битных наборов ( дополнительный код верхняя числовая прямая) на числовую ось ( числа нижняя числовая прямая ) для компьютерной системы показано на рис. 3.5.
Рисунок 3.5 - Отображение s-битных наборов (дополнительный код ) на числовую ось
Например:
Десятичное число |
Двоичное число |
Дополнительный код |
Комментарии |
|
(0(10)) |
0000(2) |
0,000 |
положительный (0) |
|
(4(10)) |
0100(2) |
0,100 |
положительная (4) |
|
(- 4(10)) |
1100(2) |
1,100 |
отрицательная (4) |
|
(3(10)) |
0011(2) |
0,011 |
положительная (3) |
|
(- 3(10)) |
1101(2) |
1,101 |
отрицательная (3) |
Диапазон представимых чисел: -(2s-1)…(2s-1).
Свойства дополнительного кода:
- при сложении чисел в дополнительном коде как беззнаковых чисел получаем дополнительный код суммы. Знаковые биты суммируются обычным образом, а возникающий при их сложении перенос игнорируется.
- любое число в дополнительном коде можно считать младшими битами («хвостом») числа любой длины, если содержимое знакового бита копировать влево. Эта операция называется расширением знака. Используется, когда исходные операнды в операциях сложения и вычитания имеют разную длину.
Свойства кодов:
1. Операции должны выполняться над данными, представленными в одном и том же коде: ПК-ПК, ОК-ОК, ДК-ДК;
2. Положительные числа в ПК, ОК, ДК не меняют своего представления;
3. Результат выполнения операций сложения и вычитания над числами, представленными в ПК, ОК или ДК, являются ПК, ОК или ДК соответственно;
4. Двоичный набор, представляющий (-0) в ПК и ДК, является запрещенной комбинацией;
5. В отличие от ПК, в ОК и ДК нельзя отбрасывать нули после знакового разряда в целой части и нули в конце дробной части отрицательного числа (разрешается отбрасывать 1).
3.1 Арифметические флажки
Флажки являются признаками, представляющими общую характеристику результата выполнения операции. Наиболее широко применяются следующие флажки:
- флажок переноса (Flag Carry), обозначаемый (FC). Устанавливается в (1) в двух случаях:
1. Если при выполнении операции сложения имеет место перенос из старшего бита результата (представляет собой расширение результата на 1 бит влево);
2. Если при выполнении операции вычитания имеет место заем (borrow) в старший бит. Это возможно в случае, если уменьшаемое меньше вычитаемого. Если операнды интерпретируются как беззнаковые числа, данный флажок является признаком переполнения компьютерной системы.
В операциях над знаковыми числами самостоятельного значения не имеет.
- флажок вспомогательного переноса или дополнительный перенос (Flag Auxiliary), обозначаемый (FA). При сложении показывает перенос, а при вычитании - заем из младшей тетрады (бит 3) результата. Используется в операциях двоично-десятичной арифметики.
- флажок нуля (Flag Zero), обозначаемый (FZ). Признак нулевого результата. Устанавливается в (1) когда результат выполнения операции равняется (0).
- флажок знака (Flag Sign), обозначаемый (FS). Повторяет состояние знакового бита.
- флажок переполнения (Flag Overflow), обозначаемый (FО).
В операциях над знаковыми числами показывает, находится ли результат внутри диапазона представимых чисел:
- (FO) = 0 - результат правильный;
- (FO) = 1 - возникло переполнение. Следует отметить, что (FO) устанавливается в (1), если перенос в старший разряд и из него не совпадают.
3.2 Контроль переполнения в компьютерных системах
Возможно только при сложении чисел с одинаковыми знаками, когда для представления результата недостаточно отведенного количество разрядов (требуется больше, чем для представления операндов). Это может приводить не только к неправильному (по абсолютной величине) результату, но и к неправильному его знаку. Независимо от кода для представления отрицательных чисел (обратный или дополнительный) переполнение разрядной сетки имеет место всегда, если только при сложении положительных чисел возникает перенос в знаковый разряд, а при сложении отрицательных чисел такой перенос равен нулю. Введение масштабных коэффициентов, на которые необходимо умножить все исходные данные перед решением задачи, позволяет предотвратить переполнение. В компьютерных системах предусматривают специальные средства для обнаружения переполнения разрядной сетки:
- программный способ; основан на том, что при сложении чисел с одинаковыми знаками знак суммы должен совпадать со знаками операндов;
- аппаратный способ; основан на использовании модифицированных кодов.
При использовании модифицированных кодов знак числа изображается двумя одинаковыми цифрами. Эти цифры в процессе выполнения операций обрабатываются так же, как и числовые разряды. При этом появление в знаковых разрядах разных цифр (01 при сложении положительных и 10 при сложении отрицательных двоичных операндов) свидетельствует о переполнении разрядной сетки.
Модифицированный код позволяет формировать правильный знак результата даже при наличии переполнения.
Этот знак сохраняется во втором (старшем) знаковом разряде. Такой способ обнаружения переполнения разрядной сетки наиболее распространен в компьютерных системах, несмотря на некоторую избыточность в аппаратных средствах для представления чисел, поскольку позволяет оперативно (то есть, одновременно с результатом) получить информацию о переполнении.
На рис.3.6 представлен формат двоичного знакового числа с использованием модифицированного кода.
Рисунок 3.6 - Формат двоичного знакового числа с использованием модифицированного кода.
При выполнении операций сложения и вычитания чисел в дополнительных кодах обрабатывающее устройство компьютера не делает различий между знаковыми и беззнаковыми операндами.
То есть операнды должны интерпретироваться самим пользователем как знаковые или беззнаковые. В операции вычитания используется дополнительный код вычитаемого. Если длина операндов превышает длину машинного слова, то сложение и вычитание выполняют в несколько приемов, организуя программный цикл.
Операцию начинают с младших частей операндов, «продвигаясь» далее в сторону старших частей. На каждом шаге должны обрабатываться возникающие переносы (или заемы).
4. Выполнение арифметических операций в компьютерных системах над двоичными числами с фиксированной точкой
4.1 Операция сложения и вычитания, двоичных беззнаковых чисел в компьютерных системах
Компьютерная система выполняет сложение и вычитание операндов по правилам сложения и вычитания двоичных беззнаковых чисел рис.4.1:
Правила сложения: |
Правила вычитания: |
|
1. 0 + 0 = 0 |
1. 0 - 0 = 0 |
|
2. 0 + 1 = 1 |
2. 1 - 1 = 0 |
|
3. 1 + 0 = 1 |
3. 1 - 0 = 1 |
|
4. 1 + 1 = 10 |
4. 10 - 1 = 1 |
Рисунок 4.1 - Правила сложения и вычитания, двоичных беззнаковых чисел
Проблем не возникает до тех пор, пока значение результата не превышает разрядной сетки операнда.
Например: необходимо перевести в двоичную систему счисления, а затем сложить два числа: 7(10) и 5(10) записанных в десятичной системе счисления ( по правилам сложения двоичных беззнаковых чисел ). Длина разрядной сетки операндов равна четырем битам.
Используя вышеописанные правила, мы находим сумму двух чисел следующим образом: сначала складываем числа в последнем столбце, записываем младший разряд полученной суммы под столбцом, а старший в следующий слева столбец, и продолжаем сложение, как показано на рис.4.2.
Например: необходимо перевести в двоичную систему счисления, а затем найти разность двух чисел: 9(10) и 7(10) записанных в десятичной системе счисления (по правилам вычитания двоичных беззнаковых чисел). Длина разрядной сетки операндов равна четырем битам рис.4.3.
Проблема возникает тогда, когда результат выходит за пределы разрядной сетки операнда, как показано в следующем примере.
Например: необходимо перевести в двоичную систему счисления, а затем найти сумму двух чисел: 9(10) и 7(10) записанных в десятичной системе счисления ( по правилам сложения двоичных беззнаковых чисел ). Длина разрядной сетки операндов равна четырем битам рис.4.4.
Десятичное число |
Двоичное число |
|
7(10) |
0111(2) |
|
5(10) |
0101(2) |
|
12(10) |
1100(2) |
Рисунок 4.2 - Пример вычисления суммы двух чисел: 7(10) и 5(10) записанных в десятичной системе счисления ( по правилам сложения двоичных беззнаковых чисел ), при четырехразрядной сетке операндов
Десятичное число |
Двоичное число |
|
9(10) |
1001(2) |
|
7(10) |
0111(2) |
|
2(10) |
0010(2) |
Рисунок 4.3 - Пример вычисления разности двух чисел: 9(10) и 7(10) записанных в десятичной системе счисления ( по правилам вычитания двоичных беззнаковых чисел ), при четырехразрядной сетке операндов
Десятичное число |
Двоичное число |
||
9(10) |
1001(2) |
||
7(10) |
0111(2) |
||
16(10) |
1 |
0000(2) |
Рисунок 4.4 - Пример вычисления суммы двух чисел: 9(10) и 7(10) записанных в десятичной системе счисления (по правилам сложения двоичных беззнаковых чисел ), при четырехразрядной сетке операндов
В примере, представленном на рис.4.4 видно, что (1) вышла за пределы разрядной сетки операнда.
При обработке полученной суммы она не учитывается и следовательно сумма получилась равной (0), а не (16), что является не верным результатом.
В таких случаях увеличивают разрядную сетку операнда, и результат принимает правильное значение.
Например: необходимо перевести в двоичную систему счисления, а затем найти сумму двух чисел: 9(10) и 7(10) записанных в десятичной системе счисления ( по правилам сложения двоичных беззнаковых чисел ). Длина разрядной сетки операндов равна восьми битам рис.4.5:
Десятичное число |
Двоичное число |
|
9(10) |
00001001(2) |
|
7(10) |
00000111(2) |
|
16(10) |
00010000(2) |
Рисунок 4.5 - Пример вычисления суммы двух чисел: 9(10) и 7(10) записанных в десятичной системе счисления ( по правилам сложения двоичных беззнаковых чисел ), при восьмиразрядной сетке операндов
В компьютерной системе этот исход сложения прогнозируется и предусмотрены специальные средства для фиксирования подобных ситуаций и их обработки.
Так, для фиксирования ситуации выхода за разрядную сетку результата, как в данном примере, предназначен флаг переноса (FC). Он располагается в бит - (0) регистра флагов eflags. Именно установкой этого флага фиксируется факт переноса (1) из старшего разряда операнда за пределы разрядной сетки.
Естественно, что программист должен предусматривать возможность такого исхода операции сложения и средства для корректировки. Это предполагает включение участков кода после операции сложения, в которых анализируется флаг (FC). Анализ этого флага можно провести различными способами. Самый простой и доступный использовать команду условного перехода. Эта команда в качестве операнда имеет имя метки в текущем сегменте кода. Переход на эту метку осуществляется в случае если в результате работы предыдущей команды флаг (FC) установился в (1).
4.2 Операция сложения и вычитания двоичных знаковых чисел в компьютерных системах
При сложении и вычитании знаковых двоичных чисел операция вычитания заменяется операцией сложения в дополнительном коде.
Докажем, что результат выполнения операций сложения и вычитания над числами, представленными в ДК, являются ПК, ОК или ДК соответственно.
Для этого рассмотрим отдельно формирование числовой и знаковой частей суммы.
Тогда операцию сложения проанализируем над «псевдомодулями» слагаемых - дополнительными кодами, у которых отброшен знаковый разряд.
В этом случае граничное число (C) станет равным весу знакового разряда, который становится отсутствующим.
Представим операцию сложения в общем виде:
. (4.1)
где Z - сумма;
X - первое слагаемое;
Y - второе слагаемое.
В зависимости от знаков слагаемых возможны следующие варианты:
1. , тогда:
.
Например: рассмотрим два случая а) и б).
Случай а): необходимо вычислить сумму двух чисел записанных в десятичной системе счисления (5+2=7), для этого необходимо оба числа перевести в двоичную систему счисления, а затем представить в дополнительном коде, для удобства возьмем длину разрядной сетки четыре бита. Формат суммы представлен на рис. 4.6, а вычисление суммы и значения флагов на рис.4.7.
0, |
1 |
1 |
1 |
|
D3 |
D2 |
D1 |
D0 |
Рисунок 4.6 - Формат суммы
Случай а) |
|||
Десятичное число |
Двоичное число |
Значения флагов |
|
5(10) |
0,101(2) |
FC=0 |
|
2(10) |
0,010(2) |
FS=0 |
|
7(10) |
0,111(2) |
FZ=0 |
|
FO=0 |
Рисунок 4.7 - Пример вычисления суммы двух чисел и значение флагов после получения результата
Значение флагов:
- FC=0, потому, что нет перехода (1) из разряда D2 в знаковый разряд D3 и нет перехода из знакового разряда D3 за пределы разрядной сетки.
- FS=0, потому, что значение знакового бита D3=0.
- FZ=0, потому, что сумма не равняется (0).
- FO=0, потому, что результат правильный и переполнение разрядной сетки нет.
Случай б): необходимо сложить два числа записанных в десятичной системе счисления (7+7=14), для этого необходимо оба числа перевести в двоичную систему счисления, а затем представить в дополнительном коде, для удобства возьмем длину разрядной сетки четыре бита.
Формат суммы представлен на рис. 4.8, а вычисление суммы и значения флагов на рис.4.9.
1, |
1 |
1 |
0 |
|
D3 |
D2 |
D1 |
D0 |
Рисунок 4.8 - Формат суммы
Случай б) |
|||
Десятичное число |
Двоичное число |
Значения флагов |
|
7(10) |
0,111(2) |
FC=1 |
|
7(10) |
0,111(2) |
FS=1 |
|
14(10) |
1,110(2) |
FZ=0 |
|
FO=1 |
Рисунок 4.9 - Пример вычисления суммы двух чисел и значение флагов после получения результата
Значение флагов:
- FC=1, потому, что есть перехода (1) из разряда D2 в знаковый разряд D3 и нет перехода из знакового разряда D3 за пределы разрядной сетки.
- FS=1, потому, что значение знакового бита D3=1, а это не правильно так как оба слагаемых положительные числа, значит и сумма должна быть положительной, а в данном случае сумма получается отрицательной так как знаковый бит равен (1).
- FZ=0, потому, что сумма не равняется (0).
- FO=1, потому, что результат не правильный и переполнение разрядной сетки есть.
2. и , тогда:
.
Например: необходимо сложить два числа записанных в десятичной системе счисления (5+(-2)=3), для этого необходимо оба числа перевести в двоичную систему счисления, а затем представить в дополнительном коде, для удобства возьмем длину разрядной сетки четыре бита.
Формат суммы представлен на рис. 4.10, а вычисление суммы и значения флагов на рис.4.11.
1 |
0, |
0 |
1 |
1 |
|
D3 |
D2 |
D1 |
D0 |
Рисунок 4.10 - Формат суммы
Десятичное число |
Двоичное число |
Значения флагов |
|
5(10) |
0,101(2) |
FC=0 |
|
(-2)(10) |
1,110(2) |
FS=0 |
|
(3)(10) |
10,011(2) |
FZ=0 |
|
FO=0 |
Рисунок 4.11 - Пример вычисления суммы двух чисел и значение флагов после получения результата
Значение флагов:
- FC=0, потому, что есть перехода (1) из разряда D2 в знаковый разряд D3 и есть перехода из знакового разряда D3 за пределы разрядной сетки.
- FS=0, потому, что значение знакового бита D3=0.
- FZ=0, потому, что сумма не равняется (0).
- FO=0, потому, что результат правильный и переполнение разрядной сетки нет. Единица, которая вышла за пределы разрядной сетки не учитывается.
3. и , тогда: , по сути, представляет собой дополнительный код отрицательной разности:
. так как
.
Например: необходимо сложить два числа записанных в десятичной системе счисления (2+(-5)=(-3)), для этого необходимо оба числа перевести в двоичную систему счисления, а затем представить в дополнительном коде, для удобства возьмем длину разрядной сетки четыре бита.
Формат суммы представлен на рис. 4.12, , а вычисление суммы и значения флагов на рис.4.13.
1 |
0, |
0 |
1 |
1 |
|
D3 |
D2 |
D1 |
D0 |
Рисунок 4.12 - Формат суммы
Десятичное число |
Двоичное число |
Значения флагов |
|
2(10) |
0,010(2) |
FC=0 |
|
(-5)(10) |
1,011(2) |
FS=1 |
|
(-3)(10) |
1,101(2) |
FZ=0 |
|
FO=0 |
Рисунок 4.13 - Пример вычисления суммы двух чисел и значение флагов после получения результата
Значение флагов:
- FC=0, потому, что нет перехода (1) из разряда D2 в знаковый разряд D3 и нет перехода из знакового разряда D3 за пределы разрядной сетки.
- FS=1, потому, что значение знакового бита D3=1.
- FZ=0, потому, что сумма не равняется (0).
- FO=0, потому, что результат правильный и переполнение разрядной сетки нет. Число 1,101 и есть (-3). Для того, чтобы перейти к прямому коду необходимо все биты проинвертировать, а затем к младшему биту прибавить (1), рис.4.14:
1,101(2) |
(-3) |
|
0,010(2) |
инверсия |
|
1(2) |
+1 |
|
0,011(2) |
(+3) |
Рисунок 4.14 - Пример перехода от дополнительного кода числа к прямому коду
4., тогда:
.
Например: рассмотрим два случая а) и б).
Случай а): необходимо сложить два числа записанных в десятичной системе счисления ((-5)+(-2)=(-7)), для этого необходимо оба числа перевести в двоичную систему счисления, а затем представить в дополнительном коде, для удобства возьмем длину разрядной сетки четыре бита. Формат суммы представлен на рис. 4.15, а вычисление суммы и значения флагов на рис.4.16.
1 |
1, |
0 |
0 |
1 |
|
D3 |
D2 |
D1 |
D0 |
Рисунок 4.15 - Формат суммы
Случай а) |
|||
Десятичное число |
Двоичное число |
Значения флагов |
|
(-5)(10) |
1,011(2) |
FC=0 |
|
(-2)(10) |
1,110(2) |
FS=1 |
|
(-7)(10) |
11,001(2) |
FZ=0 |
|
FO=0 |
Рисунок 4.16 - Пример вычисления суммы двух чисел и значение флагов после получения результата
Значение флагов:
- FC=0, потому, что есть переход (1) из разряда D2 в знаковый разряд D3 и есть перехода из знакового разряда D3 за пределы разрядной сетки.
- FS=1, потому, что значение знакового бита D3=1.
- FZ=0, потому, что сумма не равняется (0).
- FO=0, потому, что результат правильный и переполнение разрядной сетки нет. Единица, которая вышла за пределы разрядной сетки не учитывается.
Число 1,001 и есть (-7). Для того, чтобы перейти к прямому коду необходимо все биты проинвертировать, а затем к младшему биту прибавить (1), рис.4.17.
Случай б): необходимо сложить два числа записанных в десятичной системе счисления ((-7)+(-7)=(-14)), для этого необходимо оба числа перевести в двоичную систему счисления, а затем представить в дополнительном коде, для удобства возьмем длину разрядной сетки четыре бита.
Формат суммы представлен на рис. 4.18, а вычисление суммы и значения флагов на рис.4.19.
1,001(2) |
(-7) |
|
0,110(2) |
инверсия |
|
1(2) |
+1 |
|
0,111(2) |
(+7) |
Рисунок 4.17 - Пример перехода от дополнительного кода числа к прямому коду
1 |
0, |
0 |
1 |
0 |
|
D3 |
D2 |
D1 |
D0 |
Рисунок 4.18 - Формат суммы
Случай б) |
|||
Десятичное число |
Двоичное число |
Значения флагов |
|
(-7)(10) |
1,001(2) |
FC=1 |
|
(-7)(10) |
1,001(2) |
FS=0 |
|
(-14)(10) |
10,010(2) |
FZ=0 |
|
FO=1 |
Рисунок 4.19 - Пример вычисления суммы двух чисел и значение флагов после получения результата
Значение флагов:
- FC=1, потому, что нет перехода (1) из разряда D2 в знаковый разряд D3 и есть переход из знакового разряда D3 за пределы разрядной сетки.
- FS=0, потому, что значение знакового бита D3=0, а это не правильно так как оба слагаемых отрицательные числа, значит и сумма должна быть отрицательные, а в данном случае сумма получается положительной так как знаковый бит равен (0).
- FZ=0, потому, что сумма не равняется (0).
- FO=1, потому, что результат не правильный и переполнение разрядной сетки есть. Единица, которая вышла за пределы разрядной сетки не учитывается.
Из вышесказанного на примере (4х- разрядной) сетки можно сделать следующие выводы:
- переполнение разрядной сетки возможно, когда оба операнда имеют одинаковые знаки;
- есть переход (1) из разряда D2 в знаковый разряд D3 и нет перехода из знакового разряда D3 за пределы разрядной сетки.
- нет перехода (1) из разряда D2 в знаковый разряд D3 и есть переход из знакового разряда D3 за пределы разрядной сетки.
При возникновении ситуации переполнения, увеличивается количество бит в разрядной сетке и результат становится правильным.
4.3 Операции сдвига в компьютерных системах
Является одной из самых распространенных в компьютерной арифметике. В частности, она используется при выполнении умножения или деления двоичных чисел. Обычно выполняется в регистрах как встроенная микрооперация за счет специальной организации внутрирегистровых связей.
Существует несколько вариантов сдвига:
1. Логический сдвиг. Сдвиг, который выполняется над всеми разрядами операнда, включая знаковый.
2. Арифметический сдвиг. Не влияет на положение знака операнда.
Арифметический сдвиг двоичного операнда влево или вправо на (i) разрядов эквивалентно соответственно умножению и делению исходного операнда на (2i).
При сдвиге вправо разряды исходного операнда, которые выходят за пределы разрядной сетки регистра, теряются, внося при этом ошибку, которая по абсолютной величине не превышает полученного после сдвига числа.
Сдвиг влево имеет смысл, пока не теряются значащие цифры операнда.
3. Модифицированный сдвиг. Арифметический сдвиг операндов, представленных обратным или дополнительным кодом:
- обратный код - при правом и левом сдвигах в освобождающиеся разряды регистра записываются цифры знакового разряда;
- дополнительный код - при сдвиге вправо в разряды, которые освобождаются, записываются цифры знакового разряда, а при сдвиге влево в освобождающиеся разряды записываются нули.
4. Циклический сдвиг. Операнд перемещается в регистре как в замкнутом контуре, поступая с выхода последнего разряда на вход первого.
Схемы выполнения операций сдвига приведены на рис. 4.20.
Рисунок 4.7 - Схемы выполнения операций сдвига
4.4 Умножение двоичных беззнаковых чисел в компьютерных системах
Пусть сомножителями X и Y являются s-битные целые числа без знака:
где - (Х) - множимое, (Y) - множитель, (Z) - произведение. Тогда:
Z = X • Y. (4.2)
где:
;
.
Представим множитель Y в развернутой форме:
. (4.3)
Тогда:
(4.4)
Произведение множимого на один бит множителя называется частичным произведением. Полное произведение числа представляет собой сумму (s) частичных произведений (ЧП). При умножении вручную существует два способа:
- способ № 1, начиная с младшей цифры множителя и сдвиг частичных произведений влево;
- способ № 2, начиная со старшей цифры множителя и сдвиг частичных произведений вправо. Например. Необходимо перемножить два беззнаковых числа (7•3=21). Для удобства возьмем длину разрядной сетки равную четырем битам. Правило умножения вручную заключается в следующем:
- шаг 1. Анализируется младший (правый) бит множителя, если младшая цифра множителя равна (1), то в сумму частичных произведений записываются все биты множимого, если младшая цифра множителя равна (0), то в сумму частичных произведений записываются все (0);
- шаг 2. Анализируется следующий после младшего бит множителя, если цифра множителя равна (1), то в сумму частичных произведений записываются все биты множимого сдвинутые на один разряд влево, если цифра множителя равна (0), то в сумму частичных произведений записываются все (0), сдвинутые на один разряд влево;
- шаг 3. Шаги (1) и (2) повторяются до тех пор, пока не будут проанализированы все цифры множителя;
- шаг4. Производится сложение всех сумм частичных произведений. Полученная сумма и будет равна произведению множимого на множитель.
Итак: необходимо перемножить два беззнаковых числа (7•3=21)
где: (7) - множимое;
(3) - множитель;
(21) - произведение.
Необходимо вычислить сумму частичных произведений - (ЧП), а следовательно и произведение.
Способ №1
Десятичное число |
Двоичное число |
Комментарии |
|
7(10) |
0111(2) |
множимое |
|
3(10) |
0011(2) |
множитель |
|
4321 |
номера цифр множителя |
||
0111 |
1ое - ЧП |
||
0111 |
2ое - ЧП |
||
0000 |
3ое - ЧП |
||
0000 |
4ое - ЧП |
||
21(10) 0010101(2) |
сумма ЧП - произведение |
||
Способ №2
Десятичное число |
Двоичное число |
Комментарии |
|
7(10) |
0111(2) |
множимое |
|
3(10) |
0011(2) |
множитель |
|
1234 |
номера цифр множителя |
||
0000 |
1ое - ЧП |
||
0000 |
2ое - ЧП |
||
0111 |
3ое - ЧП |
||
0111 |
4ое - ЧП |
||
21(10) 0010101(2) |
сумма ЧП - произведение |
В отличие от ручного умножения, операционное устройство компьютера не может просуммировать сразу (s) частичных произведений, как это делает человек. Обычный сумматор, как правило, рассчитан на одновременное сложение только двух операндов. Если нужно получить сумму нескольких слагаемых, то происходит накопление суммы: сначала в сумматор записывается первое слагаемое, к нему прибавляется второе, затем к полученной сумме прибавляется третье слагаемое и так до получения полной суммы.
Длина произведения s-битных сомножителей равна 2s бит:
(4.5)
Поскольку умножение на () эквивалентно сдвигу влево, то вычисление произведения (Z) сводится к формированию частичных произведений (), их сдвигу и суммированию с учетом весов, определяемых величинами ().
(4.6)
Умножение реализуется циклическим процессом, на каждом шаге которого:
- анализируется очередной бит множителя;
- в зависимости от его значения происходит (yi=1) или нет (yi=0) прибавление множимого к предыдущей сумме частичных произведений;
- производится изменение взаимного положения множимого (X) и суммы частичных произведений с учетом веса (2i).
Таким образом, умножение в двоичной системе счисления естественным образом сводится к двум операциям -- сложению и сдвигу чисел.
В соответствии со способом формирования суммы частичных произведений - (ЧП), возможны четыре варианта умножения. Они различаются тем, с каких разрядов множителя (Y) (младших или старших) начинается умножение, и что сдвигается (множимое или сумма ЧП).
Варианты умножения, начиная с младших или старших разрядов множителя, называются еще умножением младшими и старшими разрядами вперед соответственно. Схемы выполнения операции умножения двоичных беззнаковых чисел представлены на рис. 4.8. При умножении младшими разрядами вперед производятся последовательные сдвиги множителя вправо, вследствие чего в младшем разряде регистра множителя последовательно появляются все его цифры, начиная с младшей. Т.о., в специальной схеме анализа значения текущей цифры множителя нужно анализировать только состояние младшего разряда соответствующего регистра.
Рисунок 4.8 -- Схемы выполнения операции умножения двоичных беззнаковых чисел
Соответственно, при умножении старшими разрядами вперед должен анализироваться старший разряд множителя.
Схема 1
. (4.7)
. (4.8)
Время выполнения операции умножения:
(4.9)
где (tс) -- время, затрачиваемое на выполнение операции сдвига на один разряд;
(t+) -- время, затрачиваемое на выполнение операции сложения.
Схема 2
. (4.10)
(4.11)
. (4.12)
Схема 3
. (4.13)
. (4.14)
. (4.15)
Схема 4
. (4.16)
. (4.17)
. (4.18)
Рассмотрим на примере два базовых алгоритма умножения в компьютерных системах двоичных беззнаковых чисел:
Алгоритм №1. Алгоритм умножения младшими разрядами вперед, со сдвигом суммы ЧП вправо.
1. Исходное значение суммы (ЧП) принимается равным (0), счетчику тактов - (Сч.Т) присваивается значение, равное числу разрядов множителя.
2. Анализируется младшая разрядная цифра множителя. Если она равна (1), то к сумме (ЧП) прибавляется множимое, совмещенное по старшим разрядам; если (0) -- прибавление не производится.
3. Производится сдвиг множителя и суммы ЧП вправо на (1) разряд. Содержимое (Сч.Т) уменьшается на (1).
4. Анализируется содержимое (Сч.Т). Если оно не равно (0), то переход к (п.2), иначе -- (п.5).
5. Умножение закончено, младшая часть произведения находится на месте множителя, а старшая -- на месте суммы (ЧП). Например: необходимо перемножить два беззнаковых числа (7•3=21). Для удобства возьмем длину разрядной сетки равную четырем битам, а именно: Х = 7 - множимое, Y = 3 - множитель, Z = 21 - произведение. Если (X) и (Y) равняется четырем битам, то как было отмечено выше (Z) должно быть восьмиразрядным значением, т.е длина разрядной сетки произведения в два раза больше множимого и множителя. Алгоритм умножения приведен в табл. 4.1.
Таблица 4.1 - Алгоритм умножения со сдвигом вправо двоичных беззнаковых чисел
Регистр (В) Множимое X |
Регистр (С) множитель Y |
Регистр (А) произведение Z |
Счетчик тактов (Сч.Т) |
Комментарии |
|||||||
0 |
1 |
1 |
1 |
0 |
0 |
1 |
1 |
00000000 |
4 |
||
0111 |
множимое |
||||||||||
01110000 |
1Я СЧП |
||||||||||
0 |
0 |
1 |
00111000 |
3 |
1ЫЙсдвиг СЧП |
||||||
0111 |
множимое |
||||||||||
10101000 |
2Я СЧП |
||||||||||
0 |
0 |
01010100 |
2 |
2 ОЙсдвиг СЧП |
|||||||
0 |
00101010 |
1 |
3 ИЙсдвиг СЧП |
||||||||
00010101 |
0 |
4ЫЙсдвиг СЧП |
|||||||||
СТОП |
Алгоритм №2. Алгоритм умножения старшими разрядами вперед, со сдвигом суммы ЧП влево.
1. Исходное значение суммы (ЧП) принимается равным (0), (Сч.Т) присваивается значение, равное числу разрядов множителя.
2. Производится сдвиг суммы (ЧП) влево на (1) разряд.
3.Анализируется старшая разрядная цифра множителя. Если она равна (1), то к сумме (ЧП) прибавляется множимое, совмещенное по младшим разрядам; если (0) -- прибавление не производится.
4.Производится сдвиг множителя влево на (1) разряд. Содержимое (Сч.Т) уменьшается на (1).
5.Анализируется содержимое (Сч.Т). Если оно не равно (0), то переход к (п.2), иначе -- (п.6).
6.Умножение закончено, произведения находится на месте суммы (ЧП), которая имеет удвоенную разрядность. Например: необходимо перемножить два беззнаковых числа (7•3=21). Для удобства возьмем длину разрядной сетки равную четырем битам, а именно: Х = 7 - множимое, Y = 3 - множитель, Z = 21 - произведение. Если (X) и (Y) равняется четырем битам, то как было отмечено выше (Z) должно быть восьмиразрядным значением, т.е длина разрядной сетки произведения в два раза больше множимого и множителя. Алгоритм умножения приведен в табл. 4.2.
Таблица 4.2 - Алгоритм умножения со сдвигом влево двоичных беззнаковых чисел
Регистр (В) множимое X |
Регистр (С) множитель Y |
Регистр (А) произведение Z |
Счетчик тактов (Сч.Т) |
Комментарии |
|||||||
0 |
1 |
1 |
1 |
0 |
0 |
1 |
1 |
00000000 |
4 |
||
00000000 |
1ЫЙсдвиг СЧП |
||||||||||
0 |
1 |
1 |
00000000 |
3 |
2 ОЙсдвиг СЧП |
||||||
00000000 |
3 ИЙсдвиг СЧП |
||||||||||
1 |
1 |
00000000 |
2 |
4ЫЙсдвиг СЧП |
|||||||
00000000 |
5ЫЙсдвиг СЧП |
||||||||||
0111 |
множимое |
||||||||||
00000111 |
1Я СЧП |
||||||||||
1 |
1 |
||||||||||
00001110 |
6ОЙ сдвиг СЧП |
||||||||||
0111 |
множимое |
||||||||||
00010101 |
0 |
2Я СЧП |
|||||||||
СТОП |
4.5 Деление двоичных беззнаковых чисел в компьютерных системах
Деление мантисс чисел в форме с фиксированной запятой выполняется над абсолютными величинами операндов, представленными, чаще всего, прямым кодом.
Подобно умножению, деление в компьютерных системах реализуется как многошаговый процесс выполнения операций суммирования, сдвига и других элементарных операций.
В отличие от умножения этот процесс имеет итеративный характер, так как результат деления в большинстве случаев не может быть точно представлен числом конечной длины.
Как правило, формальным признаком окончания операции деления принимается количество сдвигов: при достижении числа сдвигов, равного количеству разрядов в частном, операция деления завершается.
Обозначим X - делимое, Y - делитель, а Z - частное. Тогда:
. (4.20)
Пусть (X), (Y) и (Z) являются беззнаковыми числами.
Операция деления характеризуется также дополнительным результатом (R) - остатком.
В практической реализации выделяют два типа операции деления:
- первый тип это когда делимое, делитель и частное имеют одну и ту же длину (s);
- второй тип это когда делимое имеет длину (2s) - удвоенную по сравнению с делителем и частным. Рассмотрим случай 1.
, . (4.21)
, . (4.22)
, . (4.23)
, . (4.24)
. (4.25)
Для того, чтобы деление было корректным, т.е. чтобы частное не превысило разрядную сетку, необходимо обеспечить выполнение условия:
. (4.26)
или
. (4.27)
В противном случае будет иметь место переполнение разрядной сетки.
Переполнение исключено, если делимое и делитель имеют одинаковую длину. Как особый случай переполнения рассматривают попытку деления на нуль.
По существу, деление сводится к последовательности вычитаний делителя вначале из делимого, а затем из остатков.
Цифра ( ) частного определяется следующим образом: если текущий остаток () больше или равен делителю, цифра частного равна (1), если меньше, то цифра частного равна (0).
При этом операция сравнения реализуется посредством операции вычитания.
Так как частное можно определить только со старших разрядов, существует два варианта деления представленных на рис. 4.9:
- с неподвижным делимым (частичным остатком) и сдвигаемым вправо делителем;
- с неподвижным делителем и сдвигаемым влево делимым (частичным остатком).
В зависимости от способа обработки отрицательного частичного остатка, различают два алгоритма деления:
- алгоритм №1, с восстановлением остатка;
- алгоритм №2 без восстановления остатка.
Деление с восстановлением остатка заключается в следующем, если на очередном шаге получен положительный остаток, то в очередную цифру частного записывается (1), а остаток становится «предыдущим» для следующего шага.
Данный шаг на этом заканчивается.
Рисунок 4.9 - Схемы деления двоичных беззнаковых чисел
Если текущий остаток отрицателен, то в очередную цифру частного записывается (0), а к остатку прибавляется делитель для восстановления предыдущего, сдвинутого влево остатка, который становится «предыдущим» для следующего шага.
Таким образом, отрицательный остаток аннулируется, поскольку он выполнил свою функцию сигнализатора о соотношении модулей остатка и делителя и больше не нужен.
Алгоритм №1. Деление целых двоичных беззнаковых чисел методом с восстановлением остатка.
1. Исходное значение частного (Z) полагается равным (0). (Сч.Т) присваивается значение (s). Исходное значение частичного остатка (R0) полагается равным (s) старшим разрядам делимого.
2. Выполняется пробное вычитание делителя (Y) из исходного значения частичного остатка - (ЧО). Положительная разность указывает на то, что частное превысит (s-разрядную сетку), и будет выполнено прерывание. Если же результат вычитания отрицательный, то деление можно выполнять.
3. Восстанавливается исходное значение (ЧО) прибавлением делителя к полученному отрицательному остатку.
4. (ЧО) удваивается путем сдвига на один разряд влево.
5. Из (ЧО) вычитается делитель и анализируется знак результата вычитания: если остаток положительный, то очередная цифра частного равна (1), иначе - (0).
6. Частное сдвигается влево с занесением очередной полученной цифры частного в освободившийся младший разряд. (Сч.Т) уменьшается на (1).
7. Если полученный остаток отрицателен, то восстанавливается предыдущий положительный остаток прибавлением делителя к отрицательному остатку.
8. (Пп. 4-7) последовательно выполняются до получения всех цифр частного, пока (Сч.Т) не станет равным (0).
9. Если последний остаток от деления отрицателен, то восстанавливается предыдущий положительный остаток, который будет окончательным остатком от деления.
Недостатки:
- нерегулярность выполнения операций, что усложняет устройство управления (для получения одной цифры частного необходимо выполнять либо одно вычитание и сдвиг, либо одно вычитание, одно сложение и сдвиг);
- относительно малая скорость деления, т.к. в среднем половина шагов будет содержать операцию восстановления остатка.
T=(s+l)(l,5t++tc)-tc.
Например: необходимо разделить два беззнаковых числа (21:7=3).
Для удобства возьмем длину разрядной сетки равную четырем битам, а именно:
Х = 21 - делимое;
Y = 7 - делитель;
Z = 3 - частное.
Если (Z) и (Y) равняется четырем битам, то как было отмечено выше (X) должно быть восьмиразрядным значением, т.е длина разрядной сетки делимого в два раза больше делителя и частного.
Алгоритм деления приведен в табл. 4.3.
Таблица 4.3 - Алгоритм деление целых двоичных беззнаковых чисел методом с восстановлением остатка.
Регистр (В) Делимое X |
Регистр (С) Делитель Y |
Регистр (А) Частное Z |
Счетчик тактов Сч.Т) |
|||||||||||||||
0 |
0 |
0 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
1 |
1 |
0 |
0 |
1 |
1 |
4 |
||
1 |
0 |
0 |
1 |
|||||||||||||||
1 |
0 |
1 |
0 |
<0 |
||||||||||||||
0 |
1 |
1 |
1 |
|||||||||||||||
1 |
0 |
0 |
0 |
1 |
||||||||||||||
0 |
0 |
1 |
0 |
1 |
0 |
1 |
||||||||||||
1 |
0 |
0 |
1 |
|||||||||||||||
1 |
0 |
1 |
1 |
<0 |
3 |
|||||||||||||
0 |
1 |
1 |
1 |
|||||||||||||||
1 |
0 |
0 |
1 |
0 |
||||||||||||||
0 |
1 |
0 |
1 |
0 |
1 |
|||||||||||||
1 |
0 |
0 |
1 |
|||||||||||||||
1 |
1 |
1 |
0 |
<0 |
2 |
|||||||||||||
0 |
1 |
1 |
1 |
|||||||||||||||
1 |
0 |
1 |
0 |
1 |
||||||||||||||
1 |
0 |
1 |
0 |
1 |
||||||||||||||
1 |
0 |
0 |
1 |
|||||||||||||||
1 |
0 |
0 |
1 |
1 |
>0 |
1 |
||||||||||||
0 |
1 |
1 |
1 |
|||||||||||||||
1 |
0 |
0 |
1 |
|||||||||||||||
1 |
0 |
0 |
0 |
0 |
>0 |
0 |
||||||||||||
СТОП |
Деления без восстановления остатка заключается в следующем, исходной предпосылкой для использования данного метода является желание избавиться от процедуры восстановления остатка.
Благодаря этому, длительность деления можно существенно уменьшить по сравнению с вышеприведенной оценкой (за счет исключения «лишней» операции восстановления остатка), используя алгоритм деления без восстановления остатка.
Проанализируем шаг деления, при котором текущий остаток оказался отрицательным. Обозначим:
- () - предыдущий остаток;
- () - текущий;
- () - последующий.
Пусть:
. (4.28)
При этом, в соответствии с правилом деления, должны выполняться три действия:
- восстановление предыдущего (сдвинутого влево) остатка:
. (4.29)
- сдвиг восстановленного остатка влево на один разряд:
. (4.30)
- вычитание модуля делителя из полученной кодовой комбинации:
. (4.31)
Таким образом, требуется перейти от текущего остатка:
. (4.32)
к последующему виду (4.31), избавившись от операции восстановления.
Если первым действием является сдвиг отрицательного остатка () влево, то:
. (4.33)
Правая часть (4.32) отличается от требуемого вида величиной |Y|.
Подобные документы
Основные форматы данных и их представление. Запись чисел в формат с плавающей точкой. Вычитание чисел в формате с плавающей точкой. Регистры операндов и результата, размером формата числа с плавающей точкой, двойной точности. Поля смещённого порядка.
курсовая работа [78,9 K], добавлен 09.09.2014Операции, осуществляемые при реализации алгоритмов цифровой обработки сигналов. Применение процессора ADSP-2106x для операций с фиксированной и плавающей точкой. Исключения при выполнении операций с плавающей точкой, режимы и границы округления.
реферат [35,2 K], добавлен 13.11.2009Арифметические операции с целыми числами. Сложение и вычитание в дополнительном коде. Представление чисел в формате с плавающей точкой. Особенности выполнения арифметических операций в соответствии с IEEE. Точность выполнения арифметических операций.
контрольная работа [5,6 M], добавлен 19.05.2010Создание программы ввода с клавиатуры двух чисел в 9-ричной системе счисления размером с слово, выполнение над ними деления и вывода результата в исходной системе счисления. Программа предусматривает контроль вводимой информации и результат операции.
лабораторная работа [11,3 K], добавлен 13.02.2009Сопоставление наиболее важных систем счисления. Перевод целых десятичных чисел в недесятичную систему и обратно. Особенности преобразования дробей. Правила выполнения арифметических действий над двоичными, восьмеричными и шестнадцатеричными числами.
контрольная работа [824,4 K], добавлен 17.11.2010Сущность Maple, предназначение пакета и его использование. Разделение рабочего поля, переключение командной строки в текстовую. Работа Maple с целыми числами, константами, радикалами и числами с плавающей точкой. Элементарные математические функции.
презентация [1,6 M], добавлен 29.04.2019Типы численных данных с фиксированной точкой и основные операции обращения с ними. Целые двоичные числа: классификация, особенности, основные понятия. Наработка практических навыков обращения с целыми числами на компьютере (запись, считывание, хранение).
контрольная работа [24,8 K], добавлен 12.03.2011Понятие и классификация систем счисления. Перевод чисел из одной системы счисления в другую. Перевод правильных и неправильных дробей. Выбор системы счисления для применения в ЭВМ. Навыки обращения с двоичными числами. Точность представления чисел в ЭВМ.
реферат [62,0 K], добавлен 13.01.2011Понятие и функции комплексных чисел. Правила выполнения арифметических операций с комплексными числами. Действия с комплексными числами: сложение, вычитание, произведение, деление. Программная реализация решения задачи. Пример выполнения программы.
курсовая работа [398,8 K], добавлен 01.02.2010Анализ двоичной, восьмеричной и шестнадцатеричной систем счисления и перевода десятичных чисел. Форматы хранения чисел с плавающей точкой. Программа для преобразования массива констант в формат числа с плавающей точкой на эмуляторе микро-ЭВМ СМ-1800.
курсовая работа [266,9 K], добавлен 24.12.2013