Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов (88‰)...
Своеобразие русской архитектуры: Основной материал – дерево – быстрота постройки, но недолговечность и необходимость деления...
Топ:
Методика измерений сопротивления растеканию тока анодного заземления: Анодный заземлитель (анод) – проводник, погруженный в электролитическую среду (грунт, раствор электролита) и подключенный к положительному...
Комплексной системы оценки состояния охраны труда на производственном объекте (КСОТ-П): Цели и задачи Комплексной системы оценки состояния охраны труда и определению факторов рисков по охране труда...
Отражение на счетах бухгалтерского учета процесса приобретения: Процесс заготовления представляет систему экономических событий, включающих приобретение организацией у поставщиков сырья...
Интересное:
Берегоукрепление оползневых склонов: На прибрежных склонах основной причиной развития оползневых процессов является подмыв водами рек естественных склонов...
Аура как энергетическое поле: многослойную ауру человека можно представить себе подобным...
Уполаживание и террасирование склонов: Если глубина оврага более 5 м необходимо устройство берм. Варианты использования оврагов для градостроительных целей...
Дисциплины:
2022-10-04 | 32 |
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 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!