概述
使用寄存器传参
assume cs:codesg,ds:data
data segment
fiblist dw 1,1,18 dup(?)
n dw 20
data ends
codesg segment
start:
# 将数据段的地址的传递给ds
mov ax,data
mov ds,ax
# 将的fiblist的地址传给si,用来遍历
lea si,fiblist
# 根据传入的斐波那契的数来确定循环次数
mov cx,n
# 前两项不需要进行计算
sub cx,2
one: # 将后项给ax
mov ax,[si+2]
# 将前项给bx
mov bx,[si]
# 调用fib函数
call fib
# 将最终的结果保存在新的目标中
mov [si+4],ax
# 增加迭代量
add si,2
loop one
mov ah,4ch
int 21h
fib proc
add ax,bx
ret
fib endp
codesg ends
END START
不得不说,使用内存去做,还是很详细具体的
使用堆栈传参
assume cs:codesg,ds:data
data segment
fiblist dw 1,1,18 dup(?)
n dw 20
data ends
codesg segment
start:
# 将数据段的地址的传递给ds
mov ax,data
mov ds,ax
# 将的fiblist的地址传给si,用来遍历
lea si,fiblist
# 根据传入的斐波那契的数来确定循环次数
mov cx,n
# 前两项不需要进行计算
sub cx,2
one: # 此时ax为段地址,后续为
push ax
# 将前项加入栈中
push word ptr [si]
# 将后项加入栈中
push word ptr [si+2]
# 调用的斐波那契函数
call fib
# 将的
pop ax
mov word ptr [si+4],ax
# 增加迭代量
add si,2
loop one
mov ah,4ch
int 21h
fib proc
# 将当前的栈顶的地址赋值给bp
mov bp,sp
# 将栈顶的第一个地址给ax
mov ax,[bp+2]
# 将最终的结果保存在x1中
add ax,[bp+4]
# 将最终的结果返回给的最底下的ax
mov [bp+6],ax
ret 4
fib endp
codesg ends
END START
注意:这里有一点问题,那就是call会自动地将地ip入栈,然后将ret再出栈,ret4 就是出栈之后,再将sp = sp - 4,总的来说就是sp = sp - 6
最后
以上就是故意秀发为你收集整理的汇编实现斐波那契(使用寄存器传递参数+堆栈传递参数)的全部内容,希望文章能够帮你解决汇编实现斐波那契(使用寄存器传递参数+堆栈传递参数)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复