КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Способ 3, самый частый. Через стек
ИДЕЯ: 1. ПЕРЕД ВЫЗОВОМ 2. Вызвать процедуру; 3. Запомнить место в стеке через регистр BP (Base Pointer); 4. Внутри процедуры использовать параметры, 5. Перед выходом восстановить 6. Выйти из процедуры 7. Очистить стек.
ОГРАНИЧЕНИЕ: Заносить в стек (PUSH) и читать из него (POP) можно ТОЛЬКО МАШИННЫЕ СЛОВА (по 2 байта каждое).
ВОЗВРАТ ЗНАЧЕНИЙ ЧЕРЕЗ СТЕК
Это состояние стека сразу после возврата из процедуры. ГДЕ ТУТ МОЖЕТ БЫТЬ МЕСТО ДЛЯ ЧИСЛА, КОТОРОЕ ПРОЦЕДУРА ОСТАВИЛА В СТЕКЕ ДЛЯ ВЫЗЫВАЮЩЕЙ ПРОГРАММЫ?
ПРОЦЕДУРА обращается к этому полю как [BP + 8] ВЫЗЫВАЮЩАЯ ПРОГРАММА обращается к этому полю по адресу SS:SP То есть может прочесть его POP reg / mem
ПОРЯДОК ЗАНЕСЕНИЯ ПАРАМЕТРОВ В СТЕК Procedure AnyProc(x:integer; y:word; z: Pstring); Begin … … … end; Чем отличается А от Б? X ßà [BP+4] или X ßà [BP+ 8 ]? Компилятор должен ЗАРАНЕЕ знать порядок передачи параметров!
КТО ЧИСТИТ СТЕК? Вариант 1й чистки стека. Это случай, когда стек чистит САМА ВЫЗВАННАЯ ПРОЦЕДУРА.
Вариант чистки стека №2. стек чистит ВЫЗВАЮЩАЯ ПРОЦЕДУРА.
ПАРАМЕТР «ЯЗЫК» ДЛЯ ВЫЗОВА ПРОЦЕДУР .MODEL SMALL, «язык»
ЛОКАЛЬНЫЕ ПЕРЕМЕННЫЕ В ПРОЦЕДУРАХ Это место создается в прологе: ... PUSH BP MOV BP, SP SUB SP, 4; по 2 байта на переменную, ; SP смещается с «1» на «2»
Но тогда ЭПИлог становится такой: ... MOV SP, BP; SP смещается с «2» на «1» POP BP RET
Дата добавления: 2014-01-07; Просмотров: 334; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |