31 |
30 |
29 |
18 |
16 |
15 6 |
5 |
4 |
3 |
2 |
1 |
0 |
|||
PG |
CD |
NW |
резерв |
AM |
WP |
резерв |
NE |
ET |
TS |
EM |
MP |
PE |
CR0 |
Линейный адрес страничной ошибки |
CR2 |
31 12 |
11 5 |
4 |
3 |
2 0 |
||
Базовый адрес каталога страниц |
резерв |
PCD |
PWT |
резерв |
CR3 |
31 7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
MSE |
0 |
PSE |
DE |
TSD |
PVI |
VME |
CR4 |
Регистры управления процессора
Рис. Системная архитектура процессора Pentium
Регистр сегмента данных DS (Current Date Segment) указывает начало области адресов памяти, в которой в общем случае размещаются программно изменяемые таблицы и данные. Все прямые и косвенные адресные ссылки к операндам в выполняемых командах определяются относительно регистра DS. При формировании адресов данных содержимое регистра DS суммируется с исполнительным адресом ЕА (смещением), вычисляемым в операционном блоке. Исключения составляют данные, для которых смещение формируется через базовый регистр ВР или стековый регистр SP. Такая организация памяти, при которой все данные группируются в отдельном сегменте и не попадают в сегмент, хранящий коды команд, упрощает их использование и исключает не предусмотренные алгоритмом разрушения команд и данных.
Регистры дополнительных сегментов данных ES, FS, GS указывают начало областей памяти, которые обычно используются для запоминания промежуточных данных. Процессор в командах работы со строками явно адресует данные приемника, которые должны размещаться в сегменте, адресуемом регистром ES. Заметим, что с помощью однобайтного префикса "пересегментирования", указываемого перед выполняемой командой, можно принудительно изменить текущий сегмент, из которого считывается операнд. При отсутствии префикса, а это обычная ситуация, операнд берется из текущего сегмента данных, за исключением случаев указанных выше.
Регистр стекового сегмента SS (Current Stack Segment) используется для запоминания начального адреса сегмента, выделенного под стек. Все обращения к стеку, в том числе неявные действия при прерываниях, обращениях к подпрограммам и при возврате из них, а также явные операции загрузки стека и извлечения из стека осуществляются с использованием регистра SS и регистров-указателей стека ЕBP и ESP, задающих смещение внутри стекового сегмента. В отличие от регистра CS регистр SS может быть загружен явно, что позволяет прикладным программам определять собственные стеки.
Указатель стека ESP (Stack Pointer) содержит смещение вершины стека в текущем сегменте стека. Он используется при вызове подпрограмм и при возврате из них, а также в случае поступления прерываний или исключений. Указатель базы кадра стека EBP (Stack Frame Base Pointer) предназначен для доступа к структурам данных стека. В отличие от указателя стека ESP, который изменяет свое содержимое при записи или чтении данных из стека, указатель базы может быть использован для доступа к структурам данных стека с фиксированным смещением. В частности, команды ENTER и LEAVE используют указатель базы EBP для удобного доступа к переменным.
При обращении к данным выбор сегментного регистра и способа вычисления исполнительного адреса ЕА зависят от типа обращения к памяти. Большинство команд процессора оперируют только внутрисегментным смещением, при этом сам сегмент непосредственно в команде не указывается: он адресуется неявно кодом операции.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.