Понадобилось как то создать функцию с переменным числом параметров то есть функцию которая имеет соглашение о вызовах - C (_cdecl) соответственно встал вопрос а как обрабатывать параметры в функции если изначально не известно сколько будет параметров в пакете платформы - masm32 есть файл справки - masm32.chm там в разделе - Full Listing есть страница - VARARG (Proc) в ней приводится вроде бы как бы пример Код (ASM): addup PROTO NEAR C, parmcount:WORD, parmvalues:VARARG invoke addup, 3, 5, 2, 4 addup PROC NEAR C, parmcount:WORD, parmvalues:VARARG xor ax, ax xor bx, bx mov cx, parmcount .REPEAT add ax, parmvalues[bx] inc bx inc bx .UNTILCXZ ret addup ENDP если вместо двух-байтовых параметров сделать четырёх-байтовые то я думаю это должно выглядеть так (если я правда не ошибаюсь) Код (ASM): addup PROTO NEAR C, parmcount:DWORD, parmvalues:VARARG invoke addup, 3, 5, 2, 4 addup PROC NEAR C, parmcount:DWORD, parmvalues:VARARG xor eax, eax xor ebx, ebx mov ecx, parmcount .REPEAT add eax, parmvalues[ebx] inc ebx inc ebx inc ebx inc ebx .UNTILCXZ ret addup ENDP на первый взгляд вроде как цикл - .REPEAT должен отработать столько раз сколько параметров прописано в безразмерном - parmvalues:VARARG то есть в данном примере четыре раза но ничего подобного не происходит может быть я где то допустил ошибку или этот пример не для этих целей тогда возникает вопрос а для чего в справке показан этот пример Кто в теме подскажите пожалуйста
Может быть я вас не совсем понял, но вы можете первым параметром передавать некую маску, почти как в printf, и по ней делить стек
А вообще, строка .UNTILCXZ как бы намекает, что количество параметров в данном примере находится в регистре cx. Туда попадает строкой mov ecx, paramcount. paramcount - первый аргумент функции, после него необходимо передавать остальные
Да, скорее всего вы правы. Я то думал что это какой то способ определения количества параметров записанных в - parmvalues:VARARG а на самом деле, это банальная подсказка прописанная в первом параметре, и цикл - .REPEAT отработает столько раз сколько банально прописано в первом параметре