Einzelnen Beitrag anzeigen

Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#1

for Schleife in ASM

  Alt 12. Jul 2006, 23:45
Nehmen wir mal folgenden Code:
Delphi-Quellcode:
var
  ar : array[0..5] of integer = (0, 1, 2, 3, 4, 5);

  i, r : integer;
begin
  r := 0;
  for i := 0 to 5 do
  begin
    inc(r, ar[i]);
  end;
  Writeln(r);
Egal was er macht, es ist jedenfalls eine Schleife, die wegen der Optimierung rückwärts läuft.

Der produzierte ASM Code sieht aus, wie im Anhang (CPU Fenster).

da steht jetzt:
Code:
dec edx
jnz -$08
jnz bedeutet, "Spring, wenn das Zero Flag nicht null ist." Aber das Zero Flag ist die ganze Zeit null. Kann man auch im Screenshot sehen. Erst wenn edx mit der Zählvariablen 0 erreicht hat, wird das Zero Flag auf 1 gesetzt und er springt nicht mehr. Der Code verhält sich also genau gegenteilig wie er eigentlich sollte. Oder habe ich da jetzt ein Verständnisproblem?
Miniaturansicht angehängter Grafiken
for_backwards_135.jpg  
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat