Вызов процедуры может быть прямым или косвенным и иметь атрибуты NEAR или FAR в зависимости от принадлежности вызывающему сегменту. Прерывание всегда вызывает косвенный переход к своей программе обработки за счет получения ее адреса из вектора прерывания.
При вызове процедуры в стеке запоминается только адрес возврата, тогда как прерывания сохраняют еще и флаги.
Содержимое регистра флагов процессора (RF) приведено на рис. 3.2.
Рис. 3.2. Регистр флагов процессора
Назначение битов регистра флагов МП i80х86:
1. Бит 0, флаг переноса CF (carry flag), равен единице, если произошел перенос единицы при сложении или заем единицы при вычитании. В противном случае он равен нулю. Кроме того, CF содержит значение бита, который при сдвиге или циклическом сдвиге регистра или ячейки памяти вышел за их границы и отражает результат операции сравнения. Наконец, CF служит индикатором результата умножения. Детали см. в описании бита 11 (OF).
2. Бит 2, флаг четности PF (parity flag), равен 1, если в результате операции получено число с четным числом единиц в его битах. В противном случае он равен нулю. Флаг PF, в основном, используется в операциях обмена данными.
3. Бит 4, вспомогательный флаг преноса AF (auxiliary carry flag), аналогичен флагу CF, только контролирует перенос или заем для третьего бита данных. Полезен при выполнении операций над упакованными десятичными числами.
4. Бит 6, флаг нуля ZF (zero flag), равен единице, если результат выполнения процессором операции равен нулю. Ненулевой результат операции сбрасывает ZF в нуль.
5. Бит 7, флаг знака SF (sign flag), имеет значение только при операциях над числами со знаком. Флаг SF равен единице, если в результате арифметической или логической операции, сдвига или циклического сдвига получено отрицательное число. В противном случае он равен нулю. Иными словами, SF дублирует старший (знаковый) бит результата независимо от того, имеет результат длину 8 или 16 битов.
6. Бит 8, флаг трассировки TF (trap flag), разрешает микропроцессору исполнять программу "по шагам" и используется при отладке программ.
7. Бит 9, флаг прерывания IF (interrupt enable flag), разрешает микропроцессору реагировать на прерывания от внешних устройств. Сбрасывание IF в нуль заставляет микропроцессор игнорировать прерывания до тех пор, пока IF не станет равным единице.
8. Бит 10, флаг направления DF (direction flag), заставляет микропроцессор уменьшать на единицу (DF=1) или увеличивать на единицу (DF=0) регистр(ы) индекса после выполнения команды для работы со строками. Если DF=0, то МП будет обрабатывать строку "слева направо" (от младших адресов к старшим). Если DF=1, то обработка пойдет в обратном направлении (от старших адресов к младшим или справа налево).
9. Бит 11, флаг переполнения OF (overflow flag), в первую очередь, служит индикатором ошибки при выполнении операций над числами со знаком. Флаг OF равен единице, если результат сложения двух чисел с одинаковым знаком или результат вычитания двух чисел с противоположными знаками выйдет за пределы допустимого диапазона значений операндов. В противном случае он равен нулю. Кроме того, OF=1, если старший (знаковый) бит операнда изменился в результате операции арифметического сдвига. В противном случае он равен 0. В сочетании с флагом CF флаг OF указывает длину результата умножения. Если старшая половина произведения отлична от нуля, то OF и CF равны 1. В противном случае оба эти флага равны 0.
Наконец, OF=0, если частное от деления двух чисел переполняет результирующий регистр.
Регистры флагов 32- и 64-разрядных процессоров имеют более сложную структуру и в данном пособии не рассматриваются.
Адреса программ обработки запросов на прерывания называют векторами. Каждый вектор имеет длину 4 байта, его структура показана на рис. 3.3 (см. также п.1.4 настоящего пособия).
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.