;测试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 ;程序结束
017.数组求和函数
最新推荐文章于 2024-01-18 11:04:48 发布