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:
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?