. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->汇编语言学习交流区
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  本人处女作:求N位斐波那契数的和,忘高手指点  [已解决] 回复[ 3次 ]   点击[ 388次 ]  
inrg
[帖 主]   [ 发表时间:2009-05-23 22:47 ]   [引用]   [回复]   [ top ] 
荣誉值:2
信誉值:0
注册日期:2007-12-08 14:22
;以下masm6.15下编译通过

;求N位斐波那契数的和
INCLUDE Irvine32.inc

.data
;数组大小
LEN = 5

;储存斐波那契数的数组
arrTmp DWORD LEN DUP(?)

.code
main PROC
        MOV EAX, 0
        MOV arrTmp[0], 1

        MOV ESI, OFFSET arrTmp
        MOV ECX, LEN - 1

FBNQ:
        ADD EAX, [ESI]
        MOV [ESI + TYPE arrTmp], EAX
        MOV EAX, [ESI]
        ADD ESI, TYPE arrTmp
        LOOP FBNQ
        
        MOV EAX, 0
        MOV ESI, OFFSET arrTmp
        MOV ECX, LEN

SUM:
        ADD EAX, [ESI]
        ADD ESI, TYPE arrTmp
        LOOP SUM

        CALL DumpRegs
        EXIT
main ENDP

End main

想要的结果达到了,不过就是数组大小(LEN)不能设置成1,有没有更好的思路或着说是算法?忘高手指教
inrg
[第1楼]   [ 回复时间:2009-05-24 14:50 ]   [引用]   [回复]   [ top ] 
荣誉值:2
信誉值:0
注册日期:2007-12-08 14:22
;哎 求人不如求自己啊......

;masm6.15编译通过

INCLUDE Irvine32.inc

.CODE
main PROC
        MOV EAX, 0        ;SUM
        MOV EBX, 1
        MOV EDX, 0
        MOV ESI, 0

        MOV ECX, 1        ;设置斐波那契数长度

SUM:
        ADD EAX, EBX
        MOV ESI, EBX
        ADD EBX, EDX
        MOV EDX, ESI
        
        LOOP SUM
        
        CALL DumpRegs
        exit
main ENDP

END main

今天总算想出来了
inrg
[第2楼]   [ 回复时间:2009-05-24 14:51 ]   [引用]   [回复]   [ top ] 
荣誉值:2
信誉值:0
注册日期:2007-12-08 14:22
还有更好的方法么?
inrg
[第3楼]   [ 回复时间:2009-06-06 22:48 ]   [引用]   [回复]   [ top ] 
荣誉值:2
信誉值:0
注册日期:2007-12-08 14:22
此贴由 贴主 于 [ 2009-06-06 22:48 ] 结贴。 结贴原因:问题已解决
得分情况:
此问题已结贴!
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved