You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写x64 MASM程序计算0到1e6间奇数斐波那契数之和

x64 MASM计算0~1×10^6之间奇数斐波那契数的和出错排查

我需要编写x64 MASM程序,计算0到1×10^6之间所有奇数斐波那契数的和,预期结果应存在RAX寄存器中,值为109E82h(十进制1089154)。但当前代码运行后RAX中的结果不正确,无法定位问题。

附上我的代码:

extrn ExitProcess: proc

.data
fib1 QWORD 0
fib2 QWORD 1
sum QWORD 0
  
.code
_main PROC

    ; calculate the Fibonacci sequence up to 10^7
    mov rax, 10000000
    mov rcx, fib1
    mov rdx, fib2
FIB_LOOP:
    add rcx, rdx
    mov fib1, rdx
    mov fib2, rcx
    cmp rcx, rax
    jle FIB_LOOP
    ; add odd numbers to the sum
    mov rcx, fib1
    add rcx, rdx  ; rdx contains the last even Fibonacci number
SUM_LOOP:
    test cl, 1    ; check if the current number is odd
    jz SKIP_ADD
    add sum, rcx
SKIP_ADD:
    add rcx, rdx
    mov rdx, rcx
    cmp rcx, rax
    jle SUM_LOOP

    ; exit the program
    mov rax, sum
    call ExitProcess

_main ENDP
END

代码中的核心问题

  1. 上限数值错误:需求是计算到1×106,但代码中设置的上限是`10000000`(1×107),超出了目标范围。
  2. 逻辑拆分错误:先单独生成所有斐波那契数再回头求和的逻辑完全错误,SUM_LOOP中的递推方式根本不符合斐波那契序列的生成规则,导致遍历的数值完全不对。
  3. 初始值遗漏:初始的斐波那契数1是奇数,但没有被加入sum中。
  4. 寄存器操作逻辑混乱:FIB_LOOP结束后,寄存器中的值已经是超出上限的斐波那契数,此时再初始化SUM_LOOP的起始值完全错误。

修正后的代码

正确的做法是在生成斐波那契数的同时,直接判断奇偶并累加,避免逻辑拆分带来的错误:

extrn ExitProcess: proc

.data
sum QWORD 0
  
.code
_main PROC
    ; 初始化斐波那契前两项:fib_prev = 0,fib_curr = 1
    mov rbx, 0          ; fib_prev
    mov rcx, 1          ; fib_curr
    mov rdx, 1000000    ; 上限:1×10^6

    ; 初始的1是奇数,先加入sum
    add sum, rcx

FIB_LOOP:
    ; 计算下一个斐波那契数:fib_next = fib_prev + fib_curr
    mov rax, rbx
    add rax, rcx
    ; 判断是否超过上限
    cmp rax, rdx
    jg EXIT_LOOP

    ; 判断当前fib_next是否为奇数
    test al, 1
    jz SKIP_ADD
    add sum, rax
SKIP_ADD:
    ; 更新前两项的值,准备下一次循环
    mov rbx, rcx
    mov rcx, rax
    jmp FIB_LOOP

EXIT_LOOP:
    ; 将结果存入RAX并退出
    mov rax, sum
    call ExitProcess

_main ENDP
END

修正逻辑说明

  • 直接在生成斐波那契数的循环内完成奇偶判断和累加,避免二次遍历的逻辑错误。
  • 修正了上限值为1000000,符合需求。
  • 初始的奇数1被正确加入sum。
  • 使用寄存器rbx(fib_prev)和rcx(fib_curr)保存前两项,递推逻辑清晰,减少不必要的全局变量操作。

内容的提问来源于stack exchange,提问作者denisse galvan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 15:22:24