Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ассемблер.doc
Скачиваний:
24
Добавлен:
25.08.2019
Размер:
526.34 Кб
Скачать

3.14.10. Флаг захвата

Флаг захвата (специального прерывания) TF помогает при отладке программ. Этот флаг устанавливается не в результате работы микропроцессора, а - программой, с помощью специальной команды. Этот флаг называется также флагом трассировки или шага.

Когда этот флаг установлен, после выполнения каждой команды возникает прерывание. Эффект при этом такой же, как если бы после каждой команды некоторое внешнее устройство запрашивало прерывание. Прерывание по трассировке передает управление в ячейку, определенную вектором прерывания 4. Во время процедуры прерывания микропроцессор сбрасывает флаг специального прерывания. Это позволяет программе обработки прерывания по трассировке избежать прерывания после каждой команды. Когда обработчик прерывания по трассировке возвращает управление программе пользователя, он восстанавливает начальное состояние регистра флагов, в котором флаг трассировки установлен. Микропроцессор выполняет следующую команду пользователя, и снова возникает специальное прерывание. Обработчик прерываний по трассировке получает управление после каждой команды до тех пор, пока программа пользователя не сбросит флаг захвата.

Отладчик DOS использует флаг трассировки. Одной из функций отладчика является пошаговое выполнение, при котором перед каждым возвращением управления к отладчику выполняется одна команда программы пользователя. Это прерывание инициируется флагом захвата. Полное описание процедуры прерывания дано в разделе "Векторы прерываний".

3.14.12. Флаг направления

Последним флагом в регистре флагов является флаг направления DF. Набор команд микропроцессора 8088 содержит несколько команд обработки строк, которые работают с большими блоками данных. Эти команды обработывают блоки данных побайтно или по одному слову памяти за раз. Индексные регистры указывают на блоки данных. После обработки байта или слова процессор изменяет индексный регистр так, чтобы он указывал на следующий элемент блока.

Строковые операции используют флаг направления для определения направления продвижения по блоку данных. Если флаг направления сброшен в 0, команды обработки строк увеличивают значение индексного регистра, а если флаг направления установлен в 1, то они уменьшают это значение. Флаг направления позволяет одному набору строковых команд обслуживать оба направления в зависимости от установки флага. В некоторых случаях желательно пересылать строку с увеличением адресов, а в других лучше всего использовать уменьшение адреса.

В качестве примера предположим, что в программе используется команда пересылки строк для пересылки блока данных на новое место. Если программа пересылает блок, с большего адреса памяти на меньший, она сбрасывает флаг направления, чтобы увеличивать значения индексных регистров после каждой пересылки; если же пересылка производится на больший адрес памяти, флаг направления устанавливается в 1, показывая уменьшение индексных регистров. В случае большинства пересылок не имеет значения, как именно установлен этот флаг. Но если конечное положение блока перекрывает его начальное положение, а флаг направления уствновлен неверно, то информация в блоке будет во время пересылки испорчена.

Рисунок 3.16 иллюстрирует пример пересылки блоков. Исходный блок данных имеет длину 200H байт и расположен от 300H до 4FFH. Нужно переслать его на новое место, расположив от 400H до 5FFH; исходное и результирующее поля перекрываются.

A B

          300 +-----------+ <-- Указатель     300 +-----------+

              +      + источника +        +

              +      + SI           +        +

              +      +                    +        +

Источник 400 +-----------+ <-- Указатель    400 +-----------+

              +      + назначения +        +

              +      + DI             +        +

              +      +                    +        +

Назначение 500 +-----------+                 500 +-----------+ <-- Указатель

             +      +                    +        + источника

             +      +                    +      +

              +      +                    +        +

          600 +-----------+                600 +-----------+ <-- Указатель

назначения

            Фиг. 3.16 Флаг направления

В примере на Фиг.3.16(а) указатели источника и результата установлены на начала соответствующих блоков: указатель источника на 300H, а указатель результата на 400H. Флаг направления в примере сброшен, так, чтобы указатели увеличивались после каждой пересылки. Как показано на рисунке, после пересылки с помощью строковой операции 100H байт, указатель источника переместится на блок результата, а эта область блока уже заполнена данными после пересылки. Пересылка последних 100H байт будет неправильной, так как потеряны исходные данные блока.

В части (b) примера указатели и источника, и результата установлены на концы блоков. Флаг направления установлен так, что содержимое указателей уменьшается после пересылки. При таком способе данные пересылаются верно.

Программы ввода-вывода для IBM PC дают характерный пример использования флага направления для перемещения изображения на экране дисплея. Программа ввода-вывода использует команды пересылки строк микропроцессора 8088 для пересылки данных внутри буфера дисплея. Когда программа передвигает изображение на экране вверх, команды пересылают данные в меньшие адреса памяти. Когда программа опускает символы на экране вниз, команды пересылают данные в большие адреса памяти. В каждом случае программа устанавливает или сбрасывает флаг направления в соответствии с направлением пересылаемых данных

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]