Организация ЭВМ. Довгий П.С - 20 стр.

UptoLike

20
Здесь выровнены форматы для согласования форматов операндов при
сложении.
При вычислении в Си признак переноса при суммировании не контроли-
руется, поэтому либо диапазон чисел при выполнении операций на один разряд
меньше, либо используются расширенные форматы.
В Ассемблере эти ограничения отсутствуют и можно получить правиль-
ный результат во всем диапазоне 8-разрядных
чисел.
б) Беззнаковое деление 16-разрядного числа на 8-разрядное.
Алгоритм деления дробных чисел с фиксированной точкой перед стар-
шим разрядом реализовать по рекуррентной формулеобратной по отноше-
нию к формуле умножения : если S=A*B, то B=S/A.
Если S
n
=2
-1
(S
n-1
+Ab
1
), то b
1
=1, если S
n-1
= 2Sn-A >=0, иначе b
1
=0.
И так далее на каждом шаге b
i
=1, если S
n-i
= 2S
n-i-1
-A >=0, иначе b
i
=0.
Изменяя нумерацию остатков, приходим к следующей рекуррентной
формуле деления без восстановления остаткасначала определяется знак раз-
ности, остаток сохраняется, если знак положительный.
(*) S
i+1
= 2S
i
-A и b
i
=1 , если 2S
i
-A >=0, где S
0
=S-делимое
S
i+1
= 2S
i
и b
i
=0 , если 2S
i
-A <0
В схеме вычислений на Си форматы операндов выровнены для выполне-
ния вычитания.
Рис.2.4. Схема деления в Си без восстановления остатка.
Регистр S/B совмещает младшие разряды делимого при сдвиге и разряды
частного.
В программе на языке С необходимо контролировать знак остатка в явном
виде, при этом сужается
диапазон значений делимого и делителя или необхо-
димо использовать расширенные форматы.
Main()
{ Int S=P1<<8 ;
Int A=P2<<8 ;
For (char i=0 ; i<8; i++ ;)
S S/B
2S (сдвиг влево)
A
b
i
1 2n
+
/
- A
,
,