- •П.С. Довгий, в.И. Скорубский
- •Содержание
- •2.Высокоуровневая программная модель в с51.
- •2.1. Организация памяти и размещение информации в с51
- •4) Расширенная память данных
- •2.2.Типы и форматы данных в с51
- •2.3. Ввод-вывод в с51
- •2.5. Управление программой.
- •3.1. Структура Памяти, команды обмена данными.
- •Idata sfr Data Sfr
- •2.4.2. Ввод-вывод в а51
- •2.4.4 Арифметические и логические операции.
- •2) Беззнаковая арифметика
- •3) Десятичная арифметика
- •4) Логика поразрядная 8 битовая
- •5) Битовые операции
- •3.1.1. Беззнаковые целые численные данные.
- •3.1.2. Дробные численные данные.
- •5. В mcs51 доступна простая десятичная арифметика – предлагается составить программу преобразования двух разрядной десятичной дроби
- •3.2. Двоичная арифметика
- •3.2.2.Умножение знаковое в с51
- •3.2.3. Беззнаковое деление
- •3. Вычисления
- •3.1. Вычисление функции с плавающей точкой.
- •График функции в окне Анализатора.
- •3.2. Вычисление функции с фиксированной точкой в целых числах и выбор масштабов.
- •3.3. Макроассемблер
- •3.4. Вычисление функции с фиксированной точкой в дробных числах.
- •3.3. Иерархия памяти эвм.
- •1) Прямой доступ к данным
- •2) Косвенный доступ к данным по адресу через адрес-указатель
- •3.4. Битовые данные.
- •1) Доступ к битам в с51
- •2) Адресация к битам в Ассемблере
- •3.5. Система прерывания.
- •Void Ex00(void) interrupt 0 using 1
- •3.5.1. Подсчет внешних прерываний
- •1) Программа в с51
- •Внутренние прерывания при переполнении таймеров.
- •3.5.2. Часы реального времени..
- •Intt0() interrupt 0
- •2.5.4. Широтно-импульсная модуляция (шим).
- •Xrl a,{ri,@rj,#d,ad} xchd a,@rj a(3-0)@rj(3-0)
- •Xrl ad,{#d,a} swap a a(3-0)a(7-4)
- •Open -
- •Save - все остальные имеют стандартное назначение
- •Окно Загрузчика (Debug)
- •Вопросы по курсу лабораторных работ к зачету и экзамену.
- •Кафедра вычислительной техники
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
Рекуррентная формула вычисления целого произведения со стороны старших разрядов
Si+1=2Si+Abn-I , S0 =0. i=1,...n или
Рекурсивная функция
S(i+1)=2S(i) +Abn-I
с общим членом ряда со стороны младших разрядов
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
Рекуррентная формула вычисления дробного произведения со стороны младших разрядов
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-разрядных чисел без знака.
