Двойное оплодотворение у цветковых растений: Оплодотворение - это процесс слияния мужской и женской половых клеток с образованием зиготы...
Таксономические единицы (категории) растений: Каждая система классификации состоит из определённых соподчиненных друг другу...
Топ:
Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов...
Установка замедленного коксования: Чем выше температура и ниже давление, тем место разрыва углеродной цепи всё больше смещается к её концу и значительно возрастает...
Интересное:
Национальное богатство страны и его составляющие: для оценки элементов национального богатства используются...
Подходы к решению темы фильма: Существует три основных типа исторического фильма, имеющих между собой много общего...
Уполаживание и террасирование склонов: Если глубина оврага более 5 м необходимо устройство берм. Варианты использования оврагов для градостроительных целей...
Дисциплины:
2022-10-04 | 31 |
5.00
из
|
Заказать работу |
|
|
1. Передача параметров через регистры МП
Например,
; процедура AX:= max {AX, BX}
max proc far
CMP AX, BX
JGE Max1
MOV AX, BX
Max1: RET
maxendp
…
; в основной процедуре
…
MOVAX, A; подготовка параметров
MOVBX, B; к вызову процедуры
CALLmax
MOVC, AX; сохранение результата
…
2. Передача параметров по ссылке означает передачу адреса (имени) ячейки памяти, соответствующей фактическому параметру.
Для этого можно использовать ячейку памяти или загрузить адрес перед вызовом процедуры в регистре AX, BP, SIили DI, а в процедуре использовать косвенную или базово-индексную адресацию.
Например,
LEABX, B
CALL …
3. Передача параметров через стек.
Передача параметров через регистры ограничена их небольшим количеством. Если параметров много, их передают через стек:
- основная программа записывает в стек фактические параметры (значение или адрес);
- в процедуре используются параметры, записанные в стек.
Например,
; вызов p(a1, а2,…, ak)
PUSHa1
…
PUSHak
CALLp
…
В процедуре можно пользоваться дополнительным указателем стека BP, но в начале процедуры следует сохранить значение BP, которое использовалось в вызывающей программе (процедуре).
Например,
Pproc
PUSHBP; сохранение BP
MOVBP, SP; настройка BP на вершину стека
…
Затем можно использовать базовую адресацию. Тогда для близкого вызова
[BP + 2] – адрес возврата, занесенный в стек автоматически,
[BP + 4] – адрес последнего параметра ak.
До выхода из процедуры следует восстановить BP командой
POPBP.
Затем очистить стек от передаваемых параметров, чтобы он не переполнялся, т.е. установить в SP значение на 2*k больше, чем было после вызова процедуры.
Для этого есть 2 варианта корректного возврата из процедуры:
а) корректировать SP в вызывающей программе
|
; конец процедуры | ; в вызывающей программе |
POP BP | CALL p |
RET | ADDSP, 2*k; коррекция SP |
P ENDP | … |
б) использовать команду возврата с восстановлением стека, имеющую вид
- для близкого вызова
RET {cnt}
где {cnt} – счетчик размером в слово (константное выражение)
Команда выполняет следующие действия:
IP:= StackSP:= SP + {cnt}
Тогда конец процедуры имеет вид:
…
POP BP
RET 2*k
p ENDP
- для дальней процедуры команда возврата имеет вид:
RET {cnt}
и выполняет следующие действия:
IP:= Stack CS:= Stack SP:= SP + {cnt}
Тогда в вызывающей программе дополнительные действия не требуются.
4. Проблема сохранения регистров при обращении к процедуре.
Чтобы процедура не испортила значения регистров, которые использовались в вызывающей программе, требуется в тексте процедуры перед использованием регистра сохранить его «старое» значение в стеке, а в конце процедуры все эти значения восстановить.
Например, если в процедуре используется регистр CH, то его можно сохранить только в CX (CH->CX).
Тогда:
PUSHCX; сохранение «старого» CX
MOVCH, 0; использование CH в процедуре
…
POPCX; восстановление «старого» CX
Таким образом, получимв общем виде для вызова близкой процедуры с параметрами, передаваемыми через регистры и через стек.
{имя проц.} proc
PUSHBP для обслуживания
movBP, SP стека
PUSH сохранение регистров,
используемых в процедуре
тело проц.
РОР... восстановление регистров
РОР ВР восстановление BP
RET {cnt}
{имя проц.} ENDP
|
|
Археология об основании Рима: Новые раскопки проясняют и такой острый дискуссионный вопрос, как дата самого возникновения Рима...
Особенности сооружения опор в сложных условиях: Сооружение ВЛ в районах с суровыми климатическими и тяжелыми геологическими условиями...
Биохимия спиртового брожения: Основу технологии получения пива составляет спиртовое брожение, - при котором сахар превращается...
Папиллярные узоры пальцев рук - маркер спортивных способностей: дерматоглифические признаки формируются на 3-5 месяце беременности, не изменяются в течение жизни...
© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!