![](/img/trans.png)
[英]Program received signal SIGSEGV, Segmentation fault. in assembly when I call printf
[英]Assembly SIGSEGV, Segmentation fault
我在SEGMENT .DATA中有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.