Двойное оплодотворение у цветковых растений: Оплодотворение - это процесс слияния мужской и женской половых клеток с образованием зиготы...
Адаптации растений и животных к жизни в горах: Большое значение для жизни организмов в горах имеют степень расчленения, крутизна и экспозиционные различия склонов...
Топ:
Выпускная квалификационная работа: Основная часть ВКР, как правило, состоит из двух-трех глав, каждая из которых, в свою очередь...
Методика измерений сопротивления растеканию тока анодного заземления: Анодный заземлитель (анод) – проводник, погруженный в электролитическую среду (грунт, раствор электролита) и подключенный к положительному...
История развития методов оптимизации: теорема Куна-Таккера, метод Лагранжа, роль выпуклости в оптимизации...
Интересное:
Наиболее распространенные виды рака: Раковая опухоль — это самостоятельное новообразование, которое может возникнуть и от повышенного давления...
Национальное богатство страны и его составляющие: для оценки элементов национального богатства используются...
Распространение рака на другие отдаленные от желудка органы: Характерных симптомов рака желудка не существует. Выраженные симптомы появляются, когда опухоль...
Дисциплины:
2022-10-04 | 28 |
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
|
|
Двойное оплодотворение у цветковых растений: Оплодотворение - это процесс слияния мужской и женской половых клеток с образованием зиготы...
Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ - конструкции, предназначенные для поддерживания проводов на необходимой высоте над землей, водой...
Археология об основании Рима: Новые раскопки проясняют и такой острый дискуссионный вопрос, как дата самого возникновения Рима...
История создания датчика движения: Первый прибор для обнаружения движения был изобретен немецким физиком Генрихом Герцем...
© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!