Autor |
Beitrag |
MagicRain
      
Beiträge: 154
WinXp, Win8, iOS
Delphi 7, Lazarus Pascal, Delphi 10.2 Starter, NetBeans Java
|
Verfasst: Di 14.07.09 21:29
Hallo ich mal wieder "LEIDER"...  und zwar habe ich ein kleines problem mit dem ausrufen einer function sie hier...
Quelltext 1:
| Dies habe ich vor : ->> XCHG EAX,ESI |
A := EAX , Y := ESI : Integer; ...
Try: ->>
Delphi-Quelltext 1: 2: 3: 4:
| Function ByteSwap(i: Word): Word; ASM XCHG EAX, ESI; End; |
-
Delphi-Quelltext 1: 2:
| Aufruf versuch: ->> A := ByteSwap(A(Y)); .... A := ByteSwap(a[Y]); da muckt er auch rum :( .... |
und einfach......
Delphi-Quelltext 1: 2: 3: 4: 5:
| asm mov eax,a mov esi,y XCHG EAX, ESI; end; |
geht auch nicht puh echt ein mist das ganze inline asm von delphi is auch sone sache für sich
Da ich schon öfter hiermit probleme hatte bzw es noch nie hin bekommen habe hoffe ich ihr werdet mir da helfen und mir vlt erklären wie das ganze abläuft und funktioniert btw was ich falsch mache...
MfG Moderiert von Narses: Topic aus Sonstiges (Delphi) verschoben am Di 14.07.2009 um 21:52
|
|
Flamefire
      
Beiträge: 1207
Erhaltene Danke: 31
Win 10
Delphi 2009 Pro, C++ (Visual Studio)
|
Verfasst: Di 14.07.09 22:05
1) geht nicht gibts nicht! bitte genauere beschreibung was du vorhast und was passiert (welcher fehler, welches ergebnis)
2) dann bitte die var-deklarationen angeben
was ist a und was ist y?
und wenn beides words sind, was soll dan bei a(y) rauskommen?
du kannst keinen word auf ein word anwenden...
wie wäre es mit Delphi-Quelltext 1: 2: 3: 4:
| procedure ByteSwap(var a,b:Word);inline; ASM XCHG ESI,EDI End; |
|
|
MagicRain 
      
Beiträge: 154
WinXp, Win8, iOS
Delphi 7, Lazarus Pascal, Delphi 10.2 Starter, NetBeans Java
|
Verfasst: Di 14.07.09 22:14
Also...
Delphi-Quelltext
ich muss eine assambler line in delphi übersetzen... und zwar XCHG EAX,ESI
Also EAX und ESI haben einen bestümmten wert schon bekommen und dann wird der befehl XCHG EAX,ESI ausgeführt. Und das muss ich jetzt irgendwie in delphi hinbekommen nur wie ist die frage...ich habe eine procedure wo ich ein assambler stück nach code und nun muss ich irgendwie diesen befehl hinbekommen..nur wie ich die funktion auf rufen soll oder das anders regeln soll mit dem befehl ich weiß nicht irgendwie muss das doch gehen.
MfG
|
|
Flamefire
      
Beiträge: 1207
Erhaltene Danke: 31
Win 10
Delphi 2009 Pro, C++ (Visual Studio)
|
Verfasst: Di 14.07.09 22:20
1) es geht auch
2) wenn du verständlicher schreibst macht es mehr spaß deinen post zu lesen
3) du hast immer noch keine meldungen oder genauere beschreibungen gepostet
4) Integer->Word?
Müsstest du dann nicght auch Integers in der Funktion verwenden? Macht auch mehr sinn, da EAX,ESI 32Bit Register sind.
5) Guck mal nach was xchg macht. Meiner Meinung anch verstauscht die einfach nur 2 werte...
und das kannste wohl sehr einfach selbst machen
6) Was wäre du testest meine funktion erstmal und sagst was rauskommt (Jetzt natürlich noch word durch integer ersetzen)
|
|
MagicRain 
      
Beiträge: 154
WinXp, Win8, iOS
Delphi 7, Lazarus Pascal, Delphi 10.2 Starter, NetBeans Java
|
Verfasst: Di 14.07.09 22:35
1) Da fängt das problem auch schon an keine ahnung wie man so eine Function oder Procedure richtig aufruft..
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| procedure ByteSwap(var a,b:Integer); ASM XCHG ESI,EDI End;
procedure TForm1.btn1Click(Sender: TObject); var a , b : Integer; begin A := 10; B := 22; A := ByteSwap(0,a); txt1.Text := IntToStr(a); end; |
2. Werte ... EAX == 0x000001A4 , ESI == 0000172C << SUB EAX,ESI >> dann ... EAX == 0000172C , ESI == 000001A4
3. Wäre schön wenn ich wüsste wie man so eine Funktion oder Procedure aufrufen kann bis jetzt habe ich das noch nie hinbekommen oder irgendwo etwas gefunden wie es gehen soll gerade weil ich öfter mal solche funktionen brauchen könnte bei specialen ASM-Befehlen.
4. Also deine Procedure bekomme ich nicht zum laufen weil ich nicht weiß wie ich das auf rufen soll ByteSwap(a); oder so das läuft leider nicht ...
MfG
|
|
uall@ogc
      
Beiträge: 1826
Erhaltene Danke: 11
Win 2000 & VMware
Delphi 3 Prof, Delphi 7 Prof
|
Verfasst: Di 14.07.09 22:55
1) Hast du im anderen Post noch nicht geantwortet, also was willst du machen? In der DP wurd ein Thread von dir gelöscht.
2) Solltest du dich erstmal bisl mit Delphi auseinandersetzen bevpr du in Assembler ran gehst. Siehe Aufruf einer Prozedur mit angeblichen Rückgabeparameter
3) Ein XCHG ist ein Austausch von 2 Register (und kein ByteSwap), das kommt eher einem Austausch von 2 Variablen nach.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| procedure Exchange(var a, b: Word); var h: Word; begin h := a; a := b; b := h; end; |
Ich wieß auch nicht warum du alles unbedingt in Delphi Funktionen mit Assembler auslagen willst, schreib die Komplette Funktion die du hast einfach in Assembler in einer Delphi Funktion nach.
_________________ wer andern eine grube gräbt hat ein grubengrabgerät
- oder einfach zu viel zeit
|
|
MagicRain 
      
Beiträge: 154
WinXp, Win8, iOS
Delphi 7, Lazarus Pascal, Delphi 10.2 Starter, NetBeans Java
|
Verfasst: Di 14.07.09 23:23
Ja ok danke egal ich geb dann auf.. muss ich mich wohl erst mehr mit Delphi befassen..tschau..
MfG
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mi 15.07.09 05:16
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Mi 15.07.09 07:48
Delphi kann kein Inline für Funktionen oder Prozeduren, die ASM enthalten. Das wird schlicht vom Compiler ignoriert.
Der Rest wurde hier bereits gesagt ...
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
MagicRain 
      
Beiträge: 154
WinXp, Win8, iOS
Delphi 7, Lazarus Pascal, Delphi 10.2 Starter, NetBeans Java
|
Verfasst: Mi 15.07.09 19:16
Gott sei danke hab es hinbekommen meine fresse  @uall@ogc habe dein ansatz benutzt so in der Art hat es dann geklappt eigentlich ja auch gar nicht so schwer eigentlich ne logische sache man mein kopf war wieder weg 
|
|
|