Поиск по сайту:
На рис. 4 представлена программная модель 32-разрядных процессоров i80x86 (реальный режим). Все регистры, не имеющие в своём имени начальную букву E (Extended), составляли программную модель базового процессора i8086 (за исключением двух новых сегментных регистров fs и gs). Младшие 8- или 16-битные регистры, имеющие имена, могут использоваться самостоятельно. Первую группу из 8-ми регистров (eax, ebx, esp) составляют регистры общего назначения (РОН), использующиеся для хранения данных или адресов. Вместе с тем, каждый из РОН в некоторых командах выполняет специальные функции, что нашло отражение в названии регистров.
Eax/ax/ah/al – аккумулятор, используется в подавляющем числе команд. Часто применяемые команды, использующие данный регистр, имеют укороченный формат.
Ebx/bx/bh/bl – базовый регистр. Получил своё название из-за выполняемой функции базовой адресации (регистр bx) в процессоре i8086. В старших моделях процессоров базовая адресация вводится любым расширенным РОН.
Ecx/cx/ch/cl – регистр, используется как счётчик числа повторений в командах сдвига, в циклических и в строковых командах.
Edx/dx/dh/dl – регистр данных, выполняющий функцию арифметического расширителя в командах умножения и деления.
Индексные регистры Esi/si и Edi/di получили своё название из-за одноимённой адресации в базовом процессоре i8086 (регистры si и di), где содержат величину смещения данных и команд от начала базового адреса соответствующего сегмента. В старших моделях процессоров индексная адресация вводится любым расширенным РОН.
В процессорах i80x86 имеется четыре типа сегментных регистра, которые в IBM PC используются по умолчанию в соответствии с их функциональной специализацией.
CS – code segment – содержит адрес сегмента кода программы. Логический адрес команды определяется указателем CS:IP, где IP – instruction pointer – программный счётчик.
Рис. 4. Регистры 32-разрядных процессоров i80x86
DS – date segment -содержит сегментную часть адресного указателя данных DS:EA, где EA – effective address -адресное выражение, определяющее смещение переменной в памяти данных. Адресное выражение не должно включать имя регистра Ebp/bp.
SS – stack segment – содержит сегментную часть адресного указателя стека SS:SP, где SP – указатель вершины стека. Стек можно также адресовать с использованием адресации, аналогичной сегменту данных SS:EA, где EA – адресное выражение, включающее имя регистра Ebp/bp.
ES – extra segment – дополнительный сегмент данных, используется для адресации строки-приёмника в строковых командах. Для адресации других дополнительных сегментов данных предназначены регистры GS и FS. Назначение сегментных регистров, обусловленное их функциональной специализацией, а также возможность их переназначения с помощью префикса, поясняется в табл. 3.
Регистр флагов является специальным регистром, в котором хранится слово состояние программы и процессора (Program Status Word – PSW). Существует два основных типа флагов: управляющие флаги и флаги состояния.
Таблица 3
Назначения сегментных регистров
Регистры, использующиеся для вычисления эффективного адреса ЕА |
Назначение сегментных регистров |
|
По умолчанию |
Возможные переназначения с помощью префикса |
|
Eip/ip – адрес команды в сегменте кода Esp/sp – указатель вершины стека в сегменте стека EA операнда в сегменте стека с использованием регистра ebp/bp EA операнда в сегменте данных без использования регистра ebp/bp esi/si – указатель элемента строки – источника edi/di – указатель элемента строки – приёмника |
cs ss ss
ds
ds es |
Нет Нет cs, ds, es
cs, ds, es
cs, ds, es Нет |
¨ Управляющие флаги
Df – Direction Fl – флаг направления обработки элементов строки при выполнении строковых команд. При Df = 0 осуществляется просмотр строки вперёд, в сторону увеличения значения их адреса, при Df = 1 – просмотр назад.
If – Interrupt Fl – флаг разрешения аппаратных прерываний, считается установленным, если If = 1.
Tf – Trace Fl – флаг трассировки, используется в отладчиках для осуществления пошагового выполнения команд программы. Если Tf = 1, то после выполнения каждой команды процессор реализует процедуру прерывания Int 1.
¨ Флаги состояний (рис. 5)
Cf – Carry Fl – перенос из старшего разряда регистра результата при сложении или заём для старшего разряда при вычитании.
Of – Overflow – арифметическое переполнение результата при сложении или вычитании чисел в дополнительном коде. При операциях с беззнаковыми числами признаком переполнения является значение флагаCf (1 – есть переполнение, 0 – нет).
Рис. 5. Механизм формирования флагов условий
Sf – Sign Fl – флаг знака результата.
Zf – Zero Fl – флаг нулевого результата для логических и арифметических операций.
Af – Auxiliary Fl – флаг дополнительного переноса (займа), используется при операциях с BCD-числами.
Pf – Parity Fl – флаг паритета, фиксирует наличие чётного числа "1" в младшем байте результата.