Р е г и с т р ы

Регистры

Для того, чтобы писать программы на ассемблере, нам необходимо знать, какие регистры процессора существуют и как их можно использовать. Все процессоры архитектуры x86 (даже многоядерные, большие и сложные) являются дальними потомками древнего Intel 8086 и совместимы с его архитектурой. Это значит, что программы на ассемблере 8086 будут работать и на всех современных процессорах x86.

Все внутренние регистры процессора Intel 8086 являются 16-битными.

Процессор Intel 8086 имеет 14 шестнадцатиразрядных регистров, которые используются для управления исполнением команд, адресации и выполнения арифметических операций.

Регистры Общего Назначения
15  7 0
AX AH AL
BX BH BL
CX CH CL
DX DH DL
Сегментные Регистры
15 0
CS
DS
SS
ES
Регистр Флагов
15 0
FLAGS
Индексные Регистры
15 0
SI
DI
Регистры - Указатели
15 0
BP
SP
Регистр Указателя Комманд
15 0
IP

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

К ним относятся 16-разрядные регистры АХ, , , , каждый из которых разделен на 2 части по 8 разрядов:

  • АХ состоит из АН (старшая часть) и AL (младшая часть);
  • ВХ состоит из ВH и BL;
  • СХ состоит из СН и CL;
  • DX состоит из DH и DL;

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

  • регистр АХ служит для временного хранения данных (регистр аккумулятор);часто используется при выполнении операций сложения, вычитания, сравнения и других арифметических и логиче­ских операции;

  • регистр ВХ служит для хранения адреса некоторой области памяти (базовый регистр), а также используется как вычислительный регистр;

  • регистр СХ иногда используется для временного хранения данных, но в основном служит счетчиком; в нем хранится число повторений одной команды или фрагмента программы;

  • регистр DX используется главным образом для временного хранения данных; часто служит средством пересылки данных между разными программными системами, в качестве расширителя аккумулятора для вычислений повышенной точности, а также при умножении и делении.

  • Регистры для адресации. В микропроцессоре существуют четыре 16-битовых (2 байта или 1 слово) регистра, которые могут принимать участие в адресации операндов. Один из них одновременно является и регистром общего назначения — это регистр ВХ, или базовый регистр. Три другие регистра — это указатель базы ВР, индекс источника SI и индекс результата DI.
    Отдельные байты этих трех регистров недоступны.

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

Разнообразные способы сочетания в командах этих регистров и других величин называются способами или режимами адресации.

Индексные регистры.

Индексные регистры SI и DI так же, как и РОН, могут использоваться произвольным образом. Однако их основное назначение — хранить индексы (смещения) относительно некоторой базы (т.е. начала массива) при выборке операндов из памяти. Адрес базы при этом обычно находится в одном из базовых регистров (BX или BP).

Регистры сегментов.

Имеются четыре регистра сегментов, с помощью которых память можно организовать в виде совокупности четырех различных сегментов. Этими регистрами являются:

  • CSрегистр программного сегмента (сегмента кода) определяет местоположение части памяти, содержащей программу, т. е. выполняемые процессором команды;

  • DSрегистр информационного сегмента (сегмента данных) идентифицирует часть памяти, предназначенной для хранения данных;

  • SSрегистр стекового сегмента (сегмента стека) определяет часть памяти, используемой как системный стек;

  • ESрегистр расширенного сегмента (дополнительного сегмента) указывает дополнительную область памяти, используемую для хранения данных.

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

Регистры - указатели.

  • Указатель стека SP – это 16-битовый регистр, который определяет смещение текущей вершины стека. Указатель стека SP вместе с сегментным регистром стека SS используются микропроцессором для формирования физического адреса стека. Стек всегда растет в направлении меньших адресов памяти, т.е. когда слово помещается в стек, содержимое SP уменьшается на 2, когда слово извлекается из стека, микропроцессор увеличивает содержимое регистра SP на 2.

  • Указателем базы BP. Обычно в него записывается некий адрес в стеке. В отличие от регистра SP, который всегда указывает на вершину стека, BP может указывать на любое место в стеке. Чаще всего регистр BP применяется для указания на начало стекового фрейма текущей процедуры; тем самым упрощается задача поиска ее локальных переменных. Таким образом, BP часто указывает дно текущего стекового фрейма (иными словами, на слово в стековом фрейме с наименьшим числовым значением), a SP - на его вершину (на слово в стековом фрейме с наибольшим числовым значением). Следовательно, границы текущего стекового фрейма определяются значениями регистров-указателей BP и SP.

Регистр указателя команд.

Регистр указателя команд IP, иначе называемый регистром счетчика команд, имеет размер 16 бит и хранит адрес некоторой ячейки памяти – начало следующей команды. Микропроцессор использует регистр IP совместно с регистром CS для формирования 20-битового физического адреса очередной выполняемой команды, при этом регистр CS задает сегмент выполняемой программы, а – смещение от начала сегмента. По мере того, как микропроцессор загружает команду из памяти и выполняет ее, регистр IP увеличивается на число байт в команде. Для непосредственного изменения содержимого регистра IP служат команды перехода.

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

Флаги – это отдельные биты, принимающие значение 0 или 1. Регистр флагов (признаков) содержит девять активных битов (из 16). Каждый бит данного регистра имеет особое значение, некоторые из этих бит содержат код условия, установленный последней выполненной командой. Другие биты показывают текущее состояние микропроцессора.

0 CF  —————  CF - Carry Flag (флаг переноса)
1
2 PF  —————  PF - Parity Flag (флаг четности)
3
4 AF  —————  AF - Auxiliary Flag (флаг вспомогательного переноса)
5
6 ZF  —————  ZF - Zero Flag (флаг нуля)
7 SF  —————  SF - Sign Flag (флаг знака)
8
9
10 DF  —————  DF - Direction Flag (флаг направления)
11 OF  —————  DF - Overflow Flag (флаг переполнения)
12
13
14
15

Указанные на рисунке флаги наиболее часто используются в прикладных программах и сигнализируют о следующих событиях:

  • OF (флаг переполнения) фиксирует ситуацию переполнения, то есть выход результата арифметической операции за пределы допустимого диапазона значений;

  • DF (флаг направления) используется командами обработки строк. Если DF = 0, строка обрабатывается в прямом направлении, от меньших адресов к большим. Если DF = 1, обработка строк ведется в обратном направлении;

  • SF (флаг знака) показывает знак результата операции, при отрицательном результате SF = 1;

  • ZF (флаг нуля) устанавливается в 1, если результат операции равен 0;

  • AF (флаг вспомогательного переноса) используется в операциях над упакованными двоично-десятичными числами. Этот флаг служит индикатором переноса или заема из старшей тетрады (бит 3);

  • PF (флаг четности) устанавливается в 1, если результат операции содержит четное число двоичных единиц;

  • CF (флаг переноса) показывает, был ли перенос или заем при выполнении арифметических операций.

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


Программирование на Машинно-Ориентированных Языках.
Преподаватель: Коробов С.А.