2017-07-20 3 views
1

Aのi番目の要素をBのi番目の要素とし、結果を配列Cのi番目の要素に渡します。アセンブリSIGSEGV、セグメンテーションフォールト

私は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

ありがとうございました。あなたは答えとしてコメントできますか? –

+1

'MOV ECX、[SIZE]'が間違っています、サイズは 'SIZE DB 5 '= byteではないので、あなたは' movzx ecx、byte [SIZE] 'または'SIZE DD 5'。 – Ped7g

答えて

2

私はSASMを持っていませんが、qustionの指示は大丈夫です。私が考えることができる唯一の理由は、宛先[C + ESI*4]が読み取り専用セクションにあることです。 SASMは、リンカスクリプトのために使用しますが、そう.DATAセクションでは、読み取りのための一般的な名前ではありません何

SECTION .DATA 

私にはわからない:この時点で私はあなたがこの行で.DATAと呼ばれるセクション内のデータを定義することに気づきました/書き込みセクションを開き、リンカーに実行可能ファイルを作成して.DATAを読み取り専用にする可能性があります。読み取り/書き込みセクションは通常.data(小文字)と呼ばれます。 SECTION .DATAを次のように変更してみてください。

SECTION .data 
関連する問題