![]() |
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:
ich habe versucht es in delphi so umzusetzen:
TEST BYTE PTR DS:[ECX+1D4], 0C0
JE *adresse*
Delphi-Quellcode:
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)
if (m_objType and $c0) = $c0 then
|
Re: 2 zeilen asm code der in delphi code umgewandelt werden
Crosspost inkl. Antwort... (keine Geduld... und dann nichtmal den Crosspost angeben... :roll: )
![]() |
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
|
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
|
Re: 2 zeilen asm code der in delphi code umgewandelt werden
Zitat:
|
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:
Assembler:
if Bitsgesetzt then
begin // Bits gesetzt end else begin // Bits nicht gesetzt end;
Code:
Das heißt wie ich im DF schon geschrieben habe: Die Logik ist eben genau umgekehrt, deshalb der Hinweis auf <> statt = ...
test ... // Bits gesetzt?
je Sprungziel ... // Bits nicht gesetzt Sprungziel: ... // Bits gesetzt |
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:
trotzdem vielen dank für die unterstützung!
if (m_objType and $c0) > 0 then
|
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.
|
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 10:40 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 by Thomas Breitkreuz