Индексные регистры и регистры-указатели




Индексный регистр-источник 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. Используется для осуществления пошагового выполнения программ при их отладке.

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-02-16 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: