Мегаобучалка Главная | О нас | Обратная связь


Call PP ; обращение к ПП



2018-07-06 421 Обсуждений (0)
Call PP ; обращение к ПП 0.00 из 5.00 0 оценок




6. Передача параметров отложенным вычислением. Как и в случае передачи параметров по имени, процедура получает адрес ПП, вычисляющей значение параметра. Этот механизм чаще используется в системах искусственного интеллекта и в ОС.

Использование локальных параметров:

Локальные параметры имеют смысл только для ПП. Если локальных параметров немного, то их размещают в регистрах, но если их много, то возможны различные варианты: им можно отвести место в сегменте данных, но тогда большую часть времени эта область памяти не будет использоваться.

Лучший способ – разместить локальные параметры в стеке на время работы ПП, а перед выходом из ПП их удалить. Для этого после входных действий в процедуре нужно уменьшить значение указателя на вершину стека SP на количество байтов, необходимых для хранения локальных величин и затем записывать их в стек и извлекать их можно с помощью выражений вида:

[BP – n], где n определяет смещение локального параметра относительно значения BP.

Например, если предполагается, что ПП будет использовать 3 локальные параметра размером в слово, то стек графически можно представить так:

При выходе из процедуры перед выполнением завершающих действий нужно возвратить регистру SP его значение.

Если в стеке хранятся и фактические и локальные параметры, то начало процедуры и ее завершение должно выглядеть следующим образом:

PP proc

PushBP ; сохранить старое значение BP

Mov BP, SP ; (SP) в BP

SubSP, k1 ; отвести в стеке k1 байтов под лок пар - ы

PushAX ; сохранить в стеке регистры,

-------------- ; используемые в ПП

<тело процедуры>

------------- ; восстановить регистры

popAX ;

MovSP, BP ; восстановить SP, т.е. освободить место

; в стеке от локальных параметров

PopBP ; восстановить BP, равным до обращения к ПП

Retk2 ; очистка стека от фактических

; параметров и возврат в вызывающую программу

PP endp ; конец ПП

Подсчет количества различных символов в заданной строке

Строка задана как массив символов. Начальный адрес ее передадимв ПП через регистр BX, длину строки через CX, а результат - черезAX. Создадим процедуру, в которой выделяется 256-ыйлокальный массив L по количеству возможных символов. K-омуэлементу этого массива будем присваивать единицу, если символ,цифровой код которого равен K, в заданной строке существует.Затем подсчитаем количество единиц в этом массиве. Вначале весьмассив обнуляется. К первому элементу этого массива можнообратиться так: L1 = [BP – 256]к к-ому

Lk = [BP – 256 + k].

Работая со строками, эту задачу можно решить проще.

Count_sproc ;

; входныедействия

Push BP

Mov BP, SP

Sub SP, 256

Push BX

Push CX

Push SI

;Обнуление локального массива

movAX, CX; сохранение длины исходной строки

movCX, 256; возможное количество символов

movSI, 0; индекс элемента массива

m1: mov byte ptr [BP – 256 + SI], 0 ;

IncSI

Loopm1

;просмотр заданной строки и запись 1 в локальный массив

movCX, AX; длину строки в CX

MovAX, 0

m2: movAL, [BX]; код очередного символа в AL

movSI, AX ;пересылаем его в SI

movbyteptr [BP – 256 + SI], 1; пересылаем 1 в к –й элемент массива

IncBX

loopm2 ;

; подсчет количества 1 в локальном массиве

MovAX, 0 ; результат будет в AX

movCX, 256 ;количество повторений цикла

movSI, 0 ;индекс массива в SI

m3: cmp byte ptr [BP – 256 + SI], 1

Jne m4

Inc AX

M4: inc SI

Loopm3

; выходные действия

popSI; восстановление

popCX; регистров

popBX ;

movSP, BP; освобождение стека от локальных параметров

popBP; восстановить старое BP

Ret

Count_sendp

Рекурсия в ассемблере:

Основные трудности, возникающие при реализации рекурсии –это опасность «зацикливания » рекурсии и использованиепараметров. Зацикливания не произойдет, если в процедуре естьрекурсивная и не рекурсивная ветви и при выполнении некоторогоусловия вычислительный процесс пойдет по не рекурсивной ветви.Рекурсивное обращение ПП можно представить, еслипредположить, что при каждом обращении создается копия ПП иадреса возврата сохраняются в стеке. А структура стека позволяетизвлекать их в последовательности, обратной поступлению. Также решается и проблема с параметрами. В рекурсивнуюпроцедуру нельзя передавать параметры через ячейки памяти всегменте данных, а если такая необходимость возникает, то привходе в ПП их необходимо сохранять в стеке, а при выходе из неевосстанавливать. Это значит, что лучше сразу параметры передавать через стек.



2018-07-06 421 Обсуждений (0)
Call PP ; обращение к ПП 0.00 из 5.00 0 оценок









Обсуждение в статье: Call PP ; обращение к ПП

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:
Почему двоичная система счисления так распространена?: Каждая цифра должна быть как-то представлена на физическом носителе...
Почему человек чувствует себя несчастным?: Для начала определим, что такое несчастье. Несчастьем мы будем считать психологическое состояние...
Как выбрать специалиста по управлению гостиницей: Понятно, что управление гостиницей невозможно без специальных знаний. Соответственно, важна квалификация...
Как вы ведете себя при стрессе?: Вы можете самостоятельно управлять стрессом! Каждый из нас имеет право и возможность уменьшить его воздействие на нас...



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (421)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.006 сек.)