Установка CS будет быть прыжком, потому что выборка кода происходит из CS: IP (или CS: RIP / EIP).
Имеет смысл, что выполнение ограничено jmp far
/ call far
/ ret far
и другие инструкции по передаче управления.
Изменение CS без изменения IP было бы странным: следующая команда, которая будет выполнена после гипотетической инструкции mov cs, ax
, будет new_CS_base:old_IP+2
(потому что mov cs,ax
имеет длину 2 байта, если вы не используете префикс размера операнда.)
Конечно, вы можете настроить все так, чтобы у вас был код с одинаковым смещением IP относительно двух разных баз сегментов, нотот факт, что pop cs
- это прыжок, а pop ds
- это не странно.* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *1021* Можно ли манипулировать указателем инструкций в сборке 8086? *1021*.*.
Помните, что защищенный режим 386 был расширением;в реальном режиме значение CS использовалось непосредственно как основание сегмента = cs<<4
. Вариант использования загрузки нового дескриптора с той же базой был новым с 386, (или, возможно, 286 защищенным режимом. До этого на самом деле не было варианта использования для mov cs, r/m16
или pop cs
кодов операций, поэтому корпорация Intel зарезервировала эти кодировки команд для других целей.
И упростила будущие процессоры, не поддерживая mov cs, r/m
или pop cs
в качестве инструкций перехода, которые должны были бы отбрасывать предварительно выбранный код.
(В некоторых ранних версиях 8086 pop cs
существовал, следуя той же схеме, что и push
/ pop
других регистров сегментов, и имел код операции 0x0f
, но Intel мудро решила зарезервировать 0F
дляиспользовать в качестве escape-байта для многобайтовых кодов операций в будущих процессорах x86. Что произойдет, если регистр сегмента CS будет изменен? ).
Изменение CS в защищенном режиме дажеменее распространен, чем в реальном режиме, поэтому определенно не нужно было начинать поддерживать mov
для CS. jmp far
работает превосходно, и на самом деле лучше, потому что вам не нужно гарантировать, что IP
/ EIP
смещение относительно базы сегмента одинаково до / после.