Локальные данные процедуры




Если вызываемой подпрограмме необходимы ячейки памяти для хранения своих внутренних данных, то целесообразно разместить их в области стека, занимая память, таким образом, только на время работы подпрограммы. Для того, чтобы «захватить» нужное количество слов памяти под локальные переменные, указатель стека перемещается выше (для процессора Intel это означает: в сторону меньших адресов):

 
 

sub sp,4; захват четырех байт в области стека

Локальные переменные доступны подпрограмме по адресам [bp-2], [bp-4] и т.д.:

mov [bp-2],bx; запись значения в локальную переменную

После окончания действий в подпрограмме перед возвратом управления необходимо восстановить стек:

...;

mov sp,bp; возврат «захваченной» памяти

pop bp; восстановление старого значения BP

 
 

ret; команда возврата

Поскольку аргументы уже не нужны, то можно очистить стек:

 
 

add sp,4; освобождение стека от двух аргументов

Очистку стека можно «поручить» подпрограмме, для этого используется команда возврата с параметром:

ret 4; возврат и очистка стека от двух аргументов

Понятно, что в этом случае вызывающая программа не должна очищать стек от аргументов.

 

Задание 1. Выполнить вызовы процедуры, которая выводит тексты, символы или числа в соответствии с вариантом. Параметры передаются через регистр. Процедура одна, вызовов несколько.

Задание 2. Повторить задание 1 с передачей параметров через память.

Задание 3. Повторить задание 1 с передачей параметров через стек.

 

 

Варианты индивидуальных заданий

№/№ вар. Вывести Кол. вызовов Тип процедуры Кол. параметров Передача параметров через
1.1 символы   ближняя   регистр
1.2 числа   дальняя   память
1.3 строки   ближняя   стек
2.1 символы   дальняя   регистр
2.2 числа   ближняя   память
2.3 строки   дальняя   стек
3.1 символы   ближняя   регистр
3.2 числа   дальняя   память
3.3 строки   ближняя   стек
4.1 символы   дальняя   регистр
4.2 числа   ближняя   память
4.3 строки   дальняя   стек
5.1 символы   дальняя   регистр
5.2 числа   ближняя   память
5.3 строки   дальняя   стек
6.1 символы   дальняя   регистр
6.2 числа   ближняя   память
6.3 строки   дальняя   стек
7.1 символы   дальняя   регистр
7.2 числа   ближняя   память
7.3 строки   дальняя   стек
8.1 символы   дальняя   регистр
8.2 числа   ближняя   память
8.3 строки   дальняя   стек
9.1 символы   дальняя   регистр
9.2 числа   ближняя   память
9.3 строки   дальняя   стек
10.1 символы   дальняя   регистр
10.2 числа   ближняя   память
10.3 строки   дальняя   стек
11.1 символы   дальняя   регистр
11.2 числа   ближняя   память
11.3 строки   дальняя   стек
12.1 символы   дальняя   регистр
12.2 числа   ближняя   память
12.3 строки   дальняя   стек
13.1 символы   дальняя   регистр
13.2 числа   ближняя   память
13.3 строки   дальняя   стек
14.1 символы   дальняя   регистр
14.2 числа   ближняя   память
14.3 строки   дальняя   стек
15.1 символы   дальняя   регистр
15.2 числа   ближняя   память
15.3 строки   дальняя   стек
16.1 символы   дальняя   регистр
16.2 числа   ближняя   память
16.3 строки   дальняя   стек
17.1 символы   дальняя   регистр
17.2 числа   ближняя   память
17.3 строки   дальняя   стек
18.1 символы   дальняя   регистр
18.2 числа   ближняя   память
18.3 строки   дальняя   стек

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-04-27 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: