Программирование на Ассемблере


Передача параметров через общую область памяти


Т.к. в одномодульной программе  вызывающая программа и функция  расположены в одном файле,  функция может непосредственно использовать переменные программы.

Пример.

Составить функцию для обмена местами значения двух переменных.

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

     Эти команды должны присутствовать в любой функции, в кото-

рой параметры передаются через стек.



Содержание раздела