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






    Флаг переполнения  OF - единственный флаг  в старшем байте регистра
    флагов,    который    устанавливается    обычными арифметическими
    операциями.  Остальные флаги  старшего байта  находятся под  прямым
    управлением   программиста.   Флаг      переполнения    -   еще   один
    арифметический флаг,  как флаг нуля  и переноса. Флаг  переполнения
    необходим для арифметики в дополнительном  коде в такой же степени,
    как флаг переноса для арифметики повышенной точности.
      В  арифметике  чисел,  представленных  в  дополнительном  коде,
    старший  бит  используется      для   хранения    знака  числа.  Сумматор
    микропроцессора  работает как  со знакопеременными      числами, так  и
    беззнаковыми.   Обычно  сложение   чисел  со   знаком  дает  верный
    результат.    Однако накоторые  из чисел,  представленных в  дополни-
    тельном коде, при сложении дают  неверный результат. Пример на Фиг.
    3.14  -  сложение  двух  8-битовых    чисел,      представленных    в  коде
    двоичного дополнения, - иллюстрирует этот  случай. Если 72H и 53H -
 
      Шестнадцатеричное Десятичный эквивалент
     ------------------------------------------------
           72H                 114
         + 53H               +      83
         ------              ------
          0C5H                 197
     ------------------------------------------------
 
                              Фиг. 3.14 8-битовое сложение
                                    с переполнением
 
    числа без знака, то результат их сложения верен. Если же это числа,
    представленные  в  дополнительном  коде  со  знаком,  то  результат
    сложения 0C5H  неверен, в коде  двоичного дополнения он  равен -59.
    сложение  положительных чисел  никогда не  дает в  результате отри-
    цательное. Результат сложения  оказался непредставиммым в диапазоне
    значений  8-битовых чисел  в двоичном  коде (от  127 до -128). Этот
    эффект  принято  называть  переполнением,  так  как  сумма вышла за
    пределы диапазона чисел, представимых в дополнительном коде.
      Важно  заметить, что  переполнение  и  перенос -  два различных
    флага и имеют  разное значение. На Фиг. 3.14  нет переноса, так как
    сложение без знака дает  правильный результат, а есть переполнение:
    что сложение  со знаком дает неверный  результат. Возможен и случай
    одновременно переноса  и переполнения, как  показано на Фиг.  3.15.
 
       Шестнадцатеричное   Двоичное дополнение     Беззнаковое
     ------------------------------------------------------------
            8EH           -114                  142
             0ADH         - 83                  173
            -----       -----                 ----
            1 3BH         -197                  315
     ------------------------------------------------------------
            Фиг. 3.15 8-битовое сложение с переносом и перепонением
 
    Здесь показан  пример сложения двух  отрицательных чисел. Результат
    -197 выходит  за пределы диапазона    представимости в дополнительном
    коде. Это показано тем, что 8-битовый результат 3BH - положительное
    число.  Кроме того  в этом      примере устанавливается  флаг переноса,
    означающий,   что   сложение   без    знака      дало число,      большее
    максимального представимого. В  случае 8-битовых чисел максимальное
    число равно 255.
      Вообще говоря, операция сложения  в процессоре
    выполняется одинаково над числами и со знаком, и без знака, а также
    с десятичными  числами.  Флаги переноса, дополнительного переноса и
    переполнения содержат  информацию о выполненной  операции, позволяя
    программе  определить  верный   результат  в  используемой    системе
    счисления.      Флаг      переполнения     показывает,   что    результат
    арифметической  операции   выходит    за  пределы   диапазона  чисел,
    представленных  в дополнительном  виде. Переполнение  отличается от
    переноса,  который показывает,  что произошел  перенос из  старшего
    бита результата.