Function MASM如何进行所需的函数调用
我想知道,如何做到以下几点。 我有一个数组,其中我必须求和数字(简单) 但问题是,我必须对它进行函数调用, get是通过特定寄存器的参数。我如何实现这一点? 在这种情况下,函数需要通过ESI获取数组(偏移量),并通过ECX获取数组的长度。 请教育我 编辑: 与此同时,我想出了这个主意。不知道这是否有效,因为我的MASM complling只是无缘无故地自我破坏Function MASM如何进行所需的函数调用,function,masm,Function,Masm,我想知道,如何做到以下几点。 我有一个数组,其中我必须求和数字(简单) 但问题是,我必须对它进行函数调用, get是通过特定寄存器的参数。我如何实现这一点? 在这种情况下,函数需要通过ESI获取数组(偏移量),并通过ECX获取数组的长度。 请教育我 编辑: 与此同时,我想出了这个主意。不知道这是否有效,因为我的MASM complling只是无缘无故地自我破坏 .data intarray DWORD 10000h,20000h,30000h,40000h .code szummer pro
.data
intarray DWORD 10000h,20000h,30000h,40000h
.code
szummer proc uses esi ecx,
ptrArray:PTR DWORD, ;points to the array
szArray: Dword ;array size
mov esi, ptrArray ;address of the array
mov ecx, szArray ;szize
mov eax, 0 ;set to 0
AS1:
add eax, [esi] ;add each int to sum
add esi, 4 ;point to next int
loop AS1 ;reapet for array size
ret;
szummer endp
main proc
mov ecx, OFFSET intarray
mov esi, LENGHTOF intarray
INVOKE ArraySum,ecx,esi
invoke ExitProcess,0
main endp
end main
MASM指令仅适用于C(cdecl)、STDCALL、BASIC、FORTRAN和PASCAL。所有这些约定都在堆栈上传递参数。因此,不能使用INVOKE在寄存器中传递参数。您可以改为使用汇编指令。您的程序-稍微修改;-)-包括(因为“ExitProcess”):
invoke
宏将把参数推送到堆栈上。如果要使用自己的自定义呼叫约定,请直接使用call
指令。
INCLUDE \masm32\include\masm32rt.inc
.DATA
intarray DWORD 10000h,20000h,30000h,40000h
.CODE
szummer proc uses esi ecx
mov eax, 0 ;set to 0
AS1:
add eax, [esi] ;add each int to sum
add esi, 4 ;point to next int
loop AS1 ;reapet for array size
ret;
szummer endp
main proc
mov esi, OFFSET intarray
mov ecx, LENGTHOF intarray
call szummer
invoke ExitProcess,0
main ENDP
END main