Система команд x86 |
|
Программирование - Архитектура и система команд микропроцессоров x86 |
MOV CR
Влияние команды на флаги и форматы команды:
? |
|
|
|
? |
? |
? |
? |
? |
0F 22 /r |
MOV CRx,r32 |
CRx = r32 |
Intel386 |
mov cr0,eax |
0F 20 /r |
MOV r32,CRx |
r32 = CRx |
Intel386 |
mov eax,cr4 |
Описание:
Команда MOV CR предназначена для пересылки данных между управляющими регистрами CR0, CR2, CR3, CR4 и регистрами общего назначения. С этими командами всегда используются 32-битные операнды независимо от атрибута размера операнда.
При загрузке управляющих регистров программы не должны изменять состояния зарезервированных битов и всегда устанавливать их в предварительно считанные значения.
Код операции для данной команды формируется с некоторыми особенностями. Поле reg байта ModR/M задает управляющий регистр, поле mod всегда находится в значении 11b, а поле r/m задает регистр общего назначения.
При загрузке управляющих регистров состояние процессора может быть существенно изменено, во избежание ошибок процессор автоматически выполняет ряд действий в следующих ситуациях:
- при записи в регистр CR3 все неглобальные элементы TLB сбрасываются;
- в процессорах Pentium Pro (и вероятно во всех процессорах микроархитектуры P6) при модификации любых флагов страничного механизма (CR0.PE, CR0.PG, CR4.PGE, CR4.PSE, CR4.PAE) все элементы TLB, включая глобальные, сбрасываются;
- в процессорах Pentium Pro (и вероятно во всех процессорах микроархитектуры P6), если флаг CR0.PG = 1 и производится запись в регистр CR4 с установкой флага CR4.PAE = 1, то процессор сразу произведет загрузку во внутренние скрытые регистры указателей из таблицы указателей на каталог страниц;
- в процессорах Pentium Pro (и вероятно во всех процессорах микроархитектуры P6), когда установлены флаги CR0.PG и CR4.PAE, запись в регистр CR3 приведет к перезагрузке всех указателей из таблицы указателей на каталог страниц;
- в процессорах Pentium Pro (и вероятно во всех процессорах микроархитектуры P6), если флаг CR4.PAE = 1 и производится запись в регистр CR0 с установкой флага CR0.PG = 1, то процессор сразу произведет загрузку во внутренние скрытые регистры указателей из таблицы указателей на каталог страниц.
Указанные действия характерны только для отдельных моделей процессоров и могут быть переопределены их разработчиками в последующих модификациях.
Операция:
DEST = SRC;
Особые ситуации защищенного режима:
#GP(0), если текущий уровень привилегий не равен 0, если произведена попытка записать 1 в любой из зарезервированных битов регистра CR4, а также если произведена попытка записи некорректной комбинации управляющих битов (например, при записи в CR0 бит PG установлен, а бит PE сброшен).
Особые ситуации режима реальной адресации:
#GP, если произведена попытка записать 1 в любой из зарезервированных битов регистра CR4.
Особые ситуации режима V86:
#GP(0), при попытке выполнить команду.
Замечание:
При записи в регистр CR0 значения с PE =0, т.е. при обратном переключении в режим реальной адресации, рекомендуется предварительно изменить предел кодового сегмента на FFFFh. Это необходимо для предотвращения генерации особой ситуации #GP в реальном режиме при превышении предела сегмента CS, который был задан еще в защищенном режиме. Такая ошибка встречается во многих процессорах AMD.
Все права защищены © Алексей Ровдо, 1994-2023. Перепечатка возможна только по согласованию с владельцем авторских прав. admin@club155.ru