Директива ARG
Используется для задания имен и типов формальных параметров. Параметры записываются, начиная с вершины стека. Общий вид директивы:
ARG параметр1, параметр2, … [= переменная]
Параметры задаются в виде:
Имя:Тип[:Количество]
В качестве имени используется любое уникальное имя.
Тип может быть стандартным и нестандартным. В качестве стандартных используются типы: BYTE, WORD, DWORD, PWORD, FWORD, QWORD, TBYTE. В качестве нестандартных можно задавать типы структур и объединений.
Количество задается константным выражением и определяет количество элементов данного типа. Используется, если передается массив, а не его адрес. По умолчанию Количество
= 1. Переменной, заданной в директиве присваивается размер области параметров в стеке. Это значение вычисляется компилятором и используется в команде RET.
Пример. Составить функцию для вычисления значения Y=A*X+B для данных длиной 32 бита. Результат длиной 4 байта
; Главная программа
ideal
p686
model flat
extrn ExitProcess:proc
extrn Fun:proc
dataseg
a dd 3
x dd 5
b dd 7
y dd ?
codeseg
begin:
push [a] [x] [b]
call Fun
mov [y], eax
call ExitProcess
end begin
; Функция
ideal
p686
model flat
codeseg
proc Fun
public Fun
arg b:dword, x:dword, a:dword = z
push ebp
mov ebp, esp
mov eax, [a]
mul [x]
add eax, [b]
pop ebp
ret z
endp
end