汇编怎么用递归求斐波那契数列啊
救救孩子吧
已经几天了还是对堆栈不够理解
大佬最好别调用库做,萌新看不懂,
比如 输入个4
那么输出是 1 1 2 3 这四项
汇编递归求斐波那契数列前N项
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
- threenewbee 2020-05-10 02:06关注
用turbo c写了一个
#include <stdio.h> int foo(int n) { if (n <= 2) return 1; return foo(n - 1) + foo(n - 2); } main() { int i; for (i = 1; i < 10; i++) printf("%d ", foo(i)); return 0; }
得到如下汇编(帮你注释了下)
ifndef ??version ?debug macro endm endif ?debug S "..\project\app1.c" _TEXT segment byte public 'CODE' DGROUP group _DATA,_BSS assume cs:_TEXT,ds:DGROUP,ss:DGROUP _TEXT ends _DATA segment word public 'DATA' d@ label byte d@w label word _DATA ends _BSS segment word public 'BSS' b@ label byte b@w label word ?debug C E9440EAA50112E2E5C70726F6A6563745C617070312E63 ?debug C E9A460A840122E2E5C696E636C7564655C737464696F2E68 ?debug C E9A460A840132E2E5C696E636C7564655C7374646172672E68 _BSS ends _TEXT segment byte public 'CODE' ; ?debug L 2 _foo proc near ;foo函数 push bp mov bp,sp push si mov si,word ptr [bp+4] ;n参数放入si ; ?debug L 4 cmp si,2 ;判断n和2的大小 jg @2 ;大于2跳转到后面 mov ax,1 ;n<2则返回1 jmp short @1 @2: ; ?debug L 5 mov ax,si dec ax ;这里就是计算n-1 push ax call near ptr _foo ;递归调用foo pop cx push ax mov ax,si add ax,-2 ;这里是计算n-2 push ax ;结果放在堆栈上 call near ptr _foo ;递归调用foo pop cx mov dx,ax ;foo(n-2)的结果放在dx pop ax ;从堆栈上得到 foo(n-1)的结果 add ax,dx //相加放在ax上作为返回值 jmp short @1 @1: ;这里是函数返回部分 ; ?debug L 6 pop si pop bp ret _foo endp _TEXT ends _DATA segment word public 'DATA' _DATA ends _TEXT segment byte public 'CODE' ; ?debug L 7 _main proc near push si ; ?debug L 10 mov si,1 ;si保存的是循环变量i,这里是i=1 jmp short @7 @6: ;循环开始 ; ?debug L 11 push si ;将i作为参数放入堆栈 call near ptr _foo ;调用foo(i) pop cx push ax ;把结果放入堆栈 mov ax,offset DGROUP:s@ ;把"%d "放入堆栈 push ax call near ptr _printf ;调用printf pop cx pop cx @5: inc si ;i++ @7: cmp si,10 ;i == 10? jl @6 ;小于10返回循环开始处(6) @4: ; ?debug L 12 xor ax,ax jmp short @3 @3: ; ?debug L 13 pop si ret _main endp _TEXT ends ?debug C E9 _DATA segment word public 'DATA' s@ label byte db 37 ;% db 100 ;d db 32 ;空格 db 0 _DATA ends _TEXT segment byte public 'CODE' extrn _printf:near ;外部函数printf _TEXT ends public _main public _foo end
你可以用tasm汇编得到exe
运行
相关的工具程序下载
https://download.csdn.net/download/caozhy/12404953
问题解决的话,请点采纳
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用
悬赏问题
- ¥15 乘性高斯噪声在深度学习网络中的应用
- ¥15 运筹学排序问题中的在线排序
- ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
- ¥30 求一段fortran代码用IVF编译运行的结果
- ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
- ¥15 C++ 头文件/宏冲突问题解决
- ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
- ¥50 安卓adb backup备份子用户应用数据失败
- ¥20 有人能用聚类分析帮我分析一下文本内容嘛
- ¥30 python代码,帮调试,帮帮忙吧