Головна Головна -> Реферати українською -> Інформатика, комп'ютери, програмування -> Стек

Стек

Назва:
Стек
Тип:
Реферат
Мова:
Українська
Розмiр:
2,92 KB
Завантажень:
181
Оцінка:
 
поточна оцінка 5.0


Скачати цю роботу безкоштовно
Пролистати роботу: 1  2 
Стек   
Стек - організована спеціальним чином ділянка пам'яті, яка використовується для тимчасового зберігання змінних, передачі параметрів для підпрограм, які викликаються, і збереження адреси повернення при виклику процедур та переривань. Найлегше уявити стек у вигляді стосу аркушів паперу (це одне із значень слова stack в англійській мові) - ви можете класти і забирати аркуші лише з вершини цього стосу. Інакше стек називають структурою LIFO (Last In First Out). Тому, якщо записати в стек числа 1,2,3, то при зчитуванні вони будуть у зворотньому порядку - 3,2,1. Стек розташовується в сегменті пам'яті, який описується SS, і поточне зміщення вершини стека відображене в регістрі ESP(вказівник стеку), причому під час запису значення цього зміщення зменшується, тобто він "росте вниз" від максимально можливої адреси. Таке розміщення стека "вверх ногами" може бути необхідним, наприклад, в безсегментній моделі пам'яті, коли всі сегменти, включаючи сегменти стеку та коду, займають одну й ту ж область - всю пам'ять цілком. Тоді програма виконується в нижній області пам'яті, в області малих адрес, і EIP(вказівник інструкції - 16-бітна форма IP) росте, а стек розташовується в верхній області пам'яті, ESP зменшується.
   При виклику підпрограми параметри в більшості випадків поміщаються в стек, а в EBP(вказівник бази) записують поточне значення ESP. Якщо підпрограма використовує стек для зберігання локальних змінних, ESP зміниться, але EBP можна буде використовувати для того, щоб зчитувати значення параметрів напряму зі стеку (їх зміщення запишуться як EBP + № параметру).
Типовий приклад програми, що працює зі стеком
Команди для роботи зі стеком   
Для роботи зі стеком є дві основні команди PUSH i POP.
PUSH      джерело
   
Поміщає вміст джерела в стек. Джерело може бути регістр, сегментний регістр, безпосередній операнд або змінна. Фактично ця команда зменшує ESP на розмір джерела в байтах (2 або 4) і копіює вміст джерела в пам'ять за адресою SS:[ESP]. Команда PUSH майже завжди використовується в парі з POP (зчитати дані зі стеку). Тому, щоб скопіювати вміст одного сегментного регістру в інший (що не можна виконати однією командою mov), можна використати таку послідовність команд:
push cs
pop ds ;тепер ds вказує на той же сегмент, що і cs.   
Інший варіант застосування PUSH/POP - тимчасове зберігання змінних, наприклад,
push eax        ;зберігає поточне значення eax.
...          ;тут розташовуються які-небудь команди, які використовують eax.
pop eax        ;відновлення старого значення eax.
Починаючи з процесора 80286 команда PUSH ESP (або SP) поміщає в стек значення ESP до того, як вона його зменшить, а на 8086 регістр SP розташовувся в стеку вже зменшеним на 2.
POP      прийомник
   
Поміщає в прийомник слово або подвійне слово, яке знаходиться на вершині стеку, збільшуючи ESP на 2 або 4 відповідно. РОР виконує дію, яка повністю протилежна PUSH. Прийомником може бути регістр загального призначення, сегментний регістр крім CS (щоб завантажити CS зі стеку, слід скористатися командою RET), або змінна. Якщо в ролі прийомника виступає операнд, який використовує ESP для непрямої адресації, команда РОР вираховує адресу операнда уже після того, як вона збільшила ESP.
Приклад програми, що ілюструє роботу команд PUSH i POP
Передача параметрів через стек
   
Можна розділити на (C, Pascal, Fortran, BASIC) і непроцедурні (LISP, FORTH, PROLOG), де процедури - блоки коду програм, які мають одну точку входу і одну точку виходу і які повертають керування на наступну команду після команди передачі керування процедурі. однаково легко можна використовувати як процедурну мову і як непроцедурну.
   Процедури можуть отримувати або не отримувати параметри із процедури, яка їх викликає, і можуть повертати або не повертати результат (процедури, які щось повертають, називаються функціями в Паскалі, але Асемблер не робить якоїсь різниці між ними).

Завантажити цю роботу безкоштовно
Пролистати роботу: 1  2 



Реферат на тему: Стек

BR.com.ua © 1999-2017 | Реклама на сайті | Умови використання | Зворотній зв'язок