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

x86汇编中将斐波那契数列存入数组时触发段错误的问题

x86汇编斐波那契数组存储段错误排查与修复

我用SASM编写x86汇编程序,需求是将第1至第n个斐波那契数存入数组(例如n=5时结果应为[1,2,3,5,8])。算法逻辑本身可行,但执行到将EAX寄存器结果存入数组的步骤时,持续触发段错误(SIGSEGV)。

出错的带数组代码

%include "io.inc"
section.data
size:  DD 5
array: DD 0,0,0,0,0 
section .text
global CMAIN
CMAIN:
mov ebp, esp; for correct debugging    
   MOV eax, 1       ;i
   MOV ebx, 1       ;j
   MOV edx, [size]
   MOV ecx, 0       ; index
   DEC edx          ; max. Index
 fib:
    CMP ecx, edx
    JE end
           MOV edx, ebx             ; safe j     
           MOV ebx, eax             ; j <- i
           ADD eax, edx             ; i <- j+i (with j from edx)
           MOV [array+ecx*4],eax    ; Program received signal SIGSEGV, Segmentation fault.
           INC ecx
           JMP fib
end:
    ret

正常运行的无数组代码

%include "io.inc"
section .text
global CMAIN
CMAIN:
mov ebp, esp; for correct debugging

MOV eax,1 ; i
MOV ebx,1 ; j
MOV ecx,0 ; n: index

 fib:
    CMP ecx, 4
    JE end
           MOV edx, ebx     ; safe j     
           MOV ebx, eax     ; j <- i
           ADD eax, edx     ; i <- j+i (with j from edx)
           INC ecx
           JMP fib
end:
    ret

SASM构建设置

编译模式选择NASM,目标架构为x86,输出格式为ELF32。

问题原因与修复

核心问题

  1. 寄存器复用导致索引逻辑失效:初始用edx存储数组最大索引(size-1),但循环中又用edx临时保存ebx的值,直接覆盖了最大索引。后续循环中cmp ecx, edx的判断完全错误,ecx持续递增超出数组范围,触发非法内存访问。
  2. 数据段语法错误:原代码中section.data缺少空格,正确写法应为section .data,该错误会导致汇编器无法正确识别数据段,数组被分配到非法内存区域。

修复后的代码

%include "io.inc"
section .data
size:  DD 5
array: DD 0,0,0,0,0 
section .text
global CMAIN
CMAIN:
mov ebp, esp; for correct debugging    
   MOV eax, 1       ;i
   MOV ebx, 1       ;j
   MOV edx, [size]
   MOV ecx, 0       ; index
   DEC edx          ; max. Index
 fib:
    CMP ecx, edx
    JE end
           MOV esi, ebx             ; 换用esi保存临时值,避免覆盖edx
           MOV ebx, eax             ; j <- i
           ADD eax, esi             ; i <- 原j + i
           MOV [array+ecx*4],eax    ; 正确写入数组
           INC ecx
           JMP fib
end:
    ret

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 22:20:41