CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  其他开发语言 >  汇编语言

高手请进,散分100,求Fibonacci数列程序,在线等~~~

楼主zlf2356609(小鱼)2005-01-03 19:56:55 在 其他开发语言 / 汇编语言 提问

n=1,f(n)=1  
  n=2,f(n)=1  
  n>2.f(n)=f(n-1)+f(n-2)  
   
  求第N项!!! 问题点数:0、回复次数:8Top

1 楼zlf2356609(小鱼)回复于 2005-01-03 19:59:56 得分 0

多谢了!!马上就要交了!!!还是没有编出来,郁闷!!!!Top

2 楼zlf2356609(小鱼)回复于 2005-01-03 20:01:02 得分 0

要求有输出和输入的!!!好像这个很难解决!!!Top

3 楼clumsy(Kyrie eleison)回复于 2005-01-03 20:17:14 得分 0

到现在还没解决啊?   下面的是原来这里的个帖子里以递归方法求解   Fibonacci   数列的代码,   加上输入和显示模块拼装而成的.   在输入是直接回车的话,   退出  
   
  ;  
  ;   do   with   Masm6.0:     ml   /AT   fibo.asm  
  ;       or     ml   /c   fibo.asm  
  ;               link   /tiny   fibo.obj;  
  ;  
   
   
  _TEXT segment 'CODE'  
   
  assume cs:_TEXT,   ds:_TEXT  
   
  org 100h  
  start:  
  l_getVal:  
  call inVal ;   read   in   (n)  
  test ax,   ax ;   exit   if   zero  
  jz l_exit  
  cmp ax,   MaxVal ;   too   large?    
  jbe @f ;   no  
  mov ax,   MaxVal ;   yes,   set   it   to   max.  
  @@:  
  mov n,   ax  
  push ax  
  mov dx,   offset   msgFn1  
  mov ah,   9  
  int 21h  
  mov ax,   n ;   print   n  
  call dec2asc  
  mov dx,   offset   msgFn2  
  mov ah,   9  
  int 21h  
  push n  
  call fibo ;   get   F(n)  
  call dec2asc ;   print   F(n)  
   
  mov dx,   offset   msgCRLF  
  mov ah,   9  
  int 21h  
   
  jmp l_getVal  
   
  l_exit:  
  mov ax,   4c00h  
  int 21h  
   
   
  ;   return   a   integer   in   ax  
  inVal proc  
   
  push dx  
  push cx  
  push si  
   
  mov dx,   offset   msg4n  
  mov ah,   9  
  int 21h  
  mov ah,   0ah  
  mov dx,   offset   bufIn  
  mov si,   dx  
  int 21h  
  xor dx,   dx  
  inc si  
  cld  
  lodsb  
  test al,   al  
  jz l_setax  
  mov cl,   2  
  l_digits:  
  lodsb  
  cmp al,   '0'  
  jb l_setax  
  cmp al,   '9'  
  ja l_setax  
  and ax,   0fh  
  shl dx,   1  
  add ax,   dx  
  shl dx,   cl  
  add dx,   ax  
  jmp l_digits  
  l_setax:  
  mov ax,   dx  
   
  pop si  
  pop cx  
  pop dx  
   
  ret  
   
  inVal endp  
   
   
  align 2  
   
  MaxVal dw 24 ;   F(24)=46368,   F(25)   >   64K  
  n dw 0  
  Fn dw 0  
  msgFn1 db 'F(',   '$'  
  msgFn2 db ')=',   '$'  
  msg4n db 'n=',   '$'  
  msgCRLF db 0dh,   0ah,   '$'  
  bufIn db 6,   0,   6   dup   (?)  
   
   
  ;   return   F(n)   in   ax  
  fibo proc near ;   F(n)  
   
  push bp  
  mov bp,   sp  
  push dx  
  mov ax,   [bp+4] ;   n   ->   ax  
  test ax,   ax  
  jz l_ret0 ;   F(0)   =   0  
  dec ax  
  jz l_ret1 ;   F(1)   =   1  
  push ax ;   n-1     ->     stack  
  dec ax  
  push ax ;   n-2     ->     stack  
  call fibo ;   F(n-2)  
  mov dx,   ax ;   F(n-2)     ->     ax  
  call fibo ;   F(n-1)  
  add ax,   dx ;   F(n-1)   +   F(n-2)     ->     ax  
  l_ret:  
  pop dx  
  pop bp  
  ret 2  
   
  l_ret0:  
  xor ax,   ax  
  jmp l_ret  
   
  l_ret1:  
  mov ax,   1  
  jmp l_ret  
   
  fibo endp  
   
   
  ;   display   the   unsigned   integer   value   in   AX  
  dec2asc proc  
  push ax  
  push dx  
  push cx  
  mov dx,   -1 ;   flag   of   ending  
  push dx ;   flag   to   stack  
  mov cx,   10  
  l_div10:  
  xor dx,   dx  
  div cx ;   DX:AX   /   CX  
  push dx  
  test ax,   ax  
  jne l_div10  
  mov cx,   -1  
  mov ah,   2 ;   display   character   in   DL  
  l_disp:  
  pop dx  
  cmp dx,   cx  
  je l_ret  
  add dl,   '0' ;   one-digit   value   turns   to   character  
  int 21h ;   display   the   digit  
  jmp l_disp  
  l_ret:  
  pop cx  
  pop dx  
  pop ax  
  ret  
  dec2asc endp  
   
   
  _TEXT ends  
   
  end start  
   
   
  程序运行结果:     每行是在提示   'n='   进行输入后才显示的  
  E:\MASM>fibo  
  F(1)=1  
  F(2)=1  
  F(3)=2  
  F(4)=3  
  F(5)=5  
  F(6)=8  
  F(7)=13  
  F(8)=21  
  F(9)=34  
  F(10)=55  
  F(11)=89  
  F(12)=144  
  F(13)=233  
  F(14)=377  
  F(15)=610  
  F(16)=987  
  F(17)=1597  
  F(18)=2584  
  F(19)=4181  
  F(20)=6765  
  F(21)=10946  
  F(22)=17711  
  F(23)=28657  
  F(24)=46368  
  F(24)=46368  
  n=  
  Top

4 楼zlf2356609(小鱼)回复于 2005-01-03 20:27:17 得分 0

多谢!!!!!!Top

5 楼zlf2356609(小鱼)回复于 2005-01-03 22:06:15 得分 0

输出是乱码~~~而且本来就有7个错误!晕!~帮忙再修改一下把!3Q!!~~Top

6 楼clumsy(Kyrie eleison)回复于 2005-01-04 07:12:55 得分 0

代码的开始的注释部分已经说明了的,   用   Masm6.0   或以上版本,   生成   .com   类型!!!Top

7 楼zlf2356609(小鱼)回复于 2005-01-12 19:31:04 得分 0

怎么转换啊??我太菜了,实在不知道~Top

8 楼clumsy(Kyrie eleison)回复于 2005-01-13 07:16:04 得分 0

转换?   什么转换啊?   是把上面的代码转换为可以使用   Masm5.0   的格式吗?   只要把编译时提示的两个一样的标号   l_ret   改个名字,   还有就是   @@   和   @f   修改一下就可以了  
   
  _TEXT segment 'CODE'  
   
  assume cs:_TEXT,   ds:_TEXT  
   
  org 100h  
  start:  
  push cs ;   这两个指令可以使得   .exe   格式  
  pop ds ;       也可以正常运行  
  l_getVal:  
  call inVal ;   read   in   (n)  
  test ax,   ax ;   exit   if   zero  
  jz l_exit  
  cmp ax,   MaxVal ;   too   large?    
  jbe l_@@ ;   no  
  mov ax,   MaxVal ;   yes,   set   it   to   max.  
  l_@@:  
  mov n,   ax  
  push ax  
  mov dx,   offset   msgFn1  
  mov ah,   9  
  int 21h  
  mov ax,   n ;   print   n  
  call dec2asc  
  mov dx,   offset   msgFn2  
  mov ah,   9  
  int 21h  
  push n  
  call fibo ;   get   F(n)  
  call dec2asc ;   print   F(n)  
   
  mov dx,   offset   msgCRLF  
  mov ah,   9  
  int 21h  
   
  jmp l_getVal  
   
  l_exit:  
  mov ax,   4c00h  
  int 21h  
   
   
  ;   return   a   integer   in   ax  
  inVal proc  
   
  push dx  
  push cx  
  push si  
   
  mov dx,   offset   msg4n  
  mov ah,   9  
  int 21h  
  mov ah,   0ah  
  mov dx,   offset   bufIn  
  mov si,   dx  
  int 21h  
  xor dx,   dx  
  inc si  
  cld  
  lodsb  
  test al,   al  
  jz l_setax  
  mov cl,   2  
  l_digits:  
  lodsb  
  cmp al,   '0'  
  jb l_setax  
  cmp al,   '9'  
  ja l_setax  
  and ax,   0fh  
  shl dx,   1  
  add ax,   dx  
  shl dx,   cl  
  add dx,   ax  
  jmp l_digits  
  l_setax:  
  mov ax,   dx  
   
  pop si  
  pop cx  
  pop dx  
   
  ret  
   
  inVal endp  
   
   
  align 2  
   
  MaxVal dw 24 ;   F(24)=46368,   F(25)   >   64K  
  n dw 0  
  Fn dw 0  
  msgFn1 db 'F(',   '$'  
  msgFn2 db ')=',   '$'  
  msg4n db 'n=',   '$'  
  msgCRLF db 0dh,   0ah,   '$'  
  bufIn db 6,   0,   6   dup   (?)  
   
   
  ;   return   F(n)   in   ax  
  fibo proc near ;   F(n)  
   
  push bp  
  mov bp,   sp  
  push dx  
  mov ax,   [bp+4] ;   n   ->   ax  
  test ax,   ax  
  jz l_ret0 ;   F(0)   =   0  
  dec ax  
  jz l_ret1 ;   F(1)   =   1  
  push ax ;   n-1     ->     stack  
  dec ax  
  push ax ;   n-2     ->     stack  
  call fibo ;   F(n-2)  
  mov dx,   ax ;   F(n-2)     ->     ax  
  call fibo ;   F(n-1)  
  add ax,   dx ;   F(n-1)   +   F(n-2)     ->     ax  
  l_retfibo:  
  pop dx  
  pop bp  
  ret 2  
   
  l_ret0:  
  xor ax,   ax  
  jmp l_retfibo  
   
  l_ret1:  
  mov ax,   1  
  jmp l_retfibo  
   
  fibo endp  
   
   
  ;   display   the   unsigned   integer   value   in   AX  
  dec2asc proc  
  push ax  
  push dx  
  push cx  
  mov dx,   -1 ;   flag   of   ending  
  push dx ;   flag   to   stack  
  mov cx,   10  
  l_div10:  
  xor dx,   dx  
  div cx ;   DX:AX   /   CX  
  push dx  
  test ax,   ax  
  jne l_div10  
  mov cx,   -1  
  mov ah,   2 ;   display   character   in   DL  
  l_disp:  
  pop dx  
  cmp dx,   cx  
  je l_ret  
  add dl,   '0' ;   one-digit   value   turns   to   character  
  int 21h ;   display   the   digit  
  jmp l_disp  
  l_ret:  
  pop cx  
  pop dx  
  pop ax  
  ret  
  dec2asc endp  
   
   
  _TEXT ends  
   
  end startTop

相关问题

  • Fibonacci数列
  • 求助写个关于fibonacci数列的程序。
  • 一个fibonacci数列的问题
  • 产生斐波那齐数列(fibonacci numbers)的算法!
  • 送分:编写递归函数,输出fibonacci数列的前N项
  • “生成Fibonacci数列f(i)的前20项(即i=20)并输出”急!!!!!
  • 散分需要理由吗?等差数列100分
  • 谁能给我一个用栈模拟递归的求“菲波那切”数列的程序,不甚感激!
  • 征求一个在word表格中自动生成数列的完整宏程序。
  • 有没有办法让程序知道某个储存过程的参数列表啊?

关键词

  • 代码
  • 转换
  • movah
  • msgfn
  • maxval
  • fibo
  • offset
  • masm
  • exit
  • print

得分解答快速导航

  • 帖主:zlf2356609

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo