繁体   English   中英

装配SIGSEGV,分段故障

[英]Assembly SIGSEGV, Segmentation fault

我在SEGMENT .DATA中有4个变量

  1. 阵列A.
  2. 数组B.
  3. 数组C.
  4. 数组大小

我的目标是将A的第i个元素与B的第i个元素相乘,结果将转换为数组C的第i个元素。

我正在使用带有NASM编译器的SASM,intel x86

这是我的代码:

%include "io.inc"

SECTION .DATA
    A DD 10, 200, -34, 56, 7
    B DD 12, -3, 4, 7, 100
    C DD 0, 0, 0, 0, 0
    SIZE DB 5

section .text
global CMAIN
CMAIN:
    MOV ESI, 0
    MOV ECX, [SIZE]
    MULT:
        MOV EAX, [A + ESI*4]
        MOV EBX, [B + ESI*4]
        IMUL EAX, EBX
        MOV [C + ESI*4], EAX; Program received signal SIGSEGV, Segmentation fault.
        INC ESI
        LOOP MULT
        xor eax, eax
    ret

任何想法可能是什么问题?

我没有SASM ,但qustion中的指令看起来还不错。 我能想到的唯一原因是目的地[C + ESI*4]处于只读部分。 此时我注意到您使用以下行在名为.DATA的部分中定义数据:

SECTION .DATA

我不知道SASM用于链接器脚本的是什么,但是.DATA部分可能不是读/写部分的典型名称,并且可能导致链接器创建可执行文件,其中.DATA是只读的。 读/写部分通常称为.data (小写事项)。 尝试将SECTION .DATA修改为:

SECTION .data

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM