このコードは、はるかに洗練され、より効率的になる可能性があることを理解していますが、これまでに提供されているコードのみを使用しています。私は2D配列を作成し、セールスマン番号(行番号)、販売数量(値)、製品ID(列番号)をユーザーに入力させようとしています。終了すると-1の値を入力します。各販売員の合計売上(行合計)と各製品の合計売上(列合計)を表示する必要があります。最初の行の情報を入力することはできますが、Salesman 2、3、または4の情報を入力しようとするとプログラムがフリーズします。ここに問題のあるコードの部分があります。2行以上のデータを2次元配列に読み取るときにエラーが発生する
L1: mov edx, OFFSET msg1
call WriteString
call ReadInt
.WHILE(eax != quit)
mov ebx, OFFSET tableE
dec eax
add ebx, RowSizeE
imul ebx, eax
call Crlf
mov edx, OFFSET msg2
call WriteString
call ReadDec
mov ecx, eax
call Crlf
mov edx, OFFSET msg3
call WriteString
call ReadDec
mov esi, eax
dec esi
mov tableE[ebx + esi*TYPE tableE], ecx
call Crlf
mov eax, 0
mov ebx, 0
mov edx, 0
mov ecx, 0
mov esi, 0
loop L1
.ENDW
:これが正しい方法です。また、特に他人に手助けをしたい場合は、コードをコメントしてください。最後は重要なことですが、詳細を提供し、プログラムにエラーがあると言うだけではありません。 – Jester
これは、あなたの問題を示す最小限の完全な例の反対です。これはあなたの全プログラムです。できるだけ小さいプログラムを作成するまで(そしてそれほど大したことはありませんが)、同じ問題があります。あなたはたぶんあなたのバグを見つけ出します。デバッガを使用してレジスタ/メモリを調べて、問題がまだ存在するかどうかを確認してください。 –
コードを縮小していただきありがとうございますが、各ステップで何をしたいのか、理由を説明するコメントはまだありません。とにかく、 '' loop'命令の直前で 'ecx'をゼロにします(http://stackoverflow.com/questions/35742570/why-is-the-loop-instruction-slow-couldnt-intel-have-implemented-it-効率的に)おそらくバグです。 –