Селектор сегментов 8086

Есть какой-то «супервизор», чтобы не позволить «пользовательскому пространству» делать что-то вроде: mov CS, 200h ?

Какая защита есть?

Спасибо


person knledge    schedule 17.12.2010    source источник
comment
Защита? На 8086? Ты смеешься?   -  person Paul Tomblin    schedule 17.12.2010
comment
8086 может означать класс x86, а не конкретный процессор 8086. Я основываю это на том факте, что я не думаю, что они даже были названы селекторами, пока не появились 386 (286?). До этого они были просто сегментными регистрами.   -  person paxdiablo    schedule 17.12.2010
comment
Я на самом деле имею в виду 8086, а не x86. Но это хорошее наблюдение, они не являются селекторами, потому что в то время они не были индексами в таблицах дескрипторов.   -  person knledge    schedule 17.12.2010
comment
Если вы имеете в виду реальный 8086, то нет, никаких защит.   -  person paxdiablo    schedule 17.12.2010


Ответы (1)


На фактическом процессоре 8086? Я так не думаю. Расширенные функции защиты действительно начали появляться только с 80286. Не было никаких ограничений на то, какие программы могли установить сегмент кода на 8086.

На 80386 в защищенном режиме (я думаю, что он был первым, кто предоставил это, но, возможно, это был 80286), значения в CS (и DS, ES и т. д.) изменились с сегмента регистры для селекторов, и они должны были иметь записи в таблице дескрипторов (например: GDT, LDT).

В этот момент защита стала возможной, но я не думаю, что загрузка в регистр селектора вызвала нарушения. Скорее это было использование селектора выше вашего уровня привилегий.

Хотя для CS это произошло бы довольно быстро после того, как вы его изменили (по мере того, как вы пытались выполнить следующую инструкцию).

См. здесь для получения дополнительной информации.

person paxdiablo    schedule 17.12.2010
comment
Спасибо за ваш ответ. Я спросил об этом, потому что где-то видел, что эта инструкция недействительна при определенных обстоятельствах, но я не был уверен, что это правильно. - person knledge; 17.12.2010
comment
Инструкция mov CS, imm недействительна просто потому, что ее не существует. Существует только mov CS, ax. - person ruslik; 17.12.2010