logo
МПТ_L_к

5.13. Стек та його використовування

Крім вказаних пристроїв зовнішньої та внутрішньої пам’яті, для яких характерне адресне звертання, в МП можлива робота з магазинною пам’яттю – стеком, при звертанні до якого не потрібна адреса. Стек використовується для виконання режиму обробки зупинок в програмах, коли потрібно негайно виконати якусь іншу частину програми, наприклад, звернутись до пристроїв вводу і отримати інформацію про вхідні дані. Тобто, включення стеку до складу МП диктується необхідністю виконання стандартних процедур вводу-виводу програмним шляхом і необхідністю обробки даних в реальному масштабі часу, що потребує постійної взаємодії системи керування і зовнішніх пристроїв через систему зупинок.

В МП використовуються 2 види стеку: вбудований та автономний.

Якщо стек виноситься із МП (автономний), то в останньому передбачено регістр – покажчик стеку ПС (SP). Відмінності автономного стеку полягають в тому, що в якості матриці, яка зберігає інформацію, використовується зовнішня по відношенню до МП оперативна пам’ять (ОЗП). Безпосередньо на кристалі розміщується тільки покажчик стеку (ПС) з розрядністю, рівній розрядності шини адреси. Тому глибина стеку може дорівнювати адресуємій ємності пам’яті (як правило до 64К, до якої можна звертатись за допомогою 16-розрядного регістра показника стеку ПС), який вміщує адресу плаваючої верхівки стеку.. Те, що міститься в покажчику стеку, зменшується (при запису) або збільшується (при читанні) на 1 при кожному звертанні до нього. Операції зі стеком виконуються в відповідності з принципом його роботи: останнім записаний – першим прочитаний (LIFOLast-- In First - Out). Використовуються тільки 2 операції зі стеком: запис даних в стек (PUSH) та читання даних із стеку (POP). Операція запису в стек виконується для занесення в відведену під стек пам’ять 8 біт даних із пари регістрів РЗП. В момент запису у стек командою PUSH, по якій повинен бути виконаним запис, адреса ОЗУ, , що задається покажчиком стеку, спочатку зменшується на 1, а тільки потім відбувається запис числа у комірку пам’яті, тому 8-м біт зберігаються по адресі на 1 меншій, ніж значення ПС. Наприклад, ПС містить в собі адресу 278ЕН (верхівкою стеку); регістр В вміщує число – С8Н; регістр С21Н, а в ОЗУ скрізь записані значення FF. Виконуємо операцію PUSH B, а потім PUSH С і дані будуть записані в ОЗУ таким чином:

Вмістиме регістрів і ОЗУ до операції Вмістиме ОЗУ і регістрів після операції

.......................................... Адреса ОЗУ ............................................ .....................................................

FF 278В FF

C: 21 FF 278C 21 C: 21

B: C8 FF 278D C8 B: C8

SP: 278E FF 278E FF SP: 278E

Операції читання зі стеку (н., POP С , POP В ) виконуються у зворотному напрямі. За допомогою них відбувається виймання із відведеної під стек пам’яті 8 біт даних та їх повернення у пару регістрів. При виконанні операції POP С спочатку відбувається читання інформації із комірки п’ямяті, на яку показує показник стеку (ПС), а після читання – вмістиме ПС збільшується на 1.

Перед виконанням стекових операцій в показник стеку необхідно занести занести необхідне значення адреси верхівки стеку за допомогою команди, наприклад, для КР1816ВЕ31 - LXI SP, 278EН.

Як варіант розглянемо схему побудови магазинної памяті в самому МП

Рис. 5.10. Організація вбудованої магазинної пам’яті мікропроцесора

тобто, вбудований стек, який повністю розміщується на кристалі МП, по схемі рис.5.10,а. Ємність -глибина стеку не перевищує 16 – 32 слова. Вбудований стек мають МП, наприклад, фірми Intel. Вибірка однієї із комірок матриці пам’яті відбувається через дешифратор (ДшА) адресу по адресу, який знаходиться в реверсивному лічильнику адреси (УС), який є показником стеку (ПС). Початкове значення адреси надходить в ПС на вхід А у паралельному коді командою попереднього установлення. В процесі роботи стан ПС при кожному запису зменшується на 1, а при читанні збільшується на 1. Керування режимами запису та читання виконує місцевий блок керування (МБК).

При запису інформації вхідне слово Х надходить на регістр слів (РС) та записується в матрицю по адресі, яка в даний час встановлена в показнику стеку (УС, ПС). З невеликою витримкою після запису інформації те, що міститься в показнику стеку ПС зменшується на 1 і матриця підготовлюється для наступного запису (рис.10,б). Таким чином, показник стеку (УС) постійно показує на вільну комірку пам’яті, в яку необхідно записати наступне вхідне слово.

При читання із стеку в МБК спочатку виробляється сигнал, який збільшує те, що міститься в показнику стеку на 1, а потім – сигнал читання інформації із матриці пам’яті (рис. 10,в). При цьому на вихідних ланцюгах стека з’явиться слово Х, яке було записано останнім. Після послідовного запису в стек слів Х1, Х2, Х3 при першому читанні буде вибране із стеку число Х3, при другому – Х2 та при третьому – Х1.

Так як в коді команди запису в стек та читання із стеку не має адресного поля, це зменшує розрядність цих команд та підвищує швидкодію їх виконання, а також при частих переходах із запису до читання приводить до економії оперативної пам’яті МП. Але використання стеку потребує правильної послідовної організації роботи з ним. Використовувати стек краще всього в випадках коли ця послідовність фіксована.

Стек використовується: по-перше, при звертанні до підпрограм, яке виконується командою виклику підпрограми (CALL). При цьому, спочатку вмістиме лічильника команд (тобто, адреса наступної команди) та стан внутрішніх регістрів записуються в стек, де запам’ятовуються, а потім виконується підпрограма, яка викликана командою CALL . Останньою командою, яка повинна виконатись в викликаній підпрограмі, повинна бути команда RET (вихід із підпрограми), по якій із стекової пам’яті в лічильник команд записується зафіксована раніше адреса та стан регістрів, і таким чином відновлюється виконання команд програми. Це легко реалізується , якщо розміщувати вмістиме пар регістрів в стек до початку виконання підпрограми, а потім виконати читання із стеку та відновити їх стан. Але команди читання POP повинні виконуватись в інверсному порядку. Наприклад;

PUSH B PUSH D PUSH H PUSH PSW

( Тіло програми) (Букви В, D, Н – визначають пари регістрів)

POP PSW POP H POP D POP B;

по-друге - при роботі МП в масштабі реального часу, коли є необхідною постійна взаємодія з об’єктом керування, яка визиває безперервні переривання, які пов’язані з необхідністю тимчасового зберігання внутрішнього стану МП.