Просто примечание: в x86 существует много видов инструкций "jmp". Наиболее распространенным является «локальный» jmp, который просто меняет значение регистра EIP, поэтому кадр стека вообще не затрагивается, как указал Карл. Я предполагаю, что вы говорите об этом типе jmp, так как это тот, который ассемблеры генерируют с синтаксисом вроде:
jmp label
...
label:
Но есть и «дальний» переход, который влияет и на регистр сегмента CS. Если процессор находится в реальном режиме, это все равно не что иное, как изменение регистров CS: IP (просто «больший» переход), но в защищенном режиме сегменты CS имеют совершенно другую и гораздо более сложную функцию: это интерпретируется как дескриптор на входы CALL / TASK / INTERRUPT, т. е. индекс в таблице дескрипторов, который определяет многие вещи, такие как уровень привилегий, задача ... В зависимости от конкретного дескриптора может произойти повышение уровня привилегий или также переключение «аппаратной задачи». Это может привести к изменению контекста. Обычно вы не найдете далеко идущих переходов в защищенном режиме, если вы не программируете ядро операционной системы. Создание дескрипторов сегментов - это почти всегда работа ядра.
Привет