Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Учебное пособие по курсу «Информатика». Ч.2. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
08.09.2026
Размер:
2 Мб
Скачать
☆
5.1. Арифметические операции над двоичными числами с фиксированной запятой
71
Если в результате вычитания делителя из делимого, а затем из ча-
стичных остатков выясняется, что делимое или очередной частичный оста­ток больше делителя (остаток положительный), то в очередной разряд част­ного записывается «1»; если делимое или очередной остаток меньше дели­теля (остаток отрицательный), то в очередной разряд частного заносится ноль. Другими словами, если полученный частичный остаток положителен, то Zi = 1, если отрицателен, то Zi = 0.
В процессорах деление дробных чисел c фиксированной запятой
возможно, если делимое по модулю меньше делителя. В обратном случае частное будет равно или больше «1» и выйдет за пределы разрядной сетки.
Условие возможности деления дробных чисел:
.0YX
(4)
Для процессоров, которые работают с целыми числами, возникает
необходимость представления делимого двойной разрядной сеткой, т.е. если разрядность делителя и частного со знаками соответствует n, то дели­мое должно быть представлено 2n разрядами:
Z = X : Y, X = Y * Z.
Частное должно удовлетворять условию
Z < 2
n-1
. (5)
Частное должно размещаться в (n – 1)-м значащих разрядах:
11
2;2
nn
YX
Y
X
Z
.
Условие возможности деления целых чисел:
02
1
nYX
или
.02
1
n
доп
YX
(6)
Перед началом деления оба операнда необходимо проверить на ра-
венство «0». Если один из операндов равен нулю, то деление не выполня­ется. В таком случае частное принимается равным нулю, если X = 0. В слу­чае, если Y = 0, то вырабатывается сигнал прерывания исполняемой про­граммы (остановка решения).
5. Выполнение арифметических операций в ЭВМ
72
Так как делимое X = Y * Z, то при делении целых чисел оно должно быть представлено двойной разрядной сеткой. Ранее при рассмотрении алго­ритма умножения в ЭВМ целых чисел (см. раздел 5.1.2) было отмечено, что особенностью выполнения операции умножения целых чисел, представлен­ных с фиксированной запятой, является необходимость представления про­изведения двойным словом, что позволяет получить результат операции с погрешностью, соответствующей точности представления сомножителей. Разрядность произведения двух n-разрядных чисел со знаком должна иметь (2n-2) значащих разрядов. Число же значащих разрядов двойного слова равно 2n-1, что на 1 больше числа значащих разрядов произведения двух n-разрядных чисел. Поэтому делитель Y сдвигается при вычитании из дели­мого не на n разрядов, а на (n-1) разрядов (умножается на 2
n-1
).
При выполнении операции деления в процессоре используются два подхода.
1) делитель остается неподвижен, при этом делимое и частное сдви-
гаются влево;
2) делимое остается неподвижным, при этом делитель сдвигается
вправо, а частное – влево.
На практике чаще используется первый подход.
Известны два метода деления в процессоре:
1) деление с восстановлением остатка;
2) деление без восстановления остатка.
Как и в случае умножения, знак частного определяется как сумма по модулю два знаков делимого и делителя.
Рассмотрим сущность каждого из методов при делении положитель­ных чисел со знаком.
5.1.4. Деление чисел в прямых кодах с восстановлением остатка
Получение одной цифры частного этим методом при делении поло­жительных чисел со знаком требует следующих действий:
а) вычитания делителя (прибавления делителя в дополнительном коде), сдвинутого влево на n-1 разряд, из делимого или очередного частич­ного остатка и занесения в младший разряд частного единицы, если остаток больше или равен нулю, или нуля, если меньше нуля;
5.1. Арифметические операции над двоичными числами с фиксированной запятой
73
б) восстановления остатка, если остаток отрицателен, путем прибав-
ления к нему делителя в прямом коде;
в) сдвига остатка влево на 1 разряд с одновременным присоедине-
нием к остатку следующей цифры делимого и сдвига частного влево на 1 разряд.
Опираясь на вышесказанное, можно сформулировать алгоритм де-
ления чисел в прямых кодах с восстановлением остатка [18]:
1. Берутся модули от делимого /X/ и делителя /Y/. Модуль делимого
заносится в сумматор Sm, а модуль делителя – в RG А. Знаковые разряды хранятся отдельно в триггерах.
2. Проверка на возможность выполнения операции деления. Из дели-
мого вычитается делитель; если результат Z0≥0, то частное переполняет разрядную сетку и деление в ЭВМ с фиксированной запятой в этом случае невозможно. Если Z<0, то переполнения нет. Деление также невозможно, если /Y/=0 (делитель равен нулю).
3. Исходное значение частичного остатка (О0) полагается равным де-
лимому.
4. Частичный остаток Оi удваивается сдвигом влево на один разряд.
5. Из сдвинутого частичного остатка Оi вычитается делитель и ана-
лизируется знак полученного результата.
6. Если полученный остаток Оi≥0, то очередной цифре частного при-
сваивается значение «1»; если полученный остаток меньше нуля (Оi<0), то очередной цифре частного присваивается значение «0». В последнем слу­чае значение остатка восстанавливается до того, каким оно было до послед­него вычитания. С этой целью к остатку прибавляется модуль делителя /Y/.
7. Пункты 4–6 последовательно выполняются до получения требуе-
мого количества цифр частного.
8. Частному Z присваивается знак как «сумма по модулю 2» знаков
операндов X и Y: Sign Z = Sign X Sign Y.
Рассмотрим на примере последовательность действий вычислитель-
ной машины при делении дробных чисел методом с восстановлением остатка.
Пример 7. Деление с восстановлением остатка Z
обр
= X
обр
: Y
обр
. За-
даны следующие дробные числа:
Xпр = 01101; Yпр = 10110.
5. Выполнение арифметических операций в ЭВМ
74
Возьмём модули заданных чисел:
│Xпр│ = 01101; │Yпр│ = 00110.
Теперь рассмотрим сам механизм деления чисел.
1. Перед началом деления делимое и делитель проверяем на равен-
ство нулю. Ни делитель, ни делимое нулю не равны, поэтому переходим к следующему этапу.
2. Проверка на корректность деления (на возможность деления).
Условие возможности деления:
.0
доп
YX
(– Y)
доп
=11010. Выполним проверку.
Зн
2-1
2-2
2-3
2
-4
+
0 1 1 0 1
X
1 1 0 1 0
(– Y)
доп
0 0 1 1 1 Z > 0.
Делить нельзя, так как остаток, полученный после вычитания, поло­жителен (Z > 0). То есть получается, что поскольку числа X и Y дробные, то и результат Z тоже должен быть дробным, а это возможно, если
|X|<|Y|.
Пример 8. Деление с восстановлением остатка Zпр = Xпр : Yпр. За- даны следующие числа: X = 0,1011 и Y = - 0,1101.
Xпр = 01011; Yпр = 11101.
Возьмём модули заданных чисел:
│Xпр│ = 01011; │Yпр│ = 01101.
[│– Y│]
доп
= 10011.
Для обнаружения переполнения вычитаем из делимого делитель:
+
0 1011 1 0011 1 1110.
Так как Z0 < 0, то переполнение отсутствует, следовательно можно
выполнять операцию деления. Реализацию операции деления можно уви­деть на рис. 32.
5.1. Арифметические операции над двоичными числами с фиксированной запятой
75
 
 
 

,

 
 
0 1 0 1 1
1 0 0 1 1 1 1 1 1 0
0 1 1 0 1 1

Z0 < 0 .

L1(S)
S
1 1 1 1 0 0 1 1 0 1
0 1 0 1 1 1 0 1 1 0 1 0 0 1 1
0 1 0 0 1
S
1 0 0 1 0
1 0 0 1 1
0 0 1 0 1
L1(S)
S
0 1 0 1 0
1 0 0 1 1
1 1 0 1
0 1 1 0 1
0 1 0 1 0 1 0 1 0 0 1 0 0 1 1
0 0 1 1 1 0 1 1 1 0
1 0 0 1 1
0 0 0 0 1
L1(S)
1
S
L1(S)
S
L1(S)
S
Рис. 32. Пример деления чисел в прямом коде с восстановлением остатка
    
Результат получен в прямом коде: Zпр = 1 11011.
5.1.5. Деление чисел в прямых кодах без восстановления остатка
Алгоритм деления целых положительных чисел Zпр = Xпр : Yпр со
знаком методом без восстановления остатка:
1. Выполняется проверка делимого X и делителя Y на ноль анало-
гично методу с восстановлением остатка;
2. Выполняется проверка на возможность выполнения операции де-
ления аналогично методу с восстановлением остатка;
5. Выполнение арифметических операций в ЭВМ
76
3. Получение одной значащей цифры частного Zi:
а) сдвигается делимое X или очередной частичный остаток ЧПi
(независимо от его знака) влево на 1 разряд (L11) с одновременным сдвигом
частного Z тоже влево на 1 разряд (L1);
б) из делимого X или очередного частичного остатка ЧПi вычитается
делитель Y, если делимое или остаток положительный; если остаток отрица­тельный, то к очередному частичному остатку ЧПi прибавляется делитель Y;
в) в младший разряд частного Zi заносится «1», если текущий оста-
ток больше или равен нулю, или «0», если текущий остаток меньше нуля.
Сформулируем алгоритм деления чисел в прямом коде без восста-
новления остатка [18]:
1. Берутся модули от делимого  и делителя .
2. Проверяем возможность деления. Из делимого вычитается дели-
тель, если остаток Z0 ≥ 0, то частное ≥1 и деление невозможно (возникает переполнение). Деление также невозможно, если

= 0 (делитель равен 0).
3. Остаток удваивается сдвигом влево на 1 разряд.
4. Если остаток положителен, то делитель вычитается из остатка;
если отрицателен, то делитель суммируется с остатком.
5. Если вновь полученный остаток положителен, то очередная цифра
частного равна «1»; если остаток отрицателен, цифра частного равна «0».
6. Пункты 3–5 повторяются до выработки требуемого числа цифр
частного.
7. Частному присваивается знак «плюс», если знаки операндов оди-
наковы, и знак «минус», если знаки операндов разные.
Пример 9. Выполнить деление без восстановления остатка
Zпр = Xпр : Yпр.
Заданы следующие числа: X = 0,1011 и Y = - 0,1101. Xпр = 01011; Y
пр
= 11101.
Возьмём модули заданных чисел: │Xпр│ = 01011; │Yпр│ = 01101. [– Y]
доп
= 10011.
1
L1 – означает сдвиг влево на 1 разряд
5.1. Арифметические операции над двоичными числами с фиксированной запятой
77
Для обнаружения переполнения вычитаем из делимого делитель: + 0 1011 1 0011 1 1110.
Так как Z0 < 0, то переполнение отсутствует, следовательно, можно
выполнять операцию деления. Реализацию операции деления можно уви­деть на рис. 33.
0 1 1 0 1 1
1 1 1 0 0 0 1 1 0 1
0 1 0 0 1
1 0 0 1 0
1 0 0 1 1 0 0 1 0 1
0 1 0 1 0 1 0 0 1 1
1 1 1 0 1
1 1 0 1 0 0 1 1 0 1
0 0 1 1 1
0 1 1 1 0 1 0 0 1 1
0 0 0 0 1
Z0 < 0 
L1(S)
L1(S)
L1(S)
L1(S)
L1(S)





S
0 1 0 1 1 1 0 0 1 1
1 1 1 1 0

Рис. 33. Пример деления чисел в прямом коде без восстановления остатка
    .
Результат получается в прямом коде: Zпр = 1 11011.
На практике метод деления без восстановления остатка использу­ется чаще, т.к. вместо трех тактов для получения очередной цифры част­ного при использовании метода с восстановлением остатка метод без вос­становления остатка позволяет получить очередную цифру частного только за два такта.
5. Выполнение арифметических операций в ЭВМ
78
5.1.6. Деление чисел в дополнительных кодах без восстановления остатка
Как отмечалось выше, различают алгоритмы деления с восстановле-
нием и без восстановления остатка отдельно для дробных и целых чисел. Связано это с тем, что процессор с фиксированной запятой работает только с данными, представленными либо только дробными, либо только целыми числами.
Алгоритм деления целых чисел в дополнительных кодах со знаком
методом без восстановления остатка (Z
доп
= X
доп
: Y
доп
):
1. Делимое и делитель представляется в дополнительном коде:
Sм:= X
доп
, RG:= Y
доп
.
2. Проверяем возможность деления: если Sign Х = Sign Y, то из дели-
мого вычитается делитель, иначе – к делимому прибавляется делитель.
При этом определяется знак частного следующим образом:
 
     
Условие корректного деления:
      
Если        то деление некорректно из-за
переполнения разрядной сетки.
3. Остаток Oi удваивается сдвигом влево на 1 разряд.
4. Если знак остатка Oi не совпадает со знаком делителя, то к нему
прибавляется делитель, если знаки совпадают, то из остатка вычитается де­литель.

 
 

  
 󰇟 󰇠

  
5. Очередная цифра частного Zi = 1, если знак остатка Оi совпадает со
знаком делителя или Zi = 0, если знак остатка Оi не совпадает со знаком делителя

 
 

 
 

 
6. Пункты 3–5 повторяются до получения требуемого числа цифр
частного.
5.1. Арифметические операции над двоичными числами с фиксированной запятой
79
7. Знак частного получается по алгоритму Zi = Sign Z.
8. При делении в дополнительном коде возникает методическая по-
грешность, для компенсации которой необходимо вводить коррекцию, ко­торая равна: sign Z·2-n, где n – число разрядов частного.
При выполнении операции деления чисел, представленных допол-
нительными кодами возможны четыре ситуации:
1) X>0, У>0;
2) X<0, У>0;
3) X>0, У<0;
4) X<0, У<0.
Первый из них не представляет интереса, так как будет аналогия с
делением в прямых кодах, а для остальных случаев рассмотрим при­меры 10-12.
Пример 10. Выполнение операции деления чисел, представленных
дополнительными кодами с фиксированной запятой, для X<0, У>0.
Заданы числа: Xпр = 1 1011 Yпр = 0 1101. Поэтапная реализация операции деления представлена на Рис. 34.
Х = - 0 1011 Х
доп
= 1 0101
sign Oi ≠ sign У
[-y]
доп
1
0 0 1 0 0
переполнения нет
1 0101 0 1101
0 0010Sм
[-y]
доп
L1(Sм)
L1(Sм)
L1(Sм)
11 0010 00 1101
11 1111
L1(Sм)
00 0110 11 0011
11 1001
L1(Sм)
Sм
11 0110
00 1101
00 0011
Sм
y
доп
10 1110 00 1101
11 1011
y
доп
Sм
00 0100 11 0011
11 0111
Sм
т.к. sign O
i
= sign У
т.к. sign O
i
≠ sign У
У = 0 1101 y
доп
= 1101
[-y]
доп
= 1 0011
0
Рис. 34. Пример выполнения операции деления чисел
в дополнительных кодах для X<0, У>0
5. Выполнение арифметических операций в ЭВМ
80
Затем выполняется коррекция полученного промежуточного резуль-
тата.
Коррекция: sign Z · 2-5. Выполнив коррекцию, получим результат:
+
1 00100 0 00001 Z
доп
= 1 00101
Пример 11. Выполнение операции деления чисел, представленных
дополнительными кодами с фиксированной запятой, для X>0, У<0.
Заданы числа: Xпр = 0 1011 Yпр = 1 1101. Поэтапная реализация операции деления представлена на рис. 35.
переполнения нет
L1(Sм)
Sм
11 1 1 0 0 00 1 1 0 1
00 1 0 0 1
L1(Sм)
L1(Sм)
L1(Sм)
01 0 0 1 0 11 0 0 1 1
00 0 1 0 1
Sм
00 1 0 1 0
Sм
[-y]
доп
y
доп
[-y]
доп
sign Oi ≠ sign У
L1(Sм)
11 0 0 1 1 11 1 1 0 1
11 1 0 1 0 00 1 1 0 1
00 0 1 1 1
00 1 1 1 0 11 0 0 1 1
00 0 0 0 1
Sм
Sм
y
доп
y
доп
Х = 0 1011 Х
доп
= 0 1011
0 1 0 1 1 1 0 0 1 1
1 1 1 1 0
1 0 0 1 0 0
т.к. sign O
i
≠ sign У
т.к. sign O
i
= Sign У
1
У = - 0 1101 y
доп
= 0011
[-y]
доп
= 0 1101
Рис. 35. Пример выполнения операции деления чисел
в дополнительных кодах для X>0, У<0
Коррекция: sign Z · 2-5. Выполнив коррекцию, получим результат:
+
1 00100 0 00001 Z
доп
= 1 00101
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]