Програмування на мові Асемблер
Останній більш характерний при роботі з високорівневими мовами програмування.
Як працює стек.(Принцип роботи стека).
Стек нагадує гору тарілок.Верхню тарілку легко взяти,але щоб добратися до тарілки,яка знаходиться знизу,потрібно зняти всі тарілки над нею.
Розміщення нової порції з вершини на вершину стека називається проштовхуванням в стек (push).
Видалення,порції з вершини стека, яке приводить до підняття на один рівень останніх порцій , на 3 виштовхуванням стека (pop) байта в стеку.При проштовхуванні в стек останьої порції вона перша і виштовхується,тому такий тип стека називається LIFO-стек (LAST- IN- First- Out останній- прийшов- перший- пішов).
На відміну від тарілок,значення в пам’яті ПК фізично не можуть пересуватися вниз або вверх.Тому для моделювання пересування значень в стеку необхідно використовувати регістри,які визначають базовий розмір стека і зміщення вершини стека,тобто місцеположення верхнього значення в стеку.
Сегментний регістр ss містить адресу початку стекового сегмента.В регістрі sp знаходиться зміщення вершини стека відносно цього сегмента.
Стековий сегмент.
0F00:0000
0002
0004
0006
ss:sp 30008
ss:sp 2000A
ss:sp 1000C
на рис.4.4 зображено,як розміщується в пам’яті невеликий сегмент із 12 байт.В регістрі ss знаходиться адрес початку стекового сегмента 0F00.Регістр sp вказує на зміщення відносно йієї початкової адреси в інтервалі від 0000 до 000А.Останній байт стека має зміщення 000В.Під елементи стека виділяють 2-байтові слова..
Щоб використовувати цей стек , в програмі досить декларувати STACK 12 , після чого асемблер компановщик DOS самі точно визначать , де розмістити стек в пам яті. Регістри ss i sp не потрібно ініціалізувати , це робить DOS при загрузці ас програми на рисунку 44 .SP1 вказує , куди при запуску програма вказує sp.Потрібно замітити , що логічний адрес ss:sp вка-
зуэ на байт , розміщений нижче останнього ,байта в стеку.
Потрібно пам ‘ятати , що основа стека розміщується в більш високих адресах пам ‘яті.В пам яті стек росте в напрямі зменшення адрес пам яті і зменшується в протилежному напрямку .
До бажаного результату приведем на рис.4.4 виконання слідуючих команд :