Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
mcs51_1 / Пособие ч1.doc
Скачиваний:
52
Добавлен:
21.03.2016
Размер:
957.44 Кб
Скачать

3.2. Двоичная арифметика

Основные машинные двоичные арифметические операции: сложение, вычитание, умножение и деление (в некоторых ЭВМ, например, ЛИТМО1 использовалась операция извлечения квадратного корня).

Операция двоичного сложения –базовая арифметическая операция, выполняется аппаратно схемой арифметико-логического устройства (ALU) ЭВМ.

ALU выполняет сложение, вычитание и поразрядные логические операции И, ИЛИ, НЕ, ИСКЛ_ИЛИ.

Операции умножения и деления двоичных чисел в MCU могут выполняться программно в соответствии с известными алгоритмами, в которых применяются операции ALU.

Предлагается познакомиться с практическим использованием некоторых алгоритмов для чисел без знака в программах умножения, деления и квадратного корня.

Реализация в Си имеет смысл для демонстрации и отладки алгоритма, однако может иметь некоторые ограничения с использованием стандартных форматов. Программа в Ассемблере, по существу, имеет отношение к аппаратной реализации и позволяет реализовать алгоритм без этих ограничений.

3.2.1. Умножение беззнаковое

Как следует из раздела 2.1, двоичные коды (n)-разрядных дробных чисел и соответствующих целых в масштабе 2n совпадают. Следовательно, двоичные коды дробных произведений в масштабе 22n также совпадают с соответствующими целыми произведениями и алгоритмы дробных произведений применимы к целым.

Метод умножения двоичных целых без знаков

S=A*B=A(B=bn-1..b0 ) = A(bn-12n-1 + … +b121+b020)=

=(0+Abn-1 )*2+ Abn-2 )*2+… +_Ab0 =>

S0=0 => S1=2S0+Abn-1 S2= 2S1+Abn-2… 2Sn-1 +Ab0

Рекуррентная формула вычисления целого произведения со стороны старших разрядов

    1. Si+1=2Si+Abn-I , S0 =0. i=1,...n или

Рекурсивная функция

S(i+1)=2S(i) +Abn-I

    1. с общим членом ряда со стороны младших разрядов

Si+1=Si+Bibn-i , Bi+1=2Bi S1 =0, B1=1; i=n…1

Схема умножения по формуле (2.4) приведена на рис. 2.2. и применима как к целым, так и к дробным в масштабах 2n в Ассемблере и в Си.

(bn-i) 2n-1 n 0 shl

B/S S

+ A

n-1 0

Рис.2.2. Схема умножения целых чисел.

В схеме используются (2n+1)-разрядный регистр хранения произведения, в старших n разрядах размещается множитель B. Промежуточный разряд (n) добавляется, чтобы сохранить возможный при суммировании перенос в старшем разряде промежуточного произведения.

(n)- разрядный регистр множимого A.

Цикл умножения в С.

For(char i=0; i<8; i++)

S= (S&0x8000) ? (S<<1) +A : S<<1;

Метод умножения двоичных дробных без знаков

S=A*B=A(B=0.b1b2..bn ) = A(b12-1 + b22-2 .. +bn-12-n+1+bn2-n)=

= Ab12-1 + Ab22-2.. +Abn-12-n+1+Abn2-n =

=2-1 (Ab1 + 2-1(Ab2 +… +_2-1(Abn-1 + 2-1(Abn +0))..)=>

S0=0 => S1=2-1(S0+Abn) S2= (S1+Abn-1)2-1

Рекуррентная формула вычисления дробного произведения со стороны младших разрядов

    1. Si+1=2-1(Si+Abn-i) , S0 =0, i=0,..n-1

Рекурсивная функция S(i+1)-(S(i) + Abn-i)/2

На рис 2.3 приведена схема размещения операндов на регистрах ЭВМ, которая может быть использована для программирования в Ассемблере и в аппаратной реализации умножения по формуле 2.6 .

(bn-i)

С

Рис. 2.3. Схема умножения дробных.

Множитель B размещается в младших разрядах регистра-произведения B/S, младший разряд этого регистра S[0] при сдвиге вправо сохраняет текущее значение bn-i

Суммирование выполняется в старших (n)-разрядах формата частичных произведений (Очевидно, Abn-i =A или 0 для двоичной цифры bn-i={0,1}.

Схема может быть использована при вычислении 2n-разрядного целого произведения S в масштабах 2(-n).

При умножении дробных (n)-разрядных чисел с фиксированной запятой 2n-разрядное произведение имеет абсолютную погрешность усечения

2(-2n) <= < 2((-n)-1)

При этом можно ограничиться вычислением и сохранением только старших (n) разрядов произведения.( = 2(-n)), если в дальнейшем не используется деление дроьных.

Схема умножения дробных чисел считается более простой и применима к целым с учетом масштабов.

Схема размещения операндов для реализации в Си приведена на рис 2.4.

,

*

Рис. 2.4. Схема умножения в Си.

Здесь выровнены форматы для согласования при сложении в Си.

Признак переноса при суммировании явно не контролируется, поэтому диапазон чисел при выполнении операций на один разряд меньше или форматы операндов приходится удваивать.

В Ассемблере эти ограничения отсутствуют и можно получить правильный результат во всем диапазоне 8-разрядных чисел без знака.

Соседние файлы в папке mcs51_1