Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi 2 zeilen asm code der in delphi code umgewandelt werden soll (https://www.delphipraxis.net/136339-2-zeilen-asm-code-der-delphi-code-umgewandelt-werden-soll.html)

DOCa Cola 28. Jun 2009 21:05


2 zeilen asm code der in delphi code umgewandelt werden soll
 
ich habe versuch folgenden asm code in delphi nachzubauen, nur ich komme nicht so ganz darauf, wie ich den in der hochsprache umsetzen soll.
der linke wert ist ein long bzw integer bei dem diverse bit flags gesetzt sind. anhand dieses vergleichs soll dann eben code ausgeführt werden oder nicht. das der vergleich in der asm version nur mit dem ersten byte erfolgt ist wohl ganz einfach eine compiler optimierung
Code:
TEST BYTE PTR DS:[ECX+1D4], 0C0
JE *adresse*
ich habe versucht es in delphi so umzusetzen:
Delphi-Quellcode:
if (m_objType and $c0) = $c0 then
aber ich denke mein code ist eine falsche "übersetzung", da er sich anders verhält. wenn m_objType zum beispiel mit $0AE0189A gefüllt ist (der asm code vergleicht hier also mit 9A), führt der asm code oben den sprung nicht durch - also der code wird ausgeführt - während meine umsetzung den code überspringt (da das ergebnis von if false ist)

jaenicke 28. Jun 2009 21:08

Re: 2 zeilen asm code der in delphi code umgewandelt werden
 
Crosspost inkl. Antwort... (keine Geduld... und dann nichtmal den Crosspost angeben... :roll: )
http://www.delphi-forum.de/viewtopic.php?p=569146

DOCa Cola 28. Jun 2009 21:10

Re: 2 zeilen asm code der in delphi code umgewandelt werden
 
stimmt, jetzt weis ich was ich vergessen habe. danke für deine mühe

Satty67 28. Jun 2009 21:15

Re: 2 zeilen asm code der in delphi code umgewandelt werden
 
Assembler ist jetzt gar nicht meine Stärke, würde es aber eher so umsetzen
Delphi-Quellcode:
if (m_objType and 255) = $c0 then

DOCa Cola 28. Jun 2009 21:24

Re: 2 zeilen asm code der in delphi code umgewandelt werden
 
Zitat:

Zitat von Satty67
Assembler ist jetzt gar nicht meine Stärke, würde es aber eher so umsetzen
Delphi-Quellcode:
if (m_objType and 255) = $c0 then

ja, stimmt. das scheint auch so zu funktionieren wie der code den ich geschrieben habe, nur leider nicht wie der beschriebene assembly code...

jaenicke 28. Jun 2009 21:38

Re: 2 zeilen asm code der in delphi code umgewandelt werden
 
Naja, was heißt nicht wie der Assemblercode... der Ablauf ist eben unterschiedlich...
Delphi:
Delphi-Quellcode:
if Bitsgesetzt then
begin
  // Bits gesetzt
end
else
begin
  // Bits nicht gesetzt
end;
Assembler:
Code:
test ... // Bits gesetzt?
je Sprungziel
... // Bits nicht gesetzt
Sprungziel:
... // Bits gesetzt
Das heißt wie ich im DF schon geschrieben habe: Die Logik ist eben genau umgekehrt, deshalb der Hinweis auf <> statt = ...

DOCa Cola 28. Jun 2009 23:25

Re: 2 zeilen asm code der in delphi code umgewandelt werden
 
so, die lösung ist das man die werte auf diese weise verwendet, dann generiert delphi auch ähnlichen asm code
Delphi-Quellcode:
if (m_objType and $c0) > 0 then
trotzdem vielen dank für die unterstützung!

jaenicke 28. Jun 2009 23:27

Re: 2 zeilen asm code der in delphi code umgewandelt werden
 
Damit prüfst du, ob eines der angegebenen Bits gesetzt ist. Nicht, ob alle gesetzt sind.

DOCa Cola 28. Jun 2009 23:29

Re: 2 zeilen asm code der in delphi code umgewandelt werden
 
ja, das scheint der asm code oben auch zu machen, da lag mein (denk)fehler, aber da wir anscheinend alle zu wenig asm kenntnisse haben ist das niemandem aufgefallen :lol:


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:13 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