Четвертый Borland C++ и его окружение

       

Регистры общего назначения


SP Указатель стека
BP Указатель базы
SI Индекс источника
DI Индекс приемника

Общие регистры чаще всего используются для работы с данными.

Каждый из них выполняет некоторые специальные функции, которые

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

могут использовать только регистр AX, регистр BX может служить

базовым регистром, CX применяется инструкцией LOOP и некоторыми

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

Сегментные регистры содержат начальный адрес каждого из 4



сегментов. Как описывается ниже, 16-разрядное значение в сегментном регистре для получения 20-разрядного адреса сегмента сдвигается влево на 4 (умножается на 16).

16-разрядный сегментный 16-разрядное

регистр смещение

V

умножение на 16

/сдвиг влево на 4/

V

Значение сегмента,

умноженное на 16,

равно 20-разрядно-

му значению

> + <

V

20-разрядное значение адреса памяти

Процессоры 80х86 имеют также некоторые специальные регистры:

  • Регистры SI и DI могут выполнять многие функции общих регистров, но могут также использоваться в качестве индексных регистров. Они используются и в регистровых переменных Borland С++.
  • Регистр SP указывает на текущую вершину стека и представляет смещение в сегменте стека.
  • Регистр BP - это вспомогательный указатель стека, применяемый для индексирования в стеке с целью извлечения аргументов или локальных динамических переменных.
  • Функции Borland С++ используют регистр базы (BP) в качестве

    базового регистра для аргументов и переменных. Параметры имеют

    положительные смещения от BP, зависящие от модели памяти. При наличии кадра стека BP указывает на сохраненное предыдущее значение BP. Если параметр Standard Stack Frame выключен (Off), то функции без аргументов не используют и не сохраняют BP.

    16-разрядный регистр флагов содержит все необходимую информацию о состоянии процессора 80х86 и результатах последних инструкций.




    только 80386 286/386 все процессоры 80х86

    31 23 15 7 0

    V R N IOP O D I T S Z A P C

    Виртуальный режим 80х86

    Возобновление

    Вложенная задача

    Уровень защиты ввода-вывода

    Переполнение

    Направление

    Разрешение прерывания

    Прерывание

    Знак

    Признак нуля

    Вспомогательный перенос

    Четность

    Перенос

    Например, если вы хотите знать, получен ли при вычитании нулевой результат, непосредственно после этой инструкции вам следует проверить флаг нуля (бит Z в регистре флагов). Если он установлен (то есть имеет ненулевое значение), это будет говорить о

    том, что результат нулевой. Другие флаги, такие, как флаги переноса и переполнения аналогичным образом сообщают о результатах

    арифметических и логических операций.

    Прочие флаги управляют режимом операций процессора 80х86.

    Флаг направления управляет направлением, в котором строковые инструкции выполняют перемещение, а флаг прерывания управляет тем,

    будет ли разрешено внешним аппаратным средствам, таким, например,

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

    для выполнения функций, требующих немедленного обслуживания. Флаг

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

    служит для отладки другого программного обеспечения (отладчики).

    Регистр флагов не считывается и не модифицируется непосредственно. Вместо этого регистр флагов управляется в общем случае с помощью специальных инструкций (таких, как CLD, STI и CMC), а также с помощью арифметических и логических инструкций, модифицирующих отдельные флаги. И наоборот, содержимое отдельных разрядов регистра флагов влияет на выполнение инструкций (например, JZ, RCR и MOVSB). Регистр флагов не используется на самом деле,

    как ячейка памяти, вместо этого он служит для контроля за состоянием и управления процессором 8086.


    Содержание раздела