Основы теории построения арифметических процессоров
Выбери формат для чтения
Загружаем конспект в формате pdf
Это займет всего пару минут! А пока ты можешь прочитать работу в формате Word 👇
2. ОСНОВЫ ТЕОРИИ ПОСТРОЕНИЯ АРИФМЕТИЧЕСКИХ
ПРОЦЕССОРОВ
2.1. Логические элементы
Техническое устройство, реализующее логическую функцию, может
рассматриваться просто как логический элемент, внутренняя структура
которого не конкретизируется.
На принципиальных и функциональных схемах логический элемент
ИЛИ изображается прямоугольником с единицей в левом верхнем углу.
A
1
f(A,B)=A v B
B
Рис.2.1. Логический элемент «ИЛИ»
Логический элемент ИЛИ предназначен для «вычисления» значения
логического сложения A B .
Логический элемент И предназначен для «вычисления» значения
логического умножения A & B A B . Изображение логических элементов И
на функциональных схемах выглядит следующим образом.
A
&
f(A,B)=A & B
B
Рис.2.2. Логический элемент «И»
Логические элементы НЕ изображаются с кружком в выходной цепи.
1
f(A)=A
A
Рис.2.3. Логический элемент «НЕ»
Сигналы, вырабатываемые одним логическим элементом, можно
подавать на вход другого элемента. Это даёт возможность образовывать
цепочки из отдельных логических элементов.
Например:
A
1
1
f(A,B)=A v B
B
Рис.1.4. Цепочка из логических элементов
Каждую такую цепочку называют логическим устройством, а
соответствующую схему - функциональной схемой. Функциональную схему,
которую полностью можно описать таблицей истинности, называют
комбинационной логической схемой (КЛС).
КЛС - это схема, в которой значения входных переменных в
текущий момент времени полностью определяют значения выходных
переменных.
КЛС строятся из элементарных логических элементов И, ИЛИ, НЕ, и
более сложных элементов И-НЕ, ИЛИ-НЕ, соединяя их так, как это следует
из логической функции.
КЛС с n выходами описываются системой из n логических функций,
т.е. математической моделью комбинационной схемы является система
булевых функций.
2.2. Аппаратная поддержка операции сложения
Операция сложения в двоичной системе счисления (с/с) эффективно
реализуема
с
использованием
комбинационных
схем,
в
качестве
математического аппарата моделирования которых используется двузначная
булева алгебра. Широко используется одноразрядный двоичный сумматор,
условное обозначение которого приведено на рис. 2.5.
ai
bi
SM
pi-1
Si
pi
Рис. 2.5. Одноразрядный сумматор
На рис. 2.5. используются следующие обозначения:
ai , bi – цифры i -го разряда слагаемых А и В;
Si - сумма i -го разряда;
pi 1 - перенос из (i 1) -го разряда (из предыдущего разряда);
pi - перенос из i -го разряда (в следующий разряд).
Математическая модель одноразрядного сумматора представляет собой
следующую систему булевых функций:
pi ai bi ai pi 1 bi pi 1;
S i (ai bi pi 1 ) pi ai bi pi 1.
(2.1)
Таблица истинности модели одноразрядного сумматора представлена в
таблице 2.1.
Набор функциональных элементов, моделирующих булевы функции
дизъюнкции, конъюнкции и отрицания (И, ИЛИ, НЕ), называется набором
элементов булева базиса. Булев базис И-ИЛИ-НЕ избыточен.
Таблица 2.1
ai
bi
pi 1
pi
Si
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
Существуют неизбыточные базисы: И-НЕ, ИЛИ-НЕ. Отображая
функции (2.1) элементами булева базиса, построим функциональную схему
одноразрядного сумматора (рис. 2.6), которая представляет КЛС, т.е. схему
без элементов памяти.
Существуют два типа сумматоров:
- накапливающий,
- комбинационный параллельный.
Накапливающий
сумматор.
Схема
накапливающего
сумматора
приведена на рис. 2.7.
На этой схеме (рис. 2.7) условные графические символы, обозначенные
как А, В, A B , представляют собой сдвигающие регистры соответственно
для хранения 𝑛- разрядных исходных чисел А и В и суммы
этих чисел A B . Регистры имеют возможность сдвигать свое содержимое
на один разряд вправо при воздействии синхросигнала С. Графический
символ, обозначенный как Т, представляет собой триггер, который служит
для хранения одного бита. Причем триггер запоминает значение, которое
подано на его вход, только при воздействии синхросигнала С.
ai bi pi-1
&
1
&
pi
1
&
&
1
1
&
Si
Рис. 2.6. КЛС одноразрядного сумматора
A
B
ai
bi
pi-1
C
SM
ai+bi
pi
A+B
D
T
C
Рис. 2.7. Схема накапливающего сумматора
Работа приведенной схемы проходит следующим образом. В момент времени
t 0 в регистры А и В загружаются исходные двоичные числа, регистр A B
и триггер Т сбрасываются в 0. В момент времени t 1 на вход сумматора
подаются младшие разряды чисел А и В, а с выхода триггера Т значение 0.
Происходит сложение, и результат суммирования поступает на вход регистра
A B , а значение переноса на вход триггера Т. В следующий момент
времени по сигналу С происходит сдвиг всех регистров вправо на один
разряд и запоминание в триггере значение переноса. На вход сумматора
поступают следующие разряды чисел А и В, а также перенос от сложения
предыдущего разряда. При этом результат сложения предыдущих разрядов
запомнены в регистре A B , а старший его разряд готов для приема
результата сложения следующих разрядов А и В. Время сложения nразрядных чисел можно оценить как
tсл n tслSM
где n – количество разрядов; tслSM - время сложения одноразрядного
сумматора.
Комбинационный параллельный сумматор.
В отличие от накапливающего в комбинационном параллельном
сумматоре сложение происходит одновременно для всех разрядов, и
используется
n
одноразрядных
сумматоров. Схема комбинационного
параллельного сумматора приведена на рис. 2.8.
a0
b0
S0
SM
p0
a1
b1
S1
bn-1
SM
p1
an-1
SM
p2
1
Sn-1
pn-1
pn
n-1
Рис.2.8. Схема n-разрядного комбинационного параллельного сумматора
2.3. Ускорение операции сложения
Рассмотрим ускорение операции сложения на примере метода с
поэтапном получением частичных сумм и переносов с последующей их
отдельной обработкой. Этот метод иллюстрируется примером.
Пример. Сложить числа А и В.
А=1001111, В=101010.
частичная сумма 1
частичные переносы 1
частичная сумма 2
частичные переносы 2
частичная сумма 3
частичные переносы 3
Окончательная сумма
1001111
1100101
1110001
1111001
0101010
0010100
0001000
0000000
1111001
Процесс суммирования прекращается при достижении нулевых переносов.
2.4. Варианты схем умножения
Операция умножения сводится к элементарным операциям сложения и
сдвига. В зависимости от того, какой объект сдвигается, и с какого разряда
начинается умножение, различают четыре схемы умножения, которые
приведены ниже на рис. 2.9.
На рис. 2.9. а) - г) символ
означает наличие клапана, который
пропускает значение текущего множимого, если на его управляющий вход
подана 1. В противном случае клапан закрыт. Т.е., если на управляющий
вход клапана подаётся:
1, то клапан открывается, и содержимое регистра «Множимое»
суммируется с текущим содержимым сумматора SM;
0, клапан закрыт, и содержимое регистра «Множимое» не поступает в
сумматор SM. Умножение можно проводить, начиная или с младшего
разряда множителя, или со старшего разряда множителя.
сдвиг
1
n
Множитель
Множитель
SM
SM
2n
1
2n
1
сдвиг сдвиг
Множимое
2n
1
2n
1
б) 1 2 2
1
n
1
n
Множитель
Множитель
SM
SM
сдвиг
1
2n
1
1
n
1
n
в)
1 2 1
сдвиг
сдвиг
2n
Множимое
сдвиг
Множимое
а) 1 2 2
сдвиг
1
n
Множимое
г)
1 2 1
Рис. 2.9. Схемы умножения
а) схема умножения, начиная с младшего
множимого;
б) схема умножения, начиная со старшего
множимого;
в) схема умножения, начиная с младшего
частичных сумм произведения (сумматора);
г) схема умножения, начиная со старшего
частичных сумм произведения (сумматора).
разряда и со сдвигом
разряда и со сдвигом
разряда и со сдвигом
разряда и со сдвигом
Перед выполнением операции умножения ( t 0 ) в регистры
«Множимое» и «Множитель» загружаются сомножители, сумматор SM
обнуляется. В момент времени t 1 на управляющий вход клапана подаётся
значение разряда множителя (младшего рис. 2.1 а, в или старшего рис. 2.1 б,
г). Далее происходят действия, описанные выше, и подаётся сигнал сдвига.
По сигналу сдвига происходит сдвиг множителя вправо для схем рис. 2.1 а, в,
и влево для схем рис. 2.1 б, г. Одновременно происходит сдвиг множимого
для схем рис. 2.9 а, б, текущего содержимого сумматора SM для схем
рис. 2.9 в, г.
На рис. 2.9 около каждого графического символа проставлена
разрядность. Мнемоника, например,
1 2 2
означает, что в схеме
используется множимое разрядностью n и по сигналу сдвига сдвигается
вправо на один разряд, SM имеет разрядность 2n, множитель имеет
разрядность 2n и по сигналу сдвига сдвигается влево на один разряд.
Знак произведения определяется как функция «ИСКЛЮЧАЮЩЕЕ
ИЛИ» от знаков сомножителей, т.е.:
Зн.A B Зн.A Зн.B .
2.5. Ускорение операции умножения
Ускорить операцию умножения можно за счет уменьшения количества
слагаемых, т.е. единиц в множителе. Рассмотрим двоичную с/с с
симметричным основанием. Алфавит такой с/с имеет вид:
A 1, 0,1 1 , 0,1 .
Если задано двоичное число с натуральным основанием, которое состоит из
11 , то в двоичной с/с с симметричным основанием его
k единиц, x 1111
k
можно представить как число x 1000
0 1 , содержащее k 1 нулей.
k 1
Справедливо соотношение: 111
1
k
k 1
0 1 .
2i 2 k 20 100
i 0
k
Таким образом, используя двоичную с/с с симметричным основанием,
можно сократить количество единиц в последовательности единиц, а тем
самым сократить количество операций сложения и сдвига. На этом построен
метод анализа двух разрядов множителя, который и рассматривается ниже.
Рассмотрим метод умножения, начиная с младшего разряда и со
сдвигом
частичных
сумм
произведения.
При
этом
используется
дополнительный или обратный код чисел. Для каждой комбинации двух
двоичных разрядов введем правила, определяющие действия в каждом
конкретном случае (табл. 2.2).
Таблица 2.2
Правила преобразования пар разрядов множителя и действия на сумматоре
Анализируемые
Преобразование
пары разрядов разрядов множителя
00
Не преобразуется
01
Не преобразуется
Действия при анализе во время
сложения на сумматоре SM
Сдвиг на 2 разряда вправо содержимого
2
сумматора: SМ .
Содержимое SM складывается с
множимым x1 , затем результат сложения
сдвигается на 2 разряда вправо:
1.
SM SM x1
о/д ;
2
2. SМ .
10
Не преобразуется
Содержимое SM складывается с
множимым x1 , сдвинутым на 1 разряд
влево, затем результат сложения
сдвигается на 2 разряда вправо:
1
о/д ;
1. SМ SМ x1
2
11
Заменяется на 10 1 ,
на место
анализируемой пары
2. SМ .
Содержимое SM складывается с
множимым - x1 в заданном обратном (о)
или дополнительном (д) коде, затем
результат сложения сдвигается на 2
записывается 0 1 , а 1
суммируется со
следующей (старшей)
анализируемой парой
разрядов
разряда вправо:
1. SМ SМ x1
о/д ;
2
2. SМ .
Поясним действия, записанные в табл. 2.2.
00: преобразование пары разрядов не происходит, сложение не
производится, частичная сумма произведения (содержимое SM) сдвигается
вправо на два разряда;
01: преобразование пары разрядов не происходит, производится
суммирование текущей частичной суммы произведения (содержимого SM) с
текущем значением множимого, затем частичная сумма произведения
(содержимое SM) сдвигается вправо на два разряда;
10:
преобразование
пары
разрядов
не
происходит,
множимое
сдвигается вправо на один разряд, производится суммирование текущей
частичной суммы произведения (содержимого SM) со сдвинутым значением
множимого, затем частичная сумма произведения (содержимое SM)
сдвигается вправо на два разряда;
11: проводится преобразование вида 11 101 , осуществляется перенос
единицы в старшую пару разрядов множителя, текущая пара есть 0 1 ,
производится операция вычитания текущего значения множимого из
текущего значения частичной суммы произведения (из содержимого SM), т.е.
сложение кодов.
Пример 1. Умножить число x1 на число x2 , используя метод анализа
двух разрядов множителя. При вычислениях будет использован обратный
код.
x1 10110111011 - множимое;
x2 1110000011 - множитель.
Решение.
Работа
происходит
с
модулями
чисел,
используются
модифицированные коды.
1) Знак результата: Зн.x1 Зн.x 2 1 0 1 .
2) Подготовка операндов.
Для выполнения работ на сумматоре потребуются преобразования:
x1 п x1 o 00.10110111011 - используется при арифметическом сложении
для пары 01;
x1 o 11.0100100010 0 - используется при замене вычитания сложением в
обратном коде, для пары 0 1 ;
1
x1 o 01.01101110110 - используется для пары 10.
x2 о 00.1110000011 001110 00 0011
Делим
начиная
на
пары
с
младшего
переписываем,
правила
разрядов,
и
используя
преобразования
разрядов.
x2 о,101 01
0110
00
01
01
*
*
Пары, помеченные «*», ранее содержали комбинацию «00» и были
преобразованы: +1 переноса, появившаяся при анализе и преобразовании
предыдущей пары 11 101 , т.е. пара 0 1 записывается вместо пары 11, а 1
суммируется со следующей анализируемой парой разрядов.
3) Выполнение действий на сумматоре
В начальный момент времени сумматор обнуляется.
00.00000000000
SM 0
11.01001000100
Анализ пары 01
11.01001000100
SМ SМ x1 o
11.1101001000100
SM
2
00.10110111011
00.1000100110000
00.0000000000001
00.1000100110001
Анализ пары 01
SМ SМ x1 о
цикл. перенос
2
00.001000100110001
SM
00.00001000100110001
Анализ пары 00 : SM
01.01101110110
2
Анализ пары 10
1
01.01110111010110001
SМ SМ x1 o
2
00.0101110111010110001
11.01001000100
11.1010011001010110001
SM
Анализ пары 01
SМ SМ x1 o
2
11.111010011001010110001
00.10110111011
00.101000001111010110001
00.000000000000000000001
SM
Анализ пары 01
SМ SМ x1 о
цикл. перенос
00.101000001111010110010
2
00.00101000001111010110010 SM
Ответ: x1 x2 101000001111010110010
Пример 2. Умножить число x1 на x2 , используя метод анализа двух
разрядов множителя. При вычислениях будет использован дополнительный
код.
x1 0,10011001 - множимое;
x2 0,10110110 - множитель.
1) Знак результата: Зн.x1 Зн.x2 0 0 0 .
2) Подготовка операндов
x1 п x1 д 00.10011001
- используется при арифметическом сложении
для пары 01;
x1 д 11.01100111
- используется при замене вычитания сложением в
обратном коде, для пары 0 1 ;
1
x1 д 01.00110010 - используется для пары 10.
x2 д 00.10110110 00
01
.10
11
10
.
Проведем анализ пар разрядов множителя x2 в дополнительном коде,
применив двоичную с/с с симметричным основанием:
x2 д,101 01. 01 01 0110 .
Анализ пар разрядов множителя проводится, начиная с младших
разрядов.
3) Выполнение действий на сумматоре
В начальный момент времени сумматор обнуляется.
00.00000000
SМ 0
01.00110010
Анализ пары 10
1
01.00110010
SМ SМ x1 д
00.0100110010
SM
2
00.10011001
Анализ пары 01
00.1110010110
SМ SМ x1 д
00.001110010110
SM
11.01100111
Анализ пары 01
2
11.101000000110
SМ SМ x1 д
2
11.11101000000110
11.01100111
11.01001111000110
11.1101001111000110
00.10011001
00.0110110011000110
SM
Анализ пары 01
SМ SМ x1 д
2
SM
Анализ пары 01
SМ SМ x1 д
2
00.000110110011000110 SM
Результат: x1 x2 0,011011001100011.
2.6. Умножение кодов
В случае, когда числа в ЭВМ представлены в дополнительном или
обратном коде, необходимо операции производить в этом же коде.
Правило 1. Произведение дополнительных кодов сомножителей равно
дополнительному коду результата только
в случае
положительного
множителя.
В этом случае умножение сводится к анализу разрядов множителя,
получению частичных сумм и сдвигу.
Пример. Умножить целые числа x1 10101 и x2 10011, используя
дополнительный код. Сдвигается SM.
x1 д 11.01011
x2 д 00.10011
Сумматор Множитель
00.000000000
11.010110000
11.010110000
10011
11.101011000
11.010110000
11.000001000
01001
11.100000100
11.110000010
11.111000001
00100
00010
00001
11.010110000
11.001110001
x1 x2 д 11.001110001
x1 x2 110001111
Правило 2. Произведение дополнительных кодов при отрицательном
множителе получается путем прибавления дополнения множимого к
произведению дополнительных кодов.
Пример. Найти произведение x1 0,10111 и x2 0,11001, используя
дополнительный код.
x1 д 11.01001
x2 д 11.00111
Сумматор
00.0000000000000
Множитель
00111
11.0100100000000
11.0100100000000
11.1010010000000
10011
11.0100100000000
10.1110110000000
11.0111011000000
11001
11.0100100000000
10.1011111000000
11.0101111100000
11100
11.1010111110000
11110
11.1101011111000
11111
11.0100100000000
11.0001111111000
x1 x2 д 11.0001111111000
x1 x2 0,1110000001
Умножение чисел в обратном коде подчиняется тем же правилам, за
исключением того, что при отрицательном множителе к произведению
обратных кодов прибавляется код, полученный от обращения обратного кода
множимого.
2.7. Особенности выполнения операции деления
Операция деления является приближенной операцией.
Операция деления сводится к элементарным операциям:
-
вычитания;
-
анализу остатка ∆ от вычитания;
-
сдвигу.
Анализ остатка ∆ от вычитания проводится с целью определения
значения текущего разряда частного по правилу:
-
если ∆0 , то в частное записывается значение текущего
разряда 1;
-
если ∆ 0 , то в частное записывается значение текущего
разряда 0.
Сдвиг проводится или делителя, или остатка от вычитания. Поэтому
различают две схемы сдвига (рис. 2.10):
а) сдвиг делителя
2n
б) сдвиг остатка
2n
1
Делитель
Делитель
Зн.
1
Зн.
SM
SM
2n
1
2n
1
n
1
n
1
Частное
-1
Частное
-1
C
C
Рис. 2.10. Схемы деления
Сдвиг происходит по сигналу С. Деление прекращается:
а) при получении нулевого делителя или остатка;
б) при заполнении всех разрядов частного.
Различают два подхода к делению:
1) с восстановлением остатка;
2) без восстановления остатка.
При использовании формы с фиксированной запятой перед старшим
разрядом должно выполняться требование:
Делитель Делимое .
Знак частного определяется функцией «ИСКЛЮЧАЮЩЕЕ ИЛИ» от
знаковых разрядов делимого и делителя.
2.8. Деление с восстановлением остатка
При выполнении деления с восстановлением остатка, как со сдвигом
остатка, так и со сдвигом делителя, восстановление остатка производится
только в случае получения отрицательного значения текущего остатка.
Процедура восстановления остатка сводится к сложению текущего значения
остатка с текущим значением делителя.
2.8.1 Деление с восстановлением остатка и со сдвигом остатка
Правило.
1) Из кода делимого вычитается код делителя.
2) Анализируется знак результата (остатка):
- если знак равен 0, то в текущий разряд частного записывается 1;
- если знак равен 1, то в частное записывается 0 и производится
восстановление остатка, т.е. к полученному остатку прибавляется
значение положительного делителя.
3) Остаток сдвигается влево на один разряд, освободившийся разряд
справа заполняется нулём.
4) Если деление не закончено, то делимому присваивается значение
остатка, и происходит переход к п.1. В противном случае деление
прекращается.
Особенность: во время деления значение делителя по модулю не
меняется.
Пример. Разделить x1 на x2 , используя метод с восстановлением
остатка со сдвигом остатка. Использовать дополнительный код.
x1 0,1001100, x2 0,1010100.
x1 д 00.1001100, x2 д 00.1010100, x2 д 11.0101100.
Зн.рез Зн.x1 Зн.x2 0 0 0 .
00.1001100 делимое
11.0101100 вычитание делителя сложение в д.к.
0 11.1111000 0
00.1001100 восстановленный остаток
,
01.0011000 сдвиг остатка 1
11.0101100 вычитание делителя
1 00.1000100 0
01.0001000 сдвиг остатка 1
11.0101100 вычитание делителя
1 00.0110100 0
00.1101000 сдвиг остатка 1
11.0101100 вычитание делителя
1 00.0010100 0
00.0101000 сдвиг остатка 1
11.0101100 вычитание делителя
0 11.1010100 0
00.0101000 восстановленный остаток
00.1010000 сдвиг остатка 1
11.0101100 вычитание делителя
0 11.1111100 0
00.1010000 восстановленный остаток
01.0100000 сдвиг остатка 1
11.0101100 вычитание делителя
1 00.1001100 0
Результат: x1 / x2 0,111001.
2.8.2. Деление с восстановлением остатка и со сдвигом делителя
Правило.
1) Из кода делимого вычитается код текущего значения делителя.
2) Анализируется знак результата (остатка):
- если знак равен 0, то в текущий разряд частного записывается 1.
- если знак равен 1, то в частное записывается 0 и производится
восстановление остатка, т.е. к полученному остатку прибавляется
значение положительного текущего делителя.
3) Делитель сдвигается вправо на один разряд. Освободившийся
старший разряд отрицательного делителя заполняется единицей.
4) Если деление не закончено, то делимому присваивается значение
остатка, и происходит переход к п.1. В противном случае деление
прекращается.
Пример. Разделить x1 на x2 , используя метод с восстановлением
остатка со сдвигом делителя. Использовать дополнительный код.
x1 0,1000100, x2 0,1100101.
x1 д 00.1000100, x2 д 00.1100101, x2 д 11.0011011
Зн.рез Зн.x1 Зн.x 2 1 0 1 .
Частное 00.1000100 делимое
11.0011011 делитель
0
,
1
11.1011111 0
0
0
0
11.1100110 сдвинутый делитель
00.0010001 восстановленный остаток
11.1110011 сдвинутый делитель
00.0000100 0
11.1111001 сдвинутый делитель
00.0000100 восстановленный остаток
11.1111100 сдвинутый делитель
00.0000000 0
11.0011011
1
11.1001101
1
11.1100110
1
11.1110011
1
11.1111001
1
11.1111100
1
11.1111110
1
11.1111111
11.1111110 сдвинутый делитель
11.1111110 0
0
00.0010001 0
11.1111101 0
1
11.1001101 сдвинутый делитель
11.1110111 0
1
00.1000100 восстановленный остаток
Сдвиг делителя
00.0000000 восстановленный остаток
11.1111111 сдвинутый делитель
11.1111111
Результат: x1 / x2 0,1010100.
2.9. Деление без восстановления остатка
Особенностью деления без восстановления остатка, как со сдвигом
остатка, так и со сдвигом делителя, является тот факт, что в процессе
получения частичных остатков, знак остатка определяет дальнейшую
операцию: если остаток отрицательный, то следующая операция сложение, а
если остаток положительный, то следующая операция - вычитание.
2.9.1. Деление без восстановления остатка и со сдвигом остатка
Правило.
1) Из кода делимого вычитается код делителя.
2) Анализируется знак результата (остатка):
- если знак равен 0, то в текущий разряд частного записывается 1
и выполняется переход к п. 3.
- если знак равен 1, то в частное записывается 0 и выполняется
переход к п. 4.
3) Если деление не закончено, остаток сдвигается влево на один
разряд. Из кода остатка вычитается код делителя, и происходит
переход к п.2. В противном случае деление прекращается.
4) Если деление не закончено, остаток сдвигается влево на один
разряд. Код остатка складывается с кодом делителя, и происходит
переход к п.2. В противном случае деление прекращается.
Пример. Разделить x1 на x2 , используя метод без восстановления
остатка со сдвигом остатка. Использовать дополнительный код.
x1 0,1000100, x2 0,1010101.
x1 д 00.1000100, x2 д 00.1010101, x2 д 11.0101011.
Зн.рез Зн.x1 Зн.x2 0 0 0 .
Результат 00.1000100 делимое
11.0101011 делитель x2 д
0
,
11.1101111 0
1
00.1010101 делитель x2 д
00.0110011 0
1
00.1100110 сдвиг остатка 1
11.0101011 делитель x2 д
00.0010001 0
0
00.0100010 сдвиг остатка 1
11.0101011 делитель x2 д
11.1001101 0
0
11.0011010 сдвиг остатка 1
00.1010101 делитель x2 д
11.1101111 0
1
11.1011110 сдвиг остатка 1
00.1010101 делитель x2 д
00.0110011 0
1
00.1100110 сдвиг остатка 1
11.0101011 делитель x2 д
00.0010001 0
0
11.1011110 сдвиг остатка 1
00.0100010 сдвиг остатка 1
11.0101011 делитель x2 д
11.1001101 0
Результат: x1 / x2 0,1100110.
2.9.2. Деление без восстановления остатка и со сдвигом делителя
Правило.
1) Из кода делимого вычитается код делителя.
2) Анализируется знак результата (остатка):
- если знак равен 0, то в текущий разряд частного записывается 1;
переход к п. 3.
- если знак равен 1, то в частное записывается 0; переход к п. 4.
3) Если деление не закончено, делитель сдвигается вправо на один
разряд. Из кода остатка вычитается код делителя, и происходит
переход к п.2. В противном случае деление прекращается.
4) Если деление не закончено, делитель сдвигается вправо на один
разряд. Код остатка складывается с кодом делителя, и происходит
переход к п.2. В противном случае деление прекращается.
Пример. Разделить x1 на x2 , используя метод без восстановления
остатка со сдвигом делителя. Использовать дополнительный код.
x1 0,1001100, x2 0,1100100.
x1 д 00.1001100, x2 д 00.1100100, x2 д 11.0011100
Зн.рез Зн.x1 Зн.x 2 1 0 1 .
Результат 00.1001100 делимое
11.0011100 делитель
0
11.1101000 0
1
,
00.0110010 x2 д
1
1
0
0
0
1
11.1100111 x2
д
00.0000001 0
11.1110011
00.1100100
11.0011100
1
00.0110010
11.1001110
1
00.0011001
11.1110100 0
00.0000110
11.1100111
11.1111010 0
00.0000011
00.0001100
0
0
00.0011010 0
Сдвиг делителя
11.1111101 0
00.0000001
1
11.1110011
1
00.0000110
11.1111110 0
00.0000000
11.1111001
11.1111110 0
00.0000011
1
11.1111100
1
00.0000001
11.1111110
1
00.0000000
11.1111111
Результат: x1 / x2 0,11.
2.10. Ускорение операции деления
Подходы к ускорению операции деления заключаются в следующем:
При образовании достаточно малого или достаточно большого по
модулю остатка очередные цифры частного будут группой одинаковых
цифр - либо 0, либо 1. Поэтому продолжение деления излишне, т.к. эту
группу цифр можно записать в частное сразу.
При малом положительном остатке в частное можно сразу записать
(k 1) нулей в соответствующие разряды, остаток сдвинуть на k разрядов
влево, вычесть из него делитель и продолжить операцию деления.
Пример. Найти частное от чисел в десятичной с/с:
x1 4456825, x2 2225 .
4456825 2225
4450
2 00 3
000
6825 k
1
k
6825
Результат: x1 x2 2003.
Пример. Найти частное от двоичных чисел:
x1 1000010000001, x2 1000001.
10000100000011000001
1000001
1000001
000000
1000001
k 1
k
1000001
Результат: x1 x2 1000001.
При большом положительном остатке, у которого k старших разрядов
содержат 1 (для двоичных чисел), в (k 1) -е разряды частного записываются
1, остаток сдвинуть на k разрядов влево.
Для отрицательных остатков проводится анализ в старших разрядах.