Наличие индивидуальных стеков для каждого уровня привилегий диктуется двумя основными причинами:
Начальные значения селектора стека SS и указателя ESP хранятся во всех сегментах состояния задачи TSS и не модифицируются. При смене стека адрес возврата CS и IP, селектор SS и указатель ESP старого стека сохраняются в новом стеке. В него же, в случае вызова процедуры с передачей параметров, из старого стека копируются передаваемые параметры и счетчик двойных слов, определяющий их количество. При смене стека производится обращение к сегменту TSS для чтения значений SS, загрузка нового указателя стека в регистр ESP и селектора стека в сегментный регистр SS. Процессор анализирует поле счетчика WC (Word Count) дескриптора шлюза вызова. Затем копирует из старого стека в новый число двойных слов, указанное этим полем. Это - параметры, передаваемые вызываемой процедуре. Они размещаются в новом стеке также, как в старом. Наконец, в новый стек включается адрес возврата CS и EIP. |