"П.Нортон "Программно-аппаратная организация компьютера IBM PC"" - читать интересную книгу авторавеличины, так что один набор величин никогда не смешивается с другим
набором. Стек получил свое имя благодаря метафоре, которую часто используют для описания его работы. Представьте себе стопку тарелок, например, таких которые используются в кафетериях, где тарелки находятся на подпружиненной платформе, перемещающейся вверх и вниз. Если нужно добавить в стопку (по-английски stack) чистые тарелки, которые были в стопке, опускаются вниз. Когда кто-нибудь снимает тарелку сверху, вся стопка поднимается вверх. Тарелки используются по принципу "последним вошел - первым вышел". Когда компьютер занят работой и поступает прерывание, необходимо место для того, что бы заполнить состояние компьютера до начала обработки прерывания. Если еще одно прерывание поступит в процессе обработки первого, то необходимо запомнить и эту информацию. Когда обслуживание второго прерывания завершится, компьютер должен вернуться к выполнению своей последней перед прерыванием работы, в данном случае к обслуживанию первого прерывания. Для обслуживания прерываний и для многих других операций, которые должны выполняться по принципу перехода к последней из отложенных операций, наиболее естественным средством для запоминания состояния компьютера будет стек. Организация стека в IBM/PC основана на выделении под стек определенной области оперативной памяти и использовании специального регистра сегмента стека, SS, указывающего адреса этой области памяти. Вершина стека указывается содержимым специального регистра, называемого указателем стека SP. Стек компьютера, в отличие от подпружиненной стопки тарелок, не перемещается физически, а остается на месте. Зато изменяется Данные помещаются в стек компьютера операцией PUSH, извлекаются операцией POP. Когда возникает прерывание, адрес текущей программы, хранящийся в регистрах CS и IP, помещается в стек, затем адрес процедуры обслуживания прерывания загружается в эти регистры и начинается выполнение данной процедуры. До ячейки, указываемой регистром SP (указателем стека), хранятся данные всей предыдущей работы, ожидающей своего возобновления. За указателем стека находится свободное пространство стека, которое может использоваться процедурой обслуживания прерывания, если ей требуется дополнительная рабочая область. Если возникнет еще одно прерывание, новая процедура обслуживания найдет для себя свободную область в стеке несколько дальше. Когда завершается очередная процедура, она освобождается. Сначала из стека извлекаются все рабочие значения, а затем извлекается адрес точки приостанова предыдущей процедуры, который загружается в регистры CS и IP. В процессе выполнения всех этих действий механизм работы со стеком автоматически поддерживает последовательность их выполнения. Стеки используются не только для обслуживания прерываний, но и при вызовах одних программ другими. Как при вызовах, так и при обслуживании прерываний принцип один: выполнявшаяся работа должна быть запомнена на время,так что бы можно было начать новую. Когда новая работа будет завершена, необходимо вернуться к выполнению старой в порядке, обратном тому в котором работа приостановлена. При вызове подпрограмм часто возникает необходимость передавать им |
|
|