Шаг 7.
Регистры
На этом шаге мы познакомимся с регистрами.
Процессор имеет 14 регистров (смотри шаг 4), используемых
для управления выполняющейся программой, адресации памяти и обеспечения арифметических вычислений.
Каждый регистр имеет длину в одно слово (16 бит) и адресуется по имени. Биты регистра
принято нумеровать слева направо.
Замечание.
Процессоры 80386, 80486, Pentium имеют ряд дополнительных регистров, некоторые из
них 32-битовые. Эти регистры здесь не рассматриваются.
Перечислим регистры и кратко определим их назначение.
- Сегментные регистры (CS, DS, SS, ES).
- Регистр сегмента кода (CS) содержит начальный адрес сегмента кода.
Этот адрес плюс значение смещения в командном указателе (IP) определяет адрес команды,
которая должна быть выбрана для выполнения.
- Регистр сегмента данных (DS) содержит начальный адрес сегмента данных.
Этот адрес плюс значение смещения, определенное в команде, указывают на конкретную ячейку
в сегменте данных.
- Регистр сегмента стека (SS) содержит начальный адрес сегмента стека.
- Регистр ES. Некоторые операции над строками используют дополнительный сегментный
регистр для управления адресацией памяти. В этом случае этот регистр связан с индексным регистром
DI. Если необходимо использовать регистр ES, ассемблерная программа должна
его инициализировать.
- Регистры общего назначения (AX, BX, CX, DX). Особенность этих регистров
состоит в том, что возможна адресация их как одного целого слова, так и однобайтовой части.
Левый байт является старшей частью (High), а правый - младшей частью (Low) соответствующего регистра.
Например, двухбайтовый регистр CX состоит из двух однобайтовых CH и CL, и ссылки
на регистр возможны по любому из этих трех имен.
Рис.1. Адресация регистров общего назначения
Таким образом, любые регистры общего назначения могут участвовать в арифметических операциях
как 8, так и 16-битовых значений. Разберем назначение каждого из регистров.
- Регистр AX. Он является основным сумматором и применяется для
всех операций ввода-вывода, некоторых операций над строками и некоторых арифметических операций.
Например, команды умножения, деления и сдвига предполагают использование регистра AX.
Некоторые команды генерируют более эффективный код, если они имеют ссылки на регистр
AX.
- Регистр BX. Он является базовым регистром. Это единственный регистр
общего назначения, который может использоваться в качестве "индекса" для расширенной
адресации. Также он используется при организации вычислений.
- Регистр CX. Это счетчик, используемый для управления числом
повторений циклов и для операций сдвига влево или вправо. Регистр CX используется также
при вычислениях.
- Регистр DX. Он является регистром данных и применяется для некоторых операций
ввода-вывода и тех операций умножения и деления над большими числами, которые используют
регистровую пару DX:AX.
- Регистровые указатели (SP, BP). Они обеспечивают системе доступ к данным
в сегменте стека. Реже используются в арифметических операциях.
- Регистр SP. Указатель стека обеспечивает использование стека в памяти,
позволяет временно хранить адреса и иногда данные. Этот регистр связан с регистром SS для
адресации стека.
- Регистр BP. Указатель базы облегчает доступ к параметрам (данным и адресам, переданным через стек).
- Индексные регистры (SI, DI). Оба индексных регистра могут применяться для
расширенной адресации и для использования в арифметических операциях.
- Регистр SI. Этот регистр является индексом источника данных
и применяется для некоторых операций над строками. В этом случае он адресует память в
паре с регистром DS.
- Регистр DI. Этот регистр является индексом назначения и применяется
также для строковых операций. В данном случае он используется совместно с регистром
ES.
- Регистр командного указателя (IP). Он содержит смещение на команду,
которая должна быть выполнена. Обычно этот регистр в программе не применяется, но
он может изменять свое значение при использовании отладчика в процессе тестирования программы.
- Флаговый регистр (иногда мы будем обозначать его через FLAGS). Девять
из шестнадцати бит флагового регистра являются активными и определяют текущее состояние машины и
результаты выполнения команд:
Рис.2. Структура флагового регистра
Многие арифметические команды и команды сравнения изменяют состояние флагов. Назначение флагов приведено в
таблице 1.
Таблица 1. Назначение флаговых битов
Флаг |
Назначение |
OF (Переполнение) |
Указывает на переполнение старшего бита при арифметических командах. |
DF (Направление) |
Обозначает левое или правое направление пересылки или сравнения строковых данных. |
IF (Прерывание) |
Указывает на возможность внешних прерываний. |
TF (Пошаговый режим) |
Обеспечивает возможность работы процессора в пошаговом режиме. |
SF (Знак) |
Содержит результирующий знак после арифметических операций (0 - плюс, 1- минус). |
ZF (Ноль) |
Показывает результат арифметических операций и операций сравнения (0 - ненулевой, 1 - нулевой результат). |
AF (Внешний перенос) |
Содержит перенос из 3-го бита для 8-битовых данных, используется для специальных арифметических операций. |
PF (Контроль четности, паритета) |
Если младшие 8 битов содержат четное число единиц, то значение флага равно 1, в противном случае - 0. |
CF (Перенос) |
Содержит перенос из старшего бита после арифметических операций, а также последний бит при сдвигах или циклических сдвигах. |
При программировании на Ассемблере наиболее часто используются флаги OF, SF, ZF и CF
для арифметических операций и операций сравнения, а флаг DF - для обозначения направления в операциях над строками.
На следующем шаге мы начнем разбирать основные арифметические команды.
Предыдущий шаг
Содержание
Следующий шаг