Ich verstehe, dass dieser Code wahrscheinlich viel sauberer und effizienter sein könnte, aber ich verwende nur den Code, der bisher in unserem Buch bereitgestellt wurde. Ich versuche, ein 2D-Array zu erstellen, lassen Sie den Benutzer eine Verkäufer-Nummer (Zeilennummer), Menge verkauft (Wert) und Produkt-ID (Spaltennummer) eingeben. Sobald sie fertig sind, geben sie einen Wert von -1 ein. Es sollte den Gesamtumsatz jedes Verkäufers (Zeilensummen) und die Gesamtverkäufe aller Produkte (Spaltensummen) anzeigen. Ich kann zwar Informationen für die erste Zeile eingeben, aber das Programm friert ein, wenn ich versuche, Informationen für Verkäufer 2, 3 oder 4 einzugeben. Hier ist der Teil des Codes, von dem ich glaube, dass er das Problem hat.Fehler beim Lesen von mehr als einer Datenzeile in einem 2D-Array
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
Als Höflichkeit, wenn Sie Ihre Frage sehen mit gebrochener Formatierung kommt es bitte selbst beheben (auch die Vorschau verwenden, während der Bearbeitung). Kommentiere deinen Code auch, besonders wenn du anderen helfen willst. Last but not least, geben Sie Details, nicht nur sagen, dass das Programm einen Fehler hat. – Jester
Dies ist das Gegenteil eines minimalen vollständigen Beispiels, das Ihr Problem veranschaulicht. Das ist dein ganzes Programm. Nehmen Sie Dinge so lange heraus, bis Sie ein Programm haben, das so klein wie möglich ist (und nicht viel tut), aber immer noch das gleiche Problem hat. Sie werden wahrscheinlich Ihren Fehler auf dem Weg finden, während Sie Sachen auspacken, besonders. Wenn Sie einen Debugger verwenden, um Register/Speicher zu untersuchen und zu sehen, ob das Problem immer noch vorhanden ist. –
Vielen Dank, dass Sie den Code verkleinert haben, aber es gibt immer noch keine Kommentare, die erklären, was Sie bei jedem Schritt tun sollen oder warum. Wie auch immer, Nullstellung von 'ecx' direkt vor einer [' loop' Anweisung] (http://stackoverflow.com/questions/35742570/why-is-the-loop-instruction-slow-couldnt-intel-have-implemented-it- effizient) ist wahrscheinlich ein Fehler. –