Составление функций с переменным списком параметров
Пример. Составить главную программу и функцию для вычисления максимального числа для одного, двух и более чисел.
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. очистку стека, которую выполняет вызывающая программа, т.к. только она «знает», сколько передала параметров;