我在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
任何想法可能是什么问题?
答案 0 :(得分:3)
我没有 SASM ,但qustion中的说明看起来没问题。我能想到的唯一原因是目标[C + ESI*4]
位于只读部分。此时我注意到您使用以下行在名为.DATA
的部分中定义数据:
SECTION .DATA
我不知道SASM用于链接器脚本的是什么,但.DATA
部分可能不是读/写部分的典型名称,并且可能导致链接器创建.DATA
的可执行文件只读。读/写部分通常称为.data
(小写事项)。尝试修改SECTION .DATA
以阅读:
SECTION .data