Einzelnen Beitrag anzeigen

Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#1

[ASM] While-Schleife tut was sie will

  Alt 16. Feb 2007, 16:18
Hi,

Ich spiele gerade was mit dem Delphi-Inline-Assembler rum (Mit der Absicht dann irgendwann einen anderen Quellcode etwas optimieren zu können.

Ich habe mir einfach mal folgenden Code genommen:

Delphi-Quellcode:
begin
  Akt:=0;
  while Akt<>5 do
  begin
    if Random(2)=1 then Inc(Akt);
  end;
  Memo1.Lines.Add(IntToStr(Akt));
end;
das ist zwar ziemlich Sinnfrei...aber egal

Also ab in ASM damit...
Code:
procedure Add(I: Integer);
begin
  Form1.Memo1.Lines.Add(IntToStr(I));
end;

function Rand(N: Integer): Integer;
begin //Hier hatte ich ein Problem mit dem Optionalen Parameter...
  Result:=Random(N);
end;

asm
  MOV EDX,0 //Erstmal nullen

  @start: //Schleifenanfang
  CMP EDX,5 //Ist es 5?
  JE @ende //JMP ende

  MOV EAX,2 //1. Param für Rand
  CALL Rand //Rand Callen
  CMP EAX,1 //ist Ergebnis 1?
  JE @doinc //Dann JMP doinc
  JMP @endeinnen //Sonst JMP schleifenende

  @doinc: //doinc
  ADD EDX,1 //EDX erhöhen

  @endeinnen: //Schleife zuende
  JMP @start //Zum Schleifenanfang

  @ende: //Am Ende
  CALL Add //Add Callen
end;
Was nun passiert ist folgendes (Haltepunkte...)
+ 0 nach EDX
+ übergeht JE @ende
+ 2 nach EAX
+ Call Rand
Aber dann, bei JE @doinc springt er auf einmal nach CMP EDX,5
Und das versteh ich überhaupt nicht....

kann mir da mal irgendwer auf die Sprünge helfen? (im wahrsten sinne des wortes^^)
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat