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

       

Составление функций с переменным списком параметров


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

p586

IDEAL

MODEL fLat

extrn ExitProcess:proc

DATASEG

x          dd      1

y          dd      2

z          dd      3

u         dd      4

res     dd      ?

CODESEG

begin:



push  [u] [z] [y] [x] 4;      ebp     0

call  max;                           eip      4

add    esp, 5*4;                    4          8 ; Постоянные

mov   [res], eax;               [x]      12

call ExitProcess;                 [y]       16; Переменные

proc     max;                                   [z]       20

push     ebp;                                    [u]      24

mov      ebp, esp;

push              ebx ecx edx

mov   eax, [ebp+12]; x

mov   ecx, [ebp+8]; n

dec    ecx

jecxz            @@m2

lea     ebx, [ebp+16]; & переменной части списка

@@for1:

mov   edx, [ebx]

cmp    eax, edx

jge     short @@m1

mov   eax, edx

@@m1:

add    ebx, 4

loop @@for1

@@m2:

pop    edx ecx ebx ebp

ret

endp

end     begin

Обратите внимание на:

1.     Формирование адреса начала переменной части списка;

2.     Порядок передачи параметров в стек – начинаем с переменных параметров, чтобы постоянные параметры были записаны с постоянным смещением в вершине стека;

3.     очистку стека, которую выполняет вызывающая программа, т.к. только она «знает», сколько передала параметров;



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