Регистры архитектуры x86
Пользовательские регистры называются так потому, что программист может использовать их при написании своих программ. К этим регистрам относятся:
Восемь 32-битных регистров, которые могут использоваться программистами для хранения данных и адресов (их еще называют регистрами общего назначения (РОН)):
eax/ax/ah/al; (Accumulator register) - аккумулятор. ebx/bx/bh/bl; (Base register) - базовый регистр. edx/dx/dh/dl; (Data register) - регистр данных. ecx/cx/ch/cl; (Count register) - регистр-счетчик. ebp/bp; (Base Pointer register) - регистр указателя базы кадра стека. esi/si; (Source Index register) - индекс источника. edi/di; (Destination Index register) - индекс приемника (получателя). esp/sp. (Stack Pointer register) - регистр указателя стека.
Шесть регистров сегментов: cs, ds, ss, es, fs, gs;
Сегмент кода. Содержит команды программы. Для доступа к этому сегменту служит регистр cs (code segment register) - сегментный регистр кода. Он содержит адрес сегмента с машинными командами, к которому имеет доступ процессор (то есть эти команды загружаются в конвейер микропроцессора).
Сегмент данных. Содержит обрабатываемые программой данные. Для доступа к этому сегменту служит регистр ds (data segment register) - сегментный регистр данных, который хранит адрес сегмента данных текущей программы.
Сегмент стека. Этот сегмент представляет собой область памяти, называемую стеком. Работу со стеком микропроцессор организует по следующему принципу: последний записанный в эту область элемент выбирается первым. Для доступа к этому сегменту служит регистр ss (stack segment register) - сегментный регистр стека, содержащий адрес сегмента стека.
Дополнительный сегмент данных. Большинство машинных команд предполагают, что обрабатываемые ими данные расположены в сегменте данных, адрес которого находится в регистре ds.
Если программе недостаточно одного сегмента данных, то она имеет возможность использовать еще три дополнительных сегмента данных. Но в отличие от основного сегмента данных, адрес которого содержится в сегментном регистре ds, при использовании дополнительных сегментов данных их адреса требуется указывать явно с помощью специальных префиксов переопределения сегментов в команде. Адреса дополнительных сегментов данных должны содержаться в регистрах es, gs, fs (extension data segment registers).
Регистр флагов eflags/flags; регистр указателя команды eip/ip. регистры сопроцессора x87 и расширения MMX регистры расширения XMM