Команды управления микропроцессором

      Оставшиеся команды микропроцессора 8088 управляют его работой.

    Многие из них устанавливают или сбрасывают некоторые флаги

    состояния.

Установка флагов

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

    флага переноса.  Команды STC, CLC, CMC соответственно могут

    устанавлмвать, сбрасывать и изменять флаг переноса.  Этот флаг -

    единственный, которому уделено такое внимание, и в первую очередь,

    благодаря важности флага переноса при операциях с повышенной

    точностью.    Флаг переноса критичен на промежуточных шагах любых

    многословных операций.  Возможность сбрасывать или устанавливать

    флаг переноса может помочь при циклической обработке с повышенной

    точностью.    На Фиг. 4.31 показан пример использования команды CLC.

    Цикл внутри примера складывает отдельные байты двух 10-разрядных

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

    так как за каждую итерацию она обрабатывает две цифры.  Информация

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

    переноса.  Команда CLC сбрасывает флаг переноса перед первым циклом

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

    переноса также важен в операциях сдвига, где он становится девятым

    или семнадцатым битом регистра во время выполнения операции.

 

      Два флага состояния микропроцессора имеют специальные команды

    работающие с ними. Программа может установить или сбросить маску

    прерываний соответственно командами STI и CLI. Команда STI включает

    систему прерываний микропроцессора 8088, позволяя ему реагировать

    на внешние прерывания. Команда CLI блокирует систему внешних

    прерываний.

           Microsoft (R) Macro Assembler Version 5.00              1/1/80 04:02:06

           Фиг. 4.31 Десятичная арифметика повышенной точности    Page   1-1

 

                                         PAGE    ,132

                                         TITLE   Фиг. 4.31 Десятичная арифметика повышенной точности

 

            0000                   CODE    SEGMENT

                                         ASSUME  CS:CODE,DS:CODE

 

            = 0005                       NUMBER_LENGTH   EQU     5                 ; 5 байт для упакованного числа

            0000  0005[            NUMBER_ONE      DB      NUMBER_LENGTH DUP (?)

                   ??

                              ]

            0005  0005[            NUMBER_TWO      DB      NUMBER_LENGTH DUP (?)

                   ??

                              ]

                                   ;----------------------------------------

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

                                   ; числа (NUMBER_ONE и NUMBER_TWO) и заносит результат

                                   ; в NUMBER_TWO.

                                   ;----------------------------------------

 

            000A                   START_ADD:

            000A  B9 0005                      MOV     CX, NUMBER_LENGTH           ; Определение длины чисел

 

                                   ;-----  Установка индексных регистров на младший байт складываемых чисел

 

            000D  8D 36 0004 R                 LEA     SI, NUMBER_ONE + NUMBER_LENGTH - 1

            0011  8D 3E 0009 R                 LEA     DI, NUMBER_TWO + NUMBER_LENGTH - 1

 

            0015  F8                     CLC                           ; Нет младших разрядов

 

            0016                   ADD_LOOP:

            0016  8A 04                  MOV     AL, [SI]        ; Взять байт из первого числа

            0018  12 05                  ADC     AL, [DI]        ; Добавить из второго с учетом переноса

            001A  27                           DAA               ; Коррекция до упакованного формата

            001B  88 05                  MOV     [DI], AL        ; Занесение байта результата

            001D  9C                           PUSHF             ; Сохранение флага переноса (CF)

            001E  4E                           DEC     SI        ; Сдвиг указателя первого числа

            001F  4F                           DEC     DI        ; Сдвиг указателя второго числа

            0020  9D                           POPF              ; Восстановление флагов

            0021  E2 F3                  LOOP    ADD_LOOP        ; Обработка следующего байта

 

            0023                   CODE    ENDS

                                         END

 

            Фиг. 4.31 Операции с BCD повышенной точности

 

      Программа может установить или сбросить флаг направления с

    помощью команд STD и CLD. Команда CLD сбрасывает флаг направления,

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

    возрастающих адресах памяти. Команда STD устанавливает флаг, в

    результате чего строковые команды уменьшают адресный указатель

    после каждого выполнения.

Hosted by uCoz