На главную Назад
Добро пожаловать, уважаемый посетитель!

Возможно,вамникогда непридетсяпользоваться флагом

дополнительногопереноса (AUX),по крайнеймере непосредственно.

Изучив команды условных переходов микропроцессора 8088, вы увидите,

чтопрямоетестированиеэтогофлаганевозможно. Микропроцессор

имеет флаг дополнительного переносаAUX для очень конкретной цели:

онпозволяетмикропроцессорувыполнятьдесятичныевычисления в

двоичной кодировке (Binary-coded-decimal arithmetic - BCD - арифметика).

BCD - арифметика отличается оттой, которую мы обсудили в гл.2.

Онаоснована надесятичной системесчисления. Приосуществлении

десятичной арифметикив двоичной кодировкелюбая дасятичная цифра

представляется четырьмя битами(полубайтом). Каждый полубайт может

представлятьзначенияот0до9;значенияот0AHдо 0FH не

используются.Этоозначает,чтоодинбайтможетпредставлять

десятичные числа от 0 до 99.

Напервыйвзглядтакойспособхранения числовой информации

кажетсярасточительным,двоичнаякодировкадесятичныччисел не

использует 6 из 16 возможных состояний каждого полубайта. Однако во

многихслучаяхприменениямикропроцессораэтотспособдает

непосредственноепредставлениевводимыхоператором чисел.

Большинство людей более подготовлено к работе с десятичными, а не с

двоичнымиили шестнадцатеричнымичислами. Кактолько потребности

ввода-выводамогутперевеситьаспектыхраненияивычислений в

приложениях, так удобнее становитсявыстраивать информацию в виде,

легкопреобразуемомкформатуввода-вывода.Двоичная кодировка

десятичныхчисел даеттакую возможность.BCD -арифметика также

решаетвозникающуювнекоторыхдвоичныхсистемахпроблему

представлениячисел. Прииспользовании чиселс плавающейточкой

иногда возникаетпроблема округления, потомучто двоичная система

счислениянеполностьюсоответствуетдесятичнойсистеме.В

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

можетоказаться неверной.Иногда этоназывают проблемой"потери

пенни",таккакэтислучаинаиболеезаметнывфинансовых

приложениях. BCD - представлениечисел дает альтернативу для таких

вычислений.

Набор командмикропроцессора 8088 неимеет специальных команд

сложения и вычитания для BCD-арифметики. Здесь используется обычное

сложениеивычитание,применяемыекакиприобычном двоичном

представлении.РезультатсложениядвухBCD-чиселнаобычном

математическом процессоре можетоказаться неправельным BCD-числом;

Дляустранения этогомикропроцессор 8088имеет несколько команд,

которыепреобразуютрезультаткправильнойдвоичнойкодировке

десятичного числа. Длякорректного проведения этого преобразования

процессордолжен знать,был липеренос измладшего полубайтав

старший вовремя сложения. Пример наФиг. 3.13 показывает, почему

 

38

+29

----

61Фиг. 3.13 Десятичное сложение

 

этонеобходимо. Десятичнаясумма 38+ 29равна 67.Но двоичная

сумма38H+29Hравна61H.Есличисла38и 29 представляют

BCD-значения, то после операции сложения программа должна выполнить

коррекцию. Командадесятичнойкоррекциидлясложения(DAA)

преобразует число в форму BCD.В нашем случае число представлено в

десятичной форме, т.е. оба полубайтанаходятся в диапазоне от 0 до

9, однако результат неверен. В данном случае сложение устанавливает

флаг дополнительногопереноса, который показаывает,что произошел

перенос из младшейцифры (8 + 9). Этотфлаг сообщает команде DAA,

чтобы она прибавила к результату 6, давая правильный результат 67.

Микропроцессортакже используетфлаг дополнительного переноса

при коррекциидесятичной арифметики вслед завычитанием с помощью

командыдесятичной коррекциидля вычитанияDAS. Существуют также

дведругие команды,которые используютфлаг AUXдля определения

правильностидействий.Этикоманды,символьнаякоррекциядля

вычитания AAS и символьная коррекция для сложения AAA, выполняют ту

жеBCD-коррекцию, чтои командыDAAиDAS. КомандыAAA иAAS

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

прикоторомкаждаядесятичнаяцифразанимаетодинбайт.Это

представление,еще болеерасточающее память,чем BCD,допускает

очень удобну юперекодировку изкода ASCII в числовое представление

и обратно. Числа от0 до 9 представляются вкоде ASCII значениями

от30Hдо39H,ипреобразованиевэтоткод и обратно просто

означаетсложениеиливычитание30H.Вследующейглаве

рассматриваетсяиспользованиекоманддесятичнойисомвольной

коррекции.


 

Mail.ru