![]() |
Delphi und assembler
Delphi-Quellcode:
Hey alle zusammen!! Wir wollten den Median in Delphi in assembler sprache schreiben...aber den fehler entdecken wir leider nicht, kann uns jemand weiterhelfen??
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. [edit=Matze][delphi]-Tags eingefügt. Zukünftig bitte selbst daran denken. MfG Matze[/edit] |
AW: Delphi und assembler
Hallo, Willkommen in der DP :dp:
Bitte beschreibt mal genau, was für ein Fehler auftritt. |
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 :) |
AW: Delphi und assembler
Versucht es mal so:
Delphi-Quellcode:
Oder etwas länger, dafür ohne bedingten Move-Befehl
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;
Delphi-Quellcode:
Aufruf :
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;
Delphi-Quellcode:
Showmessage(InttoStr(Median(strtoint(edit1.Text),strtoint(edit2.Text),strtoint(edit3.Text))));
|
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:
Manchmal ist es auch sinnvoll, einfach noch mal komplett neu anzufangen, wenn man seinen Fehler nicht findet. |
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 21:08 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz