|
...
param2 dw ? ; 2-й параметр
param1 dw ? ; 1-й параметр
StackFrame ENDS ; конец описания шаблона
;
base EQU [bp] ; база шаблона
;
PROC FAR ; пример вызова far (далеко)
push bp ; сохранение старого BP
mov bp,sp ; указатель ссылки в стеке
... ...
mov ,base.param1 ; доступ к 1-му параметру
mov ,base.param2 ; доступ ко 2-му параметру
... |
программы архиваторы |
|
|
...
mov ,base.paramN ; доступ к последнему пар-ру
... ...
mov sp,bp ; восстановление SP
pop bp ; сброс сохраненного BP
ret (2N) ; возврат в вызывающую программу
ENDP
----------------------------------------------------------------
Листинги 2-1 и 2-4 различаются по трем важным аспектам. |
архиватор win rar |
|
|
Пер-
вое отличие заключается в порядке помещения параметров в стек. В
- 2-15 -
листинге 2-1 вызывающая программа размещает свои параметры в сте-
ке в обратном порядке (от последнего к первому), в то время как в
листинге 2-4 в прямом порядке (от первого к последнему). |
avast 4.7 |
|
| 
русско английский словарь, перевод с английского на русский, nod32, avast pro, avast edition, .
norton antivirus
|
Например, параметр инструкции PUSH
(push &&argn) для обработки непосредственных данных в качестве
параметров может быть замещен более общим макросом PushOp из гла-
вы 1. Одним из ограничений текущей версии является то, что инс-
трукция mov [bp+4],return_value в макросе @RetVal не может возв-
ращать переменные памяти в стек, потому что семейство микропро-
цессоров 8086 не поддерживает инструкцию пересылки память-па-
мять. Для распознавания пересылки память-память и генерации пере-
дачи через непосредственный регистр этот макрос должен быть
переделан.
Кроме того, необходимо иметь в виду, что макросы, представ-
ленные в листингах 2-2 и 2-3, реализуют вызывающую программу, ко-
торая несовместима ни с одним известным языком высокого уровня.
Характерно, что эти процедуры в качестве дополнительного аргумен-
- 2-14 -
та передают количество аргументов для вызываемой процедуры и
возвращают значения для вызывающей процедуры непосредственно в
стек.
MASM обеспечивает для вызываемой программы некоторые средс-
тва, упрощающие доступ к данным в стеке. Благодаря описанию
structure (структура), которая описывает данные в стеке и вырав-
нивает указатель базы (BP) на начало структуры, к данным в стеке
можно обращаться по символическим именам. Это помогает предотвра-
щать фатальные ошибки кодирования, которые являются результатом
указания неправильного смещения. Листинг 2-4 демонстрирует дирек-
тиву MASM STRUC в этом контексте.
Листинг 2-4. Символический доступ к содержимому стека
по директиве STRUC
-----------------------------------------------------------------
; Вызывающая процедура
... ...
push ; пересылка 1-го аргумента
push ; пересылка 2-го аргумента
... ...
push ; пересылка последнего аргумента
call ; вызов процедуры
... ...
; Вызываемая процедура
StackFrame STRUC ; описание шаблона стека
dw ? ; сохраненный BP
dв ? ; адрес возврата (используйте "dw"
; для NEAR (близкий))
paramN dw ? ; последний параметр
...
|
|
|