Assembler для начинающих


Дополнительный флаг переноса - часть 2


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



- Начало -  - Назад -  - Вперед -