Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi und assembler (https://www.delphipraxis.net/156504-delphi-und-assembler.html)

LeaKevser 4. Dez 2010 14:41


Delphi und assembler
 
Delphi-Quellcode:
procedure TForm2.Button1Click(Sender: TObject);
var a,b,c,median :integer;
begin
a:=strtoint (edit1.Text);
b:=strtoint (edit2.Text);
c:=strtoint (edit3.Text);

asm
MOV EAX, a
MOV ECX, b
MOV EDX, c

CMP EAX, ECX
JL @bgrosser
JG @agrosser
JMP @ende

@bgrosser:
CMP ECX, EDX
JL @bmedian
JG @agrosser
MOV median, EDX
JMP @ende

@agrosser:
CMP EAX, EDX
JL @amedian
JG @bgrosser
MOV median, EDX
JMP @ende

@bmedian:
MOV median, ECX
JMP @ende

@amedian:
MOV median, EAX
JMP @ende

@ende:

end;

Showmessage(InttoStr (median));
end;

end.
Hey alle zusammen!! Wir wollten den Median in Delphi in assembler sprache schreiben...aber den fehler entdecken wir leider nicht, kann uns jemand weiterhelfen??

[edit=Matze][delphi]-Tags eingefügt. Zukünftig bitte selbst daran denken. MfG Matze[/edit]

Namenloser 4. Dez 2010 15:26

AW: Delphi und assembler
 
Hallo, Willkommen in der DP :dp:
Bitte beschreibt mal genau, was für ein Fehler auftritt.

LeaKevser 4. Dez 2010 15:32

AW: Delphi und assembler
 
Dankeschön!!! :))))

unser problem ist einfach, dass wir wahrscheinlich bei dem programmtext irgendwas falsches drin haben. Wir bekommen nicht den Median raus, sondern es wird immer der inhalt von edit2 als ergebnis angezeigt... Wäre nett, wenn Sie uns weiterhelfen könnten :)

Amateurprofi 4. Dez 2010 16:43

AW: Delphi und assembler
 
Versucht es mal so:

Delphi-Quellcode:
FUNCTION Median(a,b,c:integer):integer;
asm
      cmp  ecx,eax
      jle  @1
      xchg ecx,eax
@1:  cmp  eax,edx
      cmovg eax,edx
      cmp  ecx,eax
      cmovg eax,ecx
end;
Oder etwas länger, dafür ohne bedingten Move-Befehl
Delphi-Quellcode:
FUNCTION Median(a,b,c:integer):integer;
asm
      cmp  ecx,eax
      jle  @1
      xchg ecx,eax
@1:  cmp  eax,edx
      jle  @2
      mov  eax,edx
@2:  cmp  ecx,eax
      jle  @3
      mov  eax,ecx
@3:
end;
Aufruf :
Delphi-Quellcode:
Showmessage(InttoStr(Median(strtoint(edit1.Text),strtoint(edit2.Text),strtoint(edit3.Text))));

Namenloser 4. Dez 2010 16:45

AW: Delphi und assembler
 
Okay, ich muss zugeben, ich finde den Fehler in euerm Code jetzt auf den ersten Blick auch nicht.
Es ist leider aufgrund der Sprünge gar nicht so einfach, den Code nachzuvollziehen oder in lesbarereren Pseudocode zu überühren.
Ich würde euch empfehlen, dass ihr euern Code mal Schritt für Schritt manuell durchgeht. Dabei solltet ihr alle folgenden Möglichkeiten berücksichtigen:
  1. A > B > C
  2. A > C > B
  3. B > A > C
  4. B > C > A
  5. C > A > B
  6. C > B > A
Alternativ könnt ihr natürlich auch mit dem Debugger den Code Schritt für Schritt durchlaufen.

Manchmal ist es auch sinnvoll, einfach noch mal komplett neu anzufangen, wenn man seinen Fehler nicht findet.

Blup 6. Dez 2010 10:19

AW: Delphi und assembler
 
Nicht getestet:
Delphi-Quellcode:
asm
  MOV EAX, a
  MOV ECX, b
  MOV EDX, c

  CMP EAX, ECX
  JL @bgrosser // a < b
  JG @agrosser // a > b
//  JMP @ende
  JMP @amedian // a = b

  @bgrosser:
  CMP ECX, EDX
  JL @bmedian     // a < b < c
//  JG @agrosser
  CMP EAX, EDX
  JG @amedian     // c < a < b
  MOV median, EDX // a <= c < b
  JMP @ende

  @agrosser:
  CMP EAX, EDX
  JL @amedian     // b < a < c
//  JG @bgrosser
  CMP ECX, EDX
  JG @bmedian     // c < b < a
  MOV median, EDX // b <= c < a
  JMP @ende

  @bmedian:
  MOV median, ECX
  JMP @ende

  @amedian:
  MOV median, EAX
  JMP @ende

  @ende:
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:15 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz