不知道对于楼主的意思理解的对不对,下面是编译成功的程序:
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