Студопедия

КАТЕГОРИИ:

АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника


Опишіть нестандартні прийоми передачі параметрів до дочірньої програми




Стек також є зручним місцем для передачі інформації в
підпрограми і з них. Зазвичай програма передає параметри
підпрограму, поміщаючи їх у регістри, проте в деяких випадках
число параметрів перевищує розміри регістрового простору. В
таких випадках програииа може помістити параметри в стек до
виконання команди CALL (виклик підпрограми). Як ми побачимо в
гл.10, стек є єдиним засобом передачі параметрів у
підпрограми, написані на мові асемблера, з мов високого
рівня Бейсік і Фортран.

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

MOV BP, SP

яка загружвет регістр BP поточним значенням вказівника стека.
Оскільки регістр BP - адресний регістр, підпрограма може
використовувати його при адресних обчисленнях, а це означає, що всі
параметри доступні як зміщення відносно регістру BP.

Конструктори мікропроцесора 8088 виразно пам'ятали про
описаному вище метод передачі параметрів, так як при доступі до
даними регістр BP використовує за замовчуванням регістр стека
сегмента SS як сегментного регістра. У всіх інших
нормальних випадках доступу до даних використовує мікропроцесор
регістр DS. Оскільки стек знаходиться в стековому сегменті,
реєстрову пару SS:BP дуже природно використовувати для адресації
інформації в стеку.

На Фіг. 4.7 зображений приклад, що демонструє використання
регістр BP для доступу до параметрів, переданим через стек. У цьому
прикладі головна програма перед виконанням команди CALL помістила
чотири слова в стек. Підпрограма завантажує в BP покажчик даних
стеку. Зауважимо, що зміщення, що використовуються для доступу до даних
стеці, враховують той факт, що адреса повернення також був записаний в
стек в результаті виконання команди CALL.

У підпрограмі цього прикладу в вершині стека лежить адреса
повернення, і регістр BP містить зсув цієї клітинки. Двома байтами
нижче в стеку лежить поміщений останнім параметр, регістр DX;
далі, через двобайтові інтервали - регістри CX, BX і AX. Таким
чином, правильною адресою для читання параметра, що міститься в
регістрі DX, [BP+2], а інші адреси слідують через
двобайтові інтервали. В даному прикладі значення, що знаходилося в
регістрі DX, потрапляє в регістр AX, BX CX і т.д.

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

Багатьом подпрограммам протягом їх виконання також необхідна
локальна пам'ять, і підпрограми можуть динамічно розташувати її в
стеку. Всякий раз, коли програма викликається, вона може відняти
розмір цієї області пам'яті з вмісту покажчика стека. Так як
стек росте в напрямку до молодших адресах, віднімання числа з
регістра SP ідентично поміщення в стек такої ж кількості даних
- за винятком тих даних, які не ініціалізується. Після
цього підпрограма може використовувати регістр BP для адресації
такий області пам'яті. Коли настає момент повернення, підпрограма
може додати відповідне значення до покажчика стека, і тим
самим відновити його колишнє значення. Динамічна організація
даних означає, що програма використовує область пам'яті лише
тоді, коли вона необхідна для роботи, і не займає цю пам'ять
все інше час, тому програму можна виконувати на машині .

 


Поделиться:

Дата добавления: 2015-04-21; просмотров: 104; Мы поможем в написании вашей работы!; Нарушение авторских прав





lektsii.com - Лекции.Ком - 2014-2024 год. (0.005 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав
Главная страница Случайная страница Контакты