017.數組求和函數

;測試ArraySum過程

.386

.model flat,stdcall

.stack 4096

ExitProcess PROTO,dwExitCode:DWORD

.data
	array DWORD 10000h,20000h,30000h,40000h,50000h
	theSum DWORD ?

.code
	main PROC
		mov esi,OFFSET array	;ESI指向數組
		mov ecx,LENGTHOF array	;ECX=數組計數器
		call ArraySum			;計算和數
		mov theSum,eax			;用EAX返回和數

		INVOKE ExitProcess,0
	main ENDP
	;---------------------------------------------
	;ArraySum
	;計算32位整數數組之和
	;接受:ESI=數組偏移量
	;	  ECX=數組元素個數
	;返回:EAX=數組元素之和
	;---------------------------------------------

	ArraySum PROC
		push esi
		push ecx				;保存esi以及ecx
		mov eax,0
								;設置和數爲零
	L1:
		add eax,[esi]
		add esi,type DWORD		;由於數組定義爲DWORD 所以在遞增計數器的時候一次性增加四個字節但是爲了不出錯起見 使用了type運算符
		loop L1					;按照數組大小重複進行計算

		pop esi
		pop ecx					;寄存器數值復位
		ret						;函數結束並返回

	ArraySum ENDP				;過程結束標誌

END								;程序結束
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章