47982 (572110), страница 2
Текст из файла (страница 2)
В Рг1 размещается делитель, а в РгВ и Рг2-делимое. В триггерах знака сохраняются знаки операндов. Регистр 3 используется для размещения цифр частного. Общая схема алгоритма:
1.Берутся модули от операндов, которые размещаются в регистрах.
2.Делимое на 1 разряд, для этого регистр А обнуляется и содержимое передается в регистр сумматора со сдвигом на один разряд.В освободившийся младший разряд сумматора записывается младший разряд из регистра 2. После этого содержимое регистра сумматора записывается в регистр В. одновременно разряды регистра 2, кроме старшего, передаются в Рг2’ со сдвигом на 1 разряд и затем в регистр 2.
3.выполняется получение значения частичных разностей путем сложения содержимого регистра В и обратного кода делителя из регистра А. Выполняется добавление 1 к младшему разряду сумматора для получения дополнительного кода делителя.
4.Если 0-й разряд регистра сумматора>0, то цифра Zi, заносимая в младший разряд регистра 3’=1. Содержимое регистра 3’ передается в регистр 3. При очередном получении частичных (текущих?)разностей содержимое регистра 3 передается в 3’ со сдвигом на 1 разряд.
Счетчик циклов содержит количество цифровых разрядов частного. После получения очередной цифры частного значение счетчика уменьшается на 1. При достижении 0 операция заканчивается. Если в процессе получения частичных разностей текущее значение в регистре сумматора <0, то в качестве цифры Zi заносится 0, а предыдущее значение частичных разностей восстанавливается(оно хранилось в регистре В) и сдвигается на 1 разряд; с занесением из регистра 2 очередной цифры делимого в младший разряд регистра сумматора при обнулении регистра А. Затем производится передача полученного значения текущей разности в регистр В.
В регистре В производится сдвиг оставшейся части делимого для последующих операций.
Рассмотренный алгоритм предполагает при получении значения <0 частичного остатка его восстановление до предыдущего значения. Это требует дополнительного промежутка времени. Поэтому на практике используется алгоритм деления без восстановления остатка со сдвигаемым значением частичной разности и неподвижным делителем. Алгоритм:
1.Берутся модули от делимого и делителя.
2.Значение частичного остатка полагается равным старшим разрядам делимого
3.Значение частичного остатка удваивается путем сдвига на 1 разряд.
4.Из значения частичных остатков вычитается делитель; если частичный остаток >0 !!!! то прибавляется делитель если <0!!!!
5.Цифра частного полагается =1, если после выполнения предыдущего шага частичные остатки >=0 и 0 в противном случае.
6.Пункты 3,4,5 выполняются до получения всех цифр частного.
7.Если в конце цикла частичный остаток <0 то он восстанавливается путем добавления делителя.
Знак частного =0, если знаки делимого и делителя совпадают, и 1 если они различны.
Содержание деления без восстановления остатков заключается в том, что при сдвиге значение частичного остатка а удваивается 2а ,поэтому вычитание делителя эквивалентно 2а-в=2(а-в)+в его добавлению на следующем шаге.
Данный алгоритм может применяться и для деления целых операндов, представленных прямым кодом для положительных чисел и дополнительным кодом для отрицательных. При этом необходимо производить определение цифр частного в зависимости от соотношений знаков частичных остатков и делителя в соответствии со следующей таблицей:
Частичные остатки | Делитель | Операция | Цифра частного |
+ | + | Вычитание Y | 1 |
+ | - | Добавление Y | 0 |
- | + | Добавление Y | 0 |
- | - | Вычитание Y | 1 |
Если x>0,a y<0 то частное следует увеличить на 1
Если x0 то частное следует увеличить на 1 в случае если остаток =0
Если x<0,a y<0 то частное следует увеличить на 1если остаток=0.
Построение АЛУ для выполнения операции умножения чисел с плавающей точкой
Правила умножения:
X=qx*SPx
Y=qy*SPy
Z=X*Y= qx* qy* SPx+Py = qz *SPz
T.o. qz= qx* qy ; Pz= Px+ Py ;
В соответствии с данными выражениями мантисса произведения равна произведению мантисс сомножителей.
Результат нормализуется. Знаку результата соответствует:
+ если мантиссы сомножителей имеют одинаковые знаки;
- если мантиссы сомножителей имеют разные знаки.
Учитывая то, что порядки сомножителей имеют смещение, то при прямом копировании приведенных действий порядок результата должен быть уменьшен на 1 смещения. Поэтому, если при сложении смещённых порядков старшие разряды суммы имеют нулевые значения, то это означает, что мы не можем извлечь смещение, т.к. значение 00 меньше чем извлекаемое смещение. Поэтому в качестве результата операции принимается 0 т.к. мантисса не может быть размещена в разрядной сетке при таком значении порядка.
Р[0]=0; P[1]=0 в качестве результата операции принимается 0
Р[0]=0; P[1]=1
Тогда производится коррекция, путём инвертирования этого разряда, т.о. получаем требуемый смещённый порядок.
Р[0]=1; P[1]=0
Мы получили отрицательное значение суммы смещённых порядков и смещённый порядок суммы получается путём инвертирования.
Р[0]=1; P[1]=1
Мы получили отрицательное значение суммы смещённых порядков, разрядная сетка переполняется, но переполнение может исчезнуть при выполнении нормализации мантисс. Эта ситуация отражается в специальном триггере, который характеризует ситуацию возможного переполнения порядков.
Общая схема АЛУ для операции умножения
В Рг1 размещается множимое, в Рг2-множитель. В начале для сложения смещённых порядков в РгА и РгВ передаются только биты смещённых порядков. Биты мантисс в РгА и РгВ обнуляются. Соответственно обнуляются и регистры знаков. Сами знаки пишутся в ТрЗн. После размещения порядков в РгА и РгВ сумматор формирует код суммы смещённых порядков. Он размещается в соответствующем поле РгСм.
Производится анализ двух старших разрядов в этом поле в соответствии с приведенными выше рассуждениями. В результате формируется смещённый порядок произведения с необходимыми корректировками кода, который помещается в Сч1.
После этого идёт произведение мантисс. Для этого:
В РгА идёт код мантиссы Х(8-31 разр.). РгВ используется для хранения текущего значения суммы частичных произведений. Идёт анализ младших разрядов мантиссы Y в Рг2 и добавление или не добавление к текущему значению суммы частичных произведений мантиссы Х.
Результат в виде суммы частичных произведений передаётся в РгСм со сдвигом вправо и последующей передачей в РгВ.
Процесс идёт до получения требуемого количества разрядов произведения мантисс.
Отличие данного умножения мантисс от умножения мантисс целых чисел в том, что мантисса произведения имеет тот же размер, что и мантиссы сомножителей. После окончания умножения мантисс результат нормализуется (возможно изменяется значение Сч1). Результат Сч1 идёт в поле для смещённого порядка.