Как работает стек Поговорим о стеке для чего он нужен и как работает стек в первую очередь предназначен для хранения промежуточных данных. Для реального режима процессора связка сегмента ss указателем sp. Для защищенного режима просто указатель sp указывает на вершину и маневры с сегментом делать не нужно ! итак стек работает на оборот то есть с верху в низ допустим стек равен sp=20 после выполнения команды push ax он будит равен sp=18 и тд... пушим регистр dx и sp=16 при восстановление данных вынимаем все что засунули в обратном порядке так pop dx а затем только pop ax. пример: mov sp , 20 push ax ; сохранение данных регистра push dx ; сохранение данных регистра pop dx ; восстановление данных регистра pop ax ; восстановление данных регистра Из этого мы узнали что когда мы что нибудь засовываем в стек указатель регистра sp значение уменьшается а когда вытаскиваем значение увеличивается также узнали что вытаскивать из стека данные нужно в обратной последовательности ! Рассмотрим пример команды call поле ее выполнения она положит адрес возврата тобиж то место откуда вызывается и кладет в верхушку стека тобиж куда указывает sp указатель команда ret команда возврата из подпрограммы смотрит на указатель sp и использует эти данные для возврата ! хотя мы можем их подменить и попадем в другое место не туда откуда вызывали команду call так кстати и работает переполнение буфера !!! ну там конечно можно еще чего но все таки основы мне кажется я вам объяснил так как это все рассчитано на начинающего любителя программированию на ассемблере до следующего урока. |