|
Возможно,вамникогда
непридетсяпользоваться флагом
дополнительногопереноса (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.Вследующейглаве
рассматриваетсяиспользованиекоманддесятичнойисомвольной
коррекции.
|