Индексный регистр-источник ESI. Используется в качестве указателя адреса байта или слова в строковых командах. При базово-индексной адресации содержимое регистра ESI может суммироваться с содержимым базового регистра. Для повышения эффективности выполнения содержимое регистра может автоматически возрастать или уменьшаться в режиме автоиндексации. Регистр может быть использован при выполнении большей части арифметических и логических операций.
Индексный регистр-приемник EDI. Используется как указатель назначения для адреса байта или слова в строковых командах. При базово-индексной адресации содержимое регистра EDI может суммироваться с содержимым базового регистра. Для повышения эффективности выполнения содержимое регистра может автоматически возрастать или уменьшаться в режиме автоиндексации. Регистр может быть использован при выполнении большей части арифметических и логических операций.
Регистр-указатель стека ESP. Используется для работы с данными в стековых структурах. Его содержимое указывает адрес элемента на вершине стека. Регистр ESP модифицируется аппаратно, и в прикладных программах не рекомендуется изменять его содержимое.
Регистр-указатель базы EBP. Используется как дополнительный указатель для работы с данными в стековых структурах. Регистр EBP может выполнять функции указателя на параметры или локальные переменные процедуры, находящиеся в стеке. В режиме базово-индексной адресации для получения адресов операндов содержимое регистра EBP может суммироваться с содержимым регистров ESI и EDI. Регистр EBP может использоваться в большинстве арифметических и логических операций. Но, поскольку этот регистр является основой рамки стека функции в языках высокого уровня, то использовать его в качестве регистра общего назначения на встроенном ассемблере настоятельно не рекомендуется.
Сегментные регистры
Использование и назначение сегментных регистров в реальном и защищенном режиме существенно различается. В реальном режиме сегментные регистры предназначены для преодоления барьера 64К при 16-разрядной адресации, и любая прикладная программа может явно менять и зачастую меняет их содержимое. В защищенном 32-разрядном режиме сегментные регистры предназначены для изолирования адресных пространств отдельных процессов друг от друга. Каждый процесс имеет свое виртуальное адресное пространство размером 4G, которое перекрывается 32-разрядными исполнительными адресами. Поэтому явная модификация содержимого сегментных регистров в прикладных программах защищенного режима практически никогда не требуется.
Регистр сегмента команд CS - 16-разрядный управляющий регистр, указывающий сегмент, содержащий адрес текущей команды. Его содержимое может быть изменено только при выполнении команд дальнего перехода JMP, CALL, RET, IRET. Ближние варианты JMP и CALL не изменяют содержимое регистра CS
Регистр сегмента данных DS - 16-разрядный управляющий регистр. Его содержимое указывает начало зоны адресов, которая в общем случае включает программно изменяемые данные. Все прямые и косвенные адресные ссылки, использующие регистры BX, SI, или DI, определяются относительно регистра DS. Адресные ссылки в строчных командах, использующих регистр SI, также вычисляются относительно DS.
Регистры дополнительных сегментов данных ES, FS, GS - 16-разрядные управляющие регистры. Их содержимое указывает на начало области памяти, которая используется для динамически размещаемых данных. Адресные ссылки в командах работы со строками, использующих регистр DI, вычисляются относительно регистра ES.
Регистр сегмента стека SS - 16-разрядный регистр. Его содержимое указывает начало стековой структуры в памяти. Содержимое регистров SP и BP может использоваться для доступа к рамке стека функции с использованием косвенной адресации.
Указатель команд (программный счетчик) EIP - 32-разрядный регистр. Его содержимое указывает адрес следующей команды в сегменте, определяемом CS.
Регистр флагов - 32-разрядный регистр, содержащий информацию о текущем состоянии МП. При прикладном программировании используются в основном следующие флаги:
флаг вспомогательного переноса AF. Используется при арифметических операциях над 8-разрядными числами в формате BCD для индикации переноса единицы из младших четырех битов в старшую тетраду или заема единицы из старшей тетрады в младшую.
флаг переноса CF. Используется для индикации переноса в старший разряд или заема единицы из этого разряда при арифметических операциях над 8- 16- и 32-разрядными числами.
флаг переполнения OF. Используется для индикации переполнения результатов при выполнении арифметических операций.
флаг знака SF. Если SF установлен в 1, то результат отрицательное число, что соответствует 1 в самом старшем бите байта, слова или двойного слова, так как отрицательные числа в МП х86 представляются в дополнительном коде.
флаг паритета PF. Используется для индикации четности числа битов в младшем байте результата. Если установлен в 1 - то число битов (но не само число) четное.
флаг нуля ZF. Используется для индикации равенства нулю результата операций с байтами, словами или двойными словами.
флаг направления DF. Используется преимущественно вместе с командами обработки строк. Когда DF равен 1, эти команды автодекрементируются. Содержимое SI и/или DI используемых в этих операциях, уменьшаются на 1, 2 или 4 в зависимости от команд.
флаг разрешения прерывания IF. Используется для разрешения или запрета обработки внешнего маскируемого прерывания. Когда флаг сброшен в 0, прерывания запрещены.
флаг трассировки TF. Используется для осуществления пошагового выполнения программ при их отладке.