Передача параметров через общую область памяти
Т.к. в одномодульной программе вызывающая программа и функция расположены в одном файле, функция может непосредственно использовать переменные программы.
Пример.
Составить функцию для обмена местами значения двух переменных.
ideal
P486
MODEL flat
extrn ExitProcess:proc
DATASEG
x dd 5
y dd 3
CODESEG
begin:
call swap
call ExitProcess
proc swap
push eax ebx
mov eax, [x]
mov ebx, [y]
mov [y], eax
mov [x], ebx
pop ebx eax
ret
endp swap
end begin
Недостатки использования переменных из сегмента данных:
1. Функция должна использоваться только для переменных с заданными именами, использовать ее для других переменных нельзя.
2. Этот способ не применим для многомодульных программ
Общей областью можно считать стек, в который помещаются параметры. Рассмотрим особенности передачи параметров через стек.
При передаче параметров через стек возникает проблема доступа к ним. Из всех режимов адресации выберем режим, связанный с адресацией в стеке. В этом режиме в качестве базисного регистра используется регистр EBP, именно этот регистр будем применять для задания элемента стека. С другой стороны, указатель стека, т.е. адрес последнего занесенного элемента в стек расположен в регистре ESP. Чтобы иметь доступ к данным стека используются команды:
push ebp ; сохранение EBP
mov ebp, esp ; EBP=ESP
Эти команды должны присутствовать в любой функции, в кото-
рой параметры передаются через стек.