不知道对于楼主的意思理解的对不对,下面是编译成功的程序:
assume cs:code,ds:data
data segment
f1 db 1
f2 db 2
fnext db 8 dup (?)
sum db ?
table dw 4 dup (?)
data ends
code segment
sum_fabonaci proc
push bx
push cx
mov al,[bx]
mov cx,7
s1:
inc bx
add al,[bx]
loop s1
pop cx
pop bx
ret
sum_fabonaci endp
fabonaci proc
push si
push di
push ax
push bx
push cx
mov si,[bx]
mov al,[si]
mov si,[bx+2]
mov ah,[si]
mov di,[bx+4]
mov [di],al
mov [di+1],ah //以上指令实现将F1,F2的值存入fnext中,方便后面计算fabonaci数列。
inc di
mov cx,6
s:
mov al,[di-1]
add al,[di]
mov [di+1],al //从s标号到这里实现fabonaci数列。
inc di
loop s
pop cx
pop bx
pop ax
pop di
pop si
ret
fabonaci endp
start:
mov ax,data
mov ds,ax
mov di,0
mov ax,offset f1
mov table[di],ax
mov ax,offset f2
mov table[di+2],ax
mov ax,offset fnext
mov table[di+4],ax
mov ax,offset sum
mov table[di+6],ax //从start标号到这里目的是将F1,F2,fnext,sum的地址存入table中,也可以不这么麻烦,直接在数据段中将这些地址直接存入table中。
mov bx,offset table
call fabonaci //这里将table的地址赋给bx寄存器,然后作为参数传递给子程序fabonaci。
mov bx,offset fnext
call sum_fabonaci //调用求和子程序,结果由al传回。
mov sum,al
mov ax,4c00h
int 21h
code ends
end start