這部分代碼的功能與017號博客中的代碼實現的功能是一致的,但是減少的了手動設置棧的操作,使用uses來代替。
;測試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 uses esi ecx
mov eax,0
;設置和數爲零
L1:
add eax,[esi]
add esi,type DWORD ;由於數組定義爲DWORD 所以在遞增計數器的時候一次性增加四個字節但是爲了不出錯起見 使用了type運算符
loop L1 ;按照數組大小重複進行計算
ret ;函數結束並返回
ArraySum ENDP ;過程結束標誌
END ;程序結束