Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 装配SIGSEGV,分段故障_Assembly_X86_Nasm_Intel - Fatal编程技术网

Assembly 装配SIGSEGV,分段故障

Assembly 装配SIGSEGV,分段故障,assembly,x86,nasm,intel,Assembly,X86,Nasm,Intel,我在段中有4个变量 数组A 阵列B 数组C 数组大小 我的目标是将A的第i个元素与B的第i个元素相乘,结果进入数组C的第i个元素 我正在将SASM与NASM编译器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

我在段中有4个变量

  • 数组A
  • 阵列B
  • 数组C
  • 数组大小
  • 我的目标是将A的第i个元素与B的第i个元素相乘,结果进入数组C的第i个元素

    我正在将SASM与NASM编译器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,但问题中的说明看起来不错。我能想到的唯一原因是目标
    [C+ESI*4]
    位于只读部分。此时,我注意到您在一个名为
    .data
    的部分中使用以下行定义了数据:

    SECTION .DATA
    
    我不知道SASM在链接器脚本中使用了什么,但很可能
    .DATA
    部分不是读/写部分的典型名称,并且可能导致链接器在创建可执行文件时将
    .DATA
    设置为只读。读/写部分通常称为
    .data
    (小写)。尝试修改
    部分。数据
    以读取:

    SECTION .data
    

    感谢这项工作,您能把您的评论作为答案吗?
    MOV ECX,[SIZE]
    是错误的,大小定义为
    SIZE DB 5
    =字节,而不是dword,因此您应该将指令更改为
    movzx ECX,byte[SIZE]
    ,或者将定义更改为
    SIZE DD 5