Общие сведения
Общие сведения
Стеком называется любой произвольно выбранный блок оперативной памяти, работа с которым производится по принципу "последнее записанное — первое считанное" (LIFO - last in first out). Иначе говоря, выражение "стек" характеризует не тип памяти, а способ работы с ней.
В процессе выполнения задачи в регистре ss хранится код сегмента оперативной памяти, в котором расположена область стека, а текущий адрес (смещение) верхушки стека в этом сегменте хранится в регистре SP, который называется указателем стека. Разрядность регистров зависит от режима работы микропроцессора: в реальном режиме они содержат по 16 разрядов, а в защищенном режиме по 32 разряда.
Стек нарастает в сторону уменьшения адресов, поэтому при входе в задачу регистр зр содержит наибольший доступный адрес в области стека. При записи данных в стек адрес, хранящийся в зр, уменьшается, а при их выборке из стека — увеличивается.
Для записи и чтения данных в режиме LIFO предназначены команды PUSH и POP, которые неоднократно использовались в примерах. Команда push предварительно уменьшает содержимое регистра sp, а затем записывает операнд в вычисленный адрес. Команда pop, наоборот, сначала считывает операнд, а затем увеличивает содержимое зр. В обоих случаях адрес, хранящийся в sp, изменяется на размер операнда, который может составлять 2 или 4 байта. Один байт записать в стек нельзя, команда push преобразует его в слово.
Кроме команд push и pop в режиме LIFO со стеком работают команды вызова обычных (сан) и прерывающих (int) подпрограмм и команды возврата из
НИХ (ret И iret).
Для непосредственного доступа к области стека выделен специальный регистр ВР. Он может использоваться в обычных командах (пересылки, сложения и пр.) в тех случаях, когда один их операндов расположен в области стека. Если операнд находится в регистре bp, то при его обработке микропроцессор, по умолчанию, выбирает в качестве сегментного регистра ss, a не DS, как обычно. В случае необходимости можно явно указать любой другой сегментный регистр.