Семя – орган полового размножения и расселения растений: наружи у семян имеется плотный покров – кожура...
Таксономические единицы (категории) растений: Каждая система классификации состоит из определённых соподчиненных друг другу...
Топ:
Эволюция кровеносной системы позвоночных животных: Биологическая эволюция – необратимый процесс исторического развития живой природы...
Методика измерений сопротивления растеканию тока анодного заземления: Анодный заземлитель (анод) – проводник, погруженный в электролитическую среду (грунт, раствор электролита) и подключенный к положительному...
Установка замедленного коксования: Чем выше температура и ниже давление, тем место разрыва углеродной цепи всё больше смещается к её концу и значительно возрастает...
Интересное:
Принципы управления денежными потоками: одним из методов контроля за состоянием денежной наличности является...
Инженерная защита территорий, зданий и сооружений от опасных геологических процессов: Изучение оползневых явлений, оценка устойчивости склонов и проектирование противооползневых сооружений — актуальнейшие задачи, стоящие перед отечественными...
Уполаживание и террасирование склонов: Если глубина оврага более 5 м необходимо устройство берм. Варианты использования оврагов для градостроительных целей...
Дисциплины:
|
из
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
|
|
|
Наброски и зарисовки растений, плодов, цветов: Освоить конструктивное построение структуры дерева через зарисовки отдельных деревьев, группы деревьев...
Двойное оплодотворение у цветковых растений: Оплодотворение - это процесс слияния мужской и женской половых клеток с образованием зиготы...
Механическое удерживание земляных масс: Механическое удерживание земляных масс на склоне обеспечивают контрфорсными сооружениями различных конструкций...
Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого...
© cyberpediasu.com 2017-2026 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!