Cтраница 3
При выполнении деления чисел с плавающей точкой используются сумматор См, регистры Pel и Рг2 для приема соответственно делителя и делимого, регистры РгА и РгВ для хранения смешенных порядков делителя и делимого и для хранения мантиссы делителя и частичного остатка при получении мантиссы частного, счетчик Сч1 для хранения смещенного порядка частного, регистры Рг2 и Рг2 для хранения цифровых разрядов мантиссы частного, триггеры знаков делимого и делителя ТгЗн. Рассмотренное АЛУ можно считать типичным для ЭВМ общего назначения средней производительности. Несколько иначе строятся АЛУ для малых ЭВМ и микропроцессоров. [31]
Поскольку мы условились, что старший разряд делителя содержит единицу, то результат будет получаться в прямом коде тогда, когда в старшем разряде частичного остатка в дополнительном коде будет находиться единица. Это делает возможным сдвиг частичного остатка и образование единиц в стольких разрядах частного, сколько единиц стоит подряд в дополнительном коде частичного остатка. [32]
![]() |
Схема делания с восстановлением остатка. [33] |
Обычно в вычислительных машинах для деления используется другой метод, называемый методом выполнения деления без восстановления остатка. При этом методе, если результат вычитания получился отрицательный, частичный остаток не восстанавливается путем прибавления делителя, а на следующем шаге деления вместо вычитания делимого производится его прибавление к частичному остатку. Если результат при этом остался отрицательным, то в очередную цифру частного записывается нуль и на следующем шаге также выполняется сложение. [34]
Если в результате вычитания выясняется, что делимое или очередной частичный остаток больше или равны делителю, то в очередной разряд частного записывается единица и полученный в результате вычитания частичный остаток сдвигается влево на один разряд. Если в результате вычитания выясняется, что делимое или очередной частичный остаток меньше делителя, то в очередной разряд частного записывается нуль, к полученной разности добавляется делитель, чтобы восстановить предыдущий частичный остаток, и результат сдвигается влево на один разряд. [35]
В этом случае можно записать в частное m нулей и сдвинуть делимое на т разрядов влево. Для определения следующей цифры частного необходимо вычесть делитель из частичного остатка. [36]
Когда частичный остаток в прямом коде имеет т нулей подряд, начиная со старшего разряда, надо сдвинуть его на m разрядов влево, записать в очередные разряды частного т нулей и вычесть из сдвинутого остатка делитель. Если результат получен в прямом коде, то в очередной разряд частного записывается единица и частичный остаток сдвигается на все разряды, содержащие нули, после чего вновь производится вычитание делителя. Если после вычитания результат получен в дополнительном коде, то в очередной разряд частного записывается нуль. [37]
![]() |
Блок-схема АЛУ с плавающей запятой. [38] |
Если же результат выражается в прямом, коде, то необходимо для получения каждой единицы в частном выполнять отдельное вычитание. Это особенно часто встречается при малых делителях, так как маловероятно чтобы малый делитель изменил знак частичного остатка. [39]
Поскольку мы условились, что старший разряд делителя содержит единицу, то результат будет получаться в прямом коде тогда, когда в старшем разряде частичного остатка в дополнительном коде будет находиться единица. Это делает возможным сдвиг частичного остатка и образование единиц в стольких разрядах частного, сколько единиц стоит подряд в дополнительном коде частичного остатка. [40]
Поскольку мы условились, что старший разряд делителя содержит единицу, то результат будет получаться в прямом коде тогда, когда в старшем разряде частичного остатка в дополнительном коде будет находиться единица. Это делает возможным сдвиг частичного остатка и образование единиц в стольких разрядах частного, сколько единиц стоит подряд в дополнительном коде частичного остатка. [41]
Если в результате вычитания выясняется, что делимое или очередной частичный остаток больше или равны делителю, то в очередной разряд частного записывается единица и полученный в результате вычитания частичный остаток сдвигается влево на один разряд. Если в результате вычитания выясняется, что делимое или очередной частичный остаток меньше делителя, то в очередной разряд частного записывается нуль, к полученной разности добавляется делитель, чтобы восстановить предыдущий частичный остаток, и результат сдвигается влево на один разряд. [42]
Команда FPREM позволяет получить частичный остаток от деления чисел. Циклическое использование этой команды с запоминанием промежуточных значений частного позволяет получить точное значение частного с любой, наперед заданной, степенью точности. Признаком завершения команды ( получения нулевого частичного остатка) является значение флага С2 ( C2 - Q - команда завершена, С2 1 - команда не завершена), который позволяет управлять переходом на повторение цикла или завершение операции. [43]
В случае, если в АЛУ используется сумматор комбинационного типа, то можно организовать выполнение деления следующим образом. Если знаковый разряд и цифра переноса показывают, что частичный остаток больше делителя, то в очередной разряд частного записывается единица, результат вычитания сдвигается и из нового частичного остатка вновь производится вычитание делителя. Если знаковый разряд и цифра переноса сигнализируют о том, что частичный остаток меньше делителя, то выполнение вычитания прекращается, в очередной разряд частного записывается нуль и производится сдвиг старого частичного остатка. [44]
Операция деления двоичных чисел с фиксированной запятой сводится в ЭВМ к последовательности действий вычитания делителя сначала из делимого, а затем из частичных остатков, образующихся в ходе вычислений, и последующего сдвига частичных остатков на один разряд влево. Деление в ЭВМ может выполняться двумя различными методами: с восстановлением и без восстановления остатка. В методе с восстановлением остатка при этом выполняется следующее: к отрицательному остатку прибавляется делитель, чтобы восстановить ( отсюда и название метода) предыдущий частичный остаток, и полученный результат сдвигается на 1 разряд влево. Однако в современных ЭВМ метод деления с восстановлением остатка встречается редко, поэтому более подробно рассмотрим алгоритм деления без восстановления остатка. Сущность метода состоит в следующем. На каждом шаге вычислений перед очередным нахождением разности частичный остаток сдвигается на 1 разряд влево и далее проводится анализ остатка. [45]