我想知道,如何做到以下几点。 我有一个数组,我必须汇总数字(简单) 但扭曲的是,我必须有一个函数调用它, 得到的是特定寄存器的参数。我该如何实现? 在这种情况下,函数需要通过ESI获取数组(偏移量),并通过ECX获取它的长度。 请教育我 编辑: 在此期间,我已经想到了这一点。不知道这是否有效,因为我的MASM compliling无缘无故打破了自己
.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
答案 0 :(得分:0)
MASM指令INVOKE仅适用于calling conventions C(cdecl),STDCALL,BASIC,FORTRAN和PASCAL。所有这些约定都传递堆栈上的参数。因此,您不能使用INVOKE在寄存器中传递参数。您可以使用汇编指令CALL代替。您的程序 - 略有修改;-) - 包含MASM32 library(因为" ExitProcess"):
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