题目
题目和上一篇一样,都是累加数组中的元素。
思路
采用地址表传送参数,这种方法是在主程序中建立一个地址表,要把传送给子程序的参数存放在地址表中,然后把地址表的首地址通过寄存器BX传送到子程序中去。子程序通过地址表取得所需参数,并把结果存入指定的存储单元去。
代码
;;;;;;;;通过地址表传送参数地址;;;;;;;;;;;
datasg segment
ary dw 1,2,3,4,5,6,7,8,9,10
count dw 10
sum dw ?
table dw 3 dup (?) ; 地址表
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
;------------
mov table,offset ary
mov table+2,offset count
mov table+4,offset sum
call proadd
ret
;-----------
main endp
;----------MAIN---------
;---------PROADD--------
proadd proc near
mov bx,offset table
mov si,[bx] ;si存放ary的地址
mov di,[bx+2] ;di存放count的地址
mov cx,[di] ;cx存放count的值
mov di,[bx+4] ;di存放sum的地址
xor ax,ax
next:
add ax,[si]
add si,2
loop next
mov [di],ax
ret
proadd endp
;---------PROADD--------
codesg ends
end start
调试
反汇编
观察到3个变量的地址被保存了下来
结果