Иллюстрированный самоучитель по Tirbo Pascal

       

Регистры


В МП 8086/8088 имеется 14 регистров. В функциональном отношении они делятся на группы:

  • регистры общего назначения (АХ, ВХ, СХ, DX); предназначены для хранения операндов и выполнения основных команд; любой из них может использоваться как совокупность двух независящих друг от друга 8-разрядных регистров: старшего байта регистра (АН, ВН, СН, DH) и младшего байта (AL, BL, CL, DL); например, АХ состоит из АН и AL;
  • сегментные регистры (CS, DS, SS, ES); используются для указания сегмента при адресации памяти;
  • регистры-указатели (SP, BP, IP); используются для указания смещения при адресации памяти;
  • индексные регистры (SI, DI); применяются для индексной адресации;
  • регистр флагов; используется для хранения признаков состояния процессора.
  • Внутри одной и той же функциональной группы регистры используются различным образом. Ниже описывается специфика использования регистров.

    Регистр АХ.

    Является основным сумматором. Используется во всех арифметических операциях (сложить, умножить и т.п.). Только с помощью АХ и его полурегистров AHIAL возможен обмен данными с портами ввода/вывода.

    Регистр ВХ.

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

    Регистр СХ.

    В основном используется как счетчик при выполнении операций повторения и сдвига. Может также участвовать в арифметических операциях.



    Регистр DX.

    Используется как регистр данных в операциях ввода/вывода, а также как сумматор при обработке длинных целых чисел (32-разрядных).

    Регистр CS.

    Содержит номер сегмента памяти (сегмента кода), в котором располагается текущая машинная инструкция. Для получения полного адреса следующей команды его содержимое сдвигается влево на 4 разряда и складывается с регистром-указателем IP. Содержимое CS автоматически изменяется в командах дальнего (межсегментного) перехода и вызова процедур.

    Регистр IP.

    Определяет смещение относительно начала сегмента кода CS очередной исполняемой машинной инструкции. Содержимое IP автоматически изменяется в ходе исполнения инструкции, обеспечивая правильный порядок выборки команд из памяти.


    Регистр DS.

    Содержит номер сегмента памяти (сегмента данных), в котором располагаются данные (константы и переменные). Все глобальные переменные и типизированные константы программы Турбо Паскаля всегда располагаются в единственном сегменте, адресуемом этим регистром.

    Регистр SS.

    Содержит номер сегмента стека. Стек - это участок автоадресуемой памяти, предназначенный для временного хранения операндов. С помощью стека ТурбоПаскаль организует обмен данными между программой и процедурами, кроме того, в нем он размещает все локальные переменные (т.е. переменные, объявленные внутри процедуры). Память стека используется по правилу «последним пришел - первым ушел»: самый последний помещенный в стек операнд будет первым извлекаться из него.

    Регистр SP.

    Указывает на вершину стека, т.е. совместно с регистром 55 адресует ячейку памяти, куда будет помещаться операнд или откуда он будет извлекаться. Содержимое этого регистра автоматически уменьшается после размещения в стеке очередного операнда и увеличивается после извлечения операнда из стека.

    Регистр ВР.

    Так называемый указатель базы. Облегчает создание и использование локального стека (т.е. стека для использования внутри процедуры).

    Регистр ES.

    Дополнительный сегментный регистр ES используется для межсегментного обмена данными и в некоторых строковых операциях.

    Регистр SI.

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

    Регистр DI.

    В паре с регистром £5 определяет приемник информации при межсегментном обмене данными.

    Регистр флагов.

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

    Флаг переноса CF.



    Содержит 1, если произошел перенос единицы при сложении или заем единицы при вычитании. Используется также в циклических операциях и операциях сравнения.

    Флаг четности PF.



    Содержит 1, если в результате операции получено число с четным количеством значащих разрядов, т.е. дополняет результат до нечета - используется в операциях обмена для контроля данных.



    Флаг внешнего переноса AF.



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

    Флаг нуля ZF.



    Равен 1, если в результате операции получен ноль, и равен 0 в противном случае.

    Флаг знака SF.

    Равен 1, если в результате операции получено отрицательное число (с единицей в старшем разряде).

    Флаг трассировки TF.



    Равен 1, если программа исполняется по шагам, с передачей управления после каждой выполненной команды по прерыванию с вектором 1.

    Флаг прерываний IF.



    Содержит 1, если микропроцессору разрешена обработка прерываний.

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



    Управляет направлением передачи данных: если он содержит 0, то после каждой индексной операции содержимое индексных регистров увеличивается на 1, в противном случае - уменьшается на 1.

    Флаг переполнения OF.



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


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