题目
主程序MAIN和过程PROADD在同一源文件中,要求用过程PROADD累加数组中的所有元素,并把和(不考虑溢出)送到指定的存储单元去。
思路
如果通过直接访问模块中的变量传递参数那么子程序就被写死了,如果要求再计算一次求和,那么子程序将无法复用,下一节将介绍第三种方法,通过地址表传送参数地址。
代码
;;;;;;;;通过直接访问模块传递参数;;;;;;;;;;;
datasg segment
ary dw 1,2,3,4,5,6,7,8,9,10
count dw 10
sum dw ?
datasg ends
;--------------------
codesg segment
assume ds:datasg,es:datasg,cs:codesg
;----------MAIN---------
main proc far
start:
push ds
sub ax,ax
push ax
mov ax,datasg
mov ds,ax
mov es,ax
;------------
call near ptr proadd
ret
;-----------
main endp
;----------MAIN---------
;---------PROADD--------
proadd proc near
lea si,ary
mov cx,count
xor ax,ax
next:
add ax,[si]
add si,2
loop next
mov sum,ax
ret
proadd endp
;---------PROADD--------
codesg ends
end start
调试