@b
          Есть три команды, которые непосредственно управляют
    состоянием флага переноса :

      STC    -  устанавливает,
      CLC    -  сбрасывает,
      CMC    -  дополняет   флаг переноса.

          Этот флаг - единственный,  которому  уделено  такое
    внимание,  и  в первую очередь,  благодаря важности флага
    переноса при операциях с повышенной точностью. Флаг пере-
    носа  критичен  на промежуточных шагах любых многословных
    операций.  Возможность сбрасывать или устанавливать  флаг
    переноса  может  помочь при циклической обработке с повы-
    шенной точностью.  Флаг переноса также важен в  операциях
    сдвига,  где  он становится девятым или семнадцатым битом
    регистра во время выполнения операции.
          Два флага  состояния  микропроцессора меняют специ-
    альные работающие с ними программы. Программа может уста-
    новить  или  сбросить маску прерываний соответственно ко-
    мандами  STI  и  CLI.  Команда   STI   включает   систему
    прерываний микропроцессора 8088, позволяя ему реагировать
    на внешние  прерывания.  Команда  CLI  блокирует  систему
    внешних прерываний.
          Программа может установить или сбросить  флаг  нап-
    равления с помощью команд STD и CLD.  Команда CLD сбрасы-
    вает флаг направления,  приводя к тому, что строковые ко-
    манды  ведут  обработку  при возрастающих адресах памяти.
    Команда STD устанавливает флаг, в результате чего строко-
    вые  команды  уменьшают  адресный указатель после каждого
    выполнения.
    
          Разница между макрокомандой и подпрограммой связана
    с моментом их выполнения. Макрокоманда является текстооб-
    рабатываюшей операцией.  Макрокоманда определяется и "вы-
    полняется" в момент транслирования.  Выполнение  макроко-
    манды   состоит  в  замене  имени  макрокоманды  текстом,
    составляющим тело макрокоманды.  Подпрограмма же,  хотя и
    определяется  во время транслирования,  но выполняется не
    раньше,  чем выполняется сама программа.  Считается,  что
    макрокоманда выполняется во время транслирования, в подп-
    рограмма - во время выполнения программы.
          Во многих  случаях  последовательность команд может
    быть определена и как макрокоманда,  и как  подпрограмма.
    Когда  вам нужна будет эта последовательность команд,  вы
    можете вызвать соответственно макрокоманду  или  подпрог-
    рамму.  Какую именно - зависит от того, как вы определили
    последовательность команд.  Выбор определяется компромис-
    сом между временем выполнения программы и объемом занима-
    емой ею памяти.  В большинстве случаев использование мак-
    рокоманд  приводит к более длинным программам,  т.е.  для
    реализации той же самой функции требуется  больше  байтов
    объектного кода.  Однако программа, использующая макроко-
    манды, выполняется быстрее. Отсутствуют временные издерж-
    ки,  связанные с вызовом подпрограммы и возвратом в прог-
    рамму  каждый   раз,   когда   повторяется   определенная
    последовательность  команд.  Для получения минимальной по
    объему программы следует использовать подпрограммы. Чтобы
    иметь  программу с максимальным быстродействием,  исполь-
    зуйте макрокоманды.
          В случае  программы приведенной выше,  использующей
    макрокоманду FENI,  выбор в пользу макрокоманды очевиден.
    Соответствующий  участок  программы не только выполняется
    быстрее в качестве макрокоманды,  нежели в качестве подп-
    рограммы,  но  и  занимает в первом случае меньше памяти.
    Для команды CALL в подпрограмме типа NEAR  требуется  три
    байта. Для макрокоманды FENI - только два байта. Для мак-
    рокоманд процессора 8087 потребовалось бы  больше  байтов
    объектного кода при использовании подпрограмм вместо мак-
    рокоманд.
@e
@b
          Параметры - характерный элемент подпрограмм,  кото-
    рый присутствует и в обработке макрокоманд. С помощью па-
    раметров    можно    вносить    изменения   в   генерацию
    макрокоманды.  Точно так же,  как параметры  подпрограммы
    могут влиять на ее выполнение, параметры макрокоманды оп-
    ределяют фактически генерируемые команды. И точно так же,
    как и подпрограммы, относительно редко встречаются макро-
    команды без параметров.
          Допустим, мы составили программу так, что во многих
    ее местах содержимое определенной ячейки памяти складыва-
    ется с различными константами.  Вместо того,  чтобы много
    раз писать команду

              ADD MEMORY_BYTE,5
                                     или
              ADD MEMORY_BYTE,?

          хотелось бы воспользоваться  какой-нибудь  макроко-
    мандой.  Однако  во  всех  приведенных командах константы
    разные.  Поэтому константа используется в качестве  пара-
    метра макрокоманды.  В примере показаны определение и вы-
    зов макрокоманды ADDBYTE.

            PAGE    ,132
    ADDBYTE MACRO   CONSTANT
            ADD     MEMORY_BYTE, CONSTANT
            ENDM
    CODE    SEGMENT
            ASSUME  CS:CODE
    MEMORY_BYTE     DB      ?
    FOUR            EQU     4
            ADDBYTE         2
    1       ADD     MEMORY_BYTE, 2
            ADDBYTE         4
    1       ADD     MEMORY_BYTE, 4
            ADDBYTE         FOUR
    1       ADD     MEMORY_BYTE, FOUR
    CODE    ENDS
            END

