Хартов В.Я. Микроконтроллеры AVR. Практикум для начинающих (2007) (1264222), страница 14
Текст из файла (страница 14)
При равенстве порядков, когда их разность Лр = О, выполняется переход к сложению мантисс. В противном случае предварительно разность Лр сравнивается с длиной мантиссы. Если разность превысит 24, то при выравнивании порядков со сдвигом вправо мантиссы меньшего числа она покинет разрядную сетку, происходит потеря значимости. В качестве результата принимается операнд, который в этот момент находится в регистрах первого операнда (рА, шА).
Если разность меньше 24, переходим к сдвигу мантиссы меньшего числа„поместив ее в регистры (1пАН, шАМ, шАЕ), разность порядков — в регистре рВ, меньший порядок — в регистре рА. Сдвиг мантиссы вправо сопровождается увеличением порядка в регистре рА, уменьшением в регистре рВ и продолжается до тех пор, пока в регистре рВ не получим О. Сложив побайтно мантиссы, проверяем признак переноса, который свидетельствует о нарушении нормализации. При отсутствии его (С = О) выполняется переход к преобразованию числа в базовый формат. При С = 1 мантиссу суммы сдвигаем вправо и порядок увеличиваем на 1, Выполняем проверку переполнения.
Если образовался порядок, равный О, это означает превышение максимального порядка 255. Программа завершается с установленным флагом переполнения С. Полученный в регистрах рА, шА результат считается неопределенным и не форматируется. При от- 87 86 ;расположены в файлах Г1я ;5111Ь.аящ (библиотечные ** * * .хпс1цбе 8515бег.хпс ;.Ьпс1цбе "щ8515бет.1пс .бег Сещр = г16 .бег асс = г17 .бег сор = г18 рА = г20 щАН = г21 пАМ = г22 щА(. = г23 рВ = г24 п1ВН = г25 п|ВМ = г2б щВЬ = т27 . бег .бех .бех .бет .бес .бег .беХ .бег .огЧ $000 инициализация указателя стека 1с)1 Сещр, 1он (НАМЕНП) оцт яр1, Секр 1бт Секр, ЬТОЬ(НАМЕНП) оцт ярЬ, Сещр срт сор,Ох01 Ьгеп Аббг гзщр БцЬГ проверка кода операции плавающей точкой ;модуль сложения чисел с с одинаковым знаком Аббг: щоч асс,рА еот асс,рв Ьгрт Аббрт 1с)1 Сещр,Ох80 абб рВ, сещр гзщр БцЬГ ;изменение знака сравнение В с 0 ;сравнение А с 0 ;обмен А и В АббГ1: сса11 ср В 0 Ьгеп оцйт гса11 ср А 0 Ьгпе Аббг2 гса11 янарАВ г31пР фц1С Программа З.З ,сохранение знака Т рВ 7 ;восстановление чисел через регистры А АббГ2: Ьят рВ,7 гса11 тес сса11 янарАВ гса11 тес ,вычитание порядков щоч асс,рА 3.
Арис/ьнетическая обработка данных сутствии переполнения флаг С сбрасывается и выполняется преобразование в базовый формат. Алгоритм сложения чисел с одинаковым знаком представлен листингом программы 3.3. Программа позволяет выполнить алгебраическое сложение чисел с учетом знаков слагаемых. В том случае, когда слагаемые имеют разные знаки, происходит обращение к модулю вычитания. С помощью директивы йпс!Вбе "ВзцЪ.аящ" подключают программный модуль вычитания чисел с плавающей точкой одинаковых знаков. Это позволяет в дальнейшем выполнить посредством одной и той же программы не только сложение, но и вычитание чисел. В начале общей программы сложения/вычитания выполняют проверку кода выполняемой операции: 1 — для сложения (ь), 2— для вычитания ( — ).
В зависимости от заданной операции и знаков операндов запускают процедуру сложения или вычитания беззнаковых чисел (табл. 3.4). При необходимости производится перемена мест операндов. В итоге можно применить одну из двух процедур: сложение или вычитание модулей чисел. Таблица 3.4. Выполняемые операции ;Программа 3.3 сложения/вычитания чисел с плавающей точ- ;кой. ;Первый операнд находится в регистрах рА, п1АН, щАМ, щАЬ, ;второй — в регистрах рВ,щВН, щВМ, щВЬ. Результат ;возвращается в регистры первого операнда. При переполне- ;нии флаг С устанавливается в 1.
Вызываемые процедуры 3.7. Операции над числами с нлапаюи(ей тачкой цЬ аящ (модуль вычитания) и модули) ** * ** * ** * * ******** ;файл определений для АТ9088515 ;файл определений для Атщеча8515 ;временный регистр ;регистр аккумулятор ;код операции: 1 — сложение, 2 — вычитание ;операнд А (рА — байт порядка), с(п1АН, щАМ, и АЬ вЂ” байты мантиссы) ;операнд В (р — байт порядка), с(щвн, щВМ, щВЬ вЂ” байты мантиссы) 88 3.
Арифметическая обработка данных зчЬ асс,рВ Ьгр1 Аббгз гса11 знарАВ воч асс,рА зцЬ асс,рВ Абдхз: Ьгеп Аабгб ср1 асс,24 Ьхш1 Аабг4 г)вр Аббг7 О4 ;переход, если больше О, иначе обмен и снова вычитание ;переход, если порядки равны ;сравниваем Адбг4: воч рА,асс гса11 зиарАВ ;разность порядков з рА ;разность теперь з рВ Аддг5: гса11 зпгхе хпс рА бзс рВ Ьхпе АббГ5 ;сложение мантисс ;подключение модуля вычитания и библиотечных процедур Типовые процедуры, используемые алгоритмами сложения!вычитания, помещены в библиотеку, подключаемук> директивой Зпс1щ1е "й11Ь.азш".
Библиотека 7)Ио содержит процедуры восстановления операнда из базового формата гес, упаковки в базовый формат расК, обмен операндов зкуарАВ, сдвига мантиссы вправо иа один разряд з)7ф, логического сложения 24-разрялиой мантиссы для сравнения с нулем. В осстаиовлеиие числа из базового формата производится с помощью четырех операций, как показано иа рис. 3.10, а. Вначале при помощи логического сдвига влево ® младший бит порядка из регистра старшего байта мантиссы шАН выталкивается иа флаг переноса С. Затем выполняется циклический сдвиг влево содержимого регистра порядка рА О2.
Благодаря этому 8-разрядный порядок полностью оказывается в регистре рА. Далее мантисса шАН сдвигается вправо Оз и в разряд 7 регистра гпАН восстанавливается скрытая 1 О4. Программа 3.4 Асах б: асс вАЬ,ввь або вАМ,вВМ аде влп,ввп Ьхсс Адбк7 1пс рв Ьхеп Оц1Х хса11 зп1хх Аббг7: гса11 расв Яотх: х)вр Оотг .1пс1цае 5В1зцЬ.азв" .хпс1цбе "ГЩ1Ь.азв" ;переход при потере значимости ;сдвиг з регистрах вА ;увеличиваем порядок меньшего числа ;уменьшаем разность порядков ;проверка нарушения нормализации ;корректируем порядок ;выход с Флагом переполнения ;сдвиг мантиссы вправо ;форматирование результата 3. 7.
Операции пад числами с агаеающей точкой 7 О а б Рис. 3.10. Схема восстановления числа нз базового формата (а) н преоб- разования в базовый формат (б) Преобразование результата операции, помещаемого после обработки в регистры А, в базовый формат выполняется по схеме иа рис. 3.10, б.
Вначале сохраняем порядок рА в одном из регистров, например рВ О1, Затем знак результата, сохраняемый иа флаге Т, переносим иа флаг С О2. Выполняя сдвиг вправо регистра порядка рА, вводим знак числа в разряд 7 регистра рА Оз. Передачу младшего бита порядка в старший разряд мантиссы шАН выполняем за два шага: сначала из разряда 0 регистра рВ в Т О4, затем из Т в разряд 7 регистра шАН О5 иа место старшего разряда мантиссы.
Обмен 32-разрядных операндов в регистрах А и В осуществляется с использованием логической функции Исключающее ИЛИ. Действительно, получив сначала А +- А хп В, выполняем далее В 4 — В хп А и А +- А Ю В. Эти операции повторяют отдельно для каждого байта порядка и мантиссы (всего 12 операций). Используемые библиотечные процедуры с комментариями представлены в листинге программы 3.4. ************я *****************я****************я********* ;модуль 3. 4 библиотечных процедур 118Ь.аяп 7Восстанозлзние операнда из базового формата гас: 1з1 кьдп ;младший разряд порядка в С го1 рА ;восстановление порядка 1зг вАН ;сдвиг вправо мантиссы огг вАИ, Охво ;восстановление скрытой 1 90 вводим знак в рА.7 младвий разряд порядка переносим в АН.7 3. Арифметическая обработка данных хек ;Упаковка в базовый Формат раса: воя рЬ,ра ;сохраняем рА с1с Ьхпс в2 ;проверяем знак зес в2: хох рА Ьзе рЬ,О Ь1с) пАН,7 хек ;Обмен операндов знарАВ: еох рА,рВ ;обмен регистров еох рВ,рА ; рА и рВ еох рА,рВ за три операции еох пАЬ,вВЬ еох вВ1.,вА1.
еох пА1,,вВЬ еох вАМ,вВМ еох вВМ,пАМ еох пАМ,вВМ еох вАН,вВН еох вВН,вАН еох вАН,вВН хес ;Сложение для сравнения А(В) с О ср А О: воя асс,рА ох асс,вАН ох асс,пАИ ох асс,пАЬ ;при А=О возвращает флаг хех спрн АХΠ— В=О ср В О: воя асс,рВ ох асс,вВН ох асс,вВМ ох асс,вВЬ )при В=О возвращает флаг хеХ )при ВНΠ— В=О ;Сдвиг вправо 24-разрядной мантиссы вА зпьйп: 1зх вАН хох пАИ хох вА1. с1с хек Вычитание Операция начинается с проверки знаков слагаемых (рис. 3.11). Если знаки операндов ие совпадают, знак вычитаемого изменяется иа противоположный и выполняется переход к процедуре сложения чисел АсЫг'.
Если исходные операнды с одним знаком, ка)КЛый 3. 1. Операции над числами с плаеаюи)ей точкой Рис. 3.11. Схема алгоритма вычитания с плавающей точкой **********ь************* БцЬЕ: поч асс,рА еог асс,рВ Ьгрт яцЬЕ1 1бг Гепр,Ох80 абб ря,гепр гзпр Аббг яцЬЕ1: гса11 ср В 0 Ьгес( Оцгс гса11 ср А 0 Ьгпе БцЬЕ2 гса11 энарАВ тбв Сепр,Ох80 абб рА,Гешр Оцгпя: гзпр Оц1Г сравнение знаков чисел при неравных знаках смена знака 2-го числа проверка в на 0 проверка А на 0 обмен операндов со сменой знака результата БцЬЕ2: Ьаг. рА,7 гса11 тес гса11 энарАВ гса11 тес ;из порядка 1-го вычитаем порядок 2-го поч асс, рв вцЬ асс,рА Ьгпе БцЬЕЗ ср пВН,пАН Ьгпе ЯцЬЕЗ ср пВМ,пАМ Ьгпе ЯцЬЕЗ ср пВ).,пА1, Ьгпе ЯцЬЕЗ с1г рп с1г пАН с1г пам с1г пА1, г'Зщр оц .г ;при равенстве порядков ! сравниваем мантиссы ;если числа равны, результат равен 0 ;переход, если 1-е число (оно в рВ,пВ) больше, иначе обмен числами и изменение знака в Т ЯцЬЕЗ: Ьгсс ЯцьЕ4 Программа З.э гса11 энарАВ ЬгЬс б,а2 3, Арифметическая обработка данных проходит проверку на равенство О.