AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Delphi und assembler

Ein Thema von LeaKevser · begonnen am 4. Dez 2010 · letzter Beitrag vom 6. Dez 2010
Antwort Antwort
LeaKevser

Registriert seit: 4. Dez 2010
2 Beiträge
 
#1

Delphi und assembler

  Alt 4. Dez 2010, 15:41
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]

Geändert von Matze ( 4. Dez 2010 um 16:11 Uhr)
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#2

AW: Delphi und assembler

  Alt 4. Dez 2010, 16:26
Hallo, Willkommen in der DP
Bitte beschreibt mal genau, was für ein Fehler auftritt.
  Mit Zitat antworten Zitat
LeaKevser

Registriert seit: 4. Dez 2010
2 Beiträge
 
#3

AW: Delphi und assembler

  Alt 4. Dez 2010, 16:32
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
  Mit Zitat antworten Zitat
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.062 Beiträge
 
Delphi XE2 Professional
 
#4

AW: Delphi und assembler

  Alt 4. Dez 2010, 17:43
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 :
Showmessage(InttoStr(Median(strtoint(edit1.Text),strtoint(edit2.Text),strtoint(edit3.Text))));
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#5

AW: Delphi und assembler

  Alt 4. Dez 2010, 17:45
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.
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.464 Beiträge
 
Delphi 12 Athens
 
#6

AW: Delphi und assembler

  Alt 6. Dez 2010, 11:19
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;
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:23 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