![]() |
AW: einzelne bytes in ein 4-byte int umwandeln
Wenn es nicht 64-Bit sein muß, dann ginge auch noch sowas:
Delphi-Quellcode:
var
b1,b2,b3,b4: byte; begin Int:=$ABCDEF42; asm mov eax,Int mov b4,al mov b3,ah shl eax,2 mov b2,al mov b1,ah end; end; |
AW: einzelne bytes in ein 4-byte int umwandeln
Zitat:
Delphi-Quellcode:
Heißen?
shl eax,16
Gruß K-H |
AW: einzelne bytes in ein 4-byte int umwandeln
Wow an eine inline assembly lösung dachte ich gar nicht. (Zum glück habe ich mir das vor ein paar wochen angefangen anzueignen :D)
So gehts: (shr eax, 16 ; wars ;))
Delphi-Quellcode:
danke :)
procedure TForm1.btn1Click(Sender: TObject);
var LInt : integer; LB1, LB2, LB3, LB4 : Byte; begin LInt := $DEADBEEF; asm mov eax, LInt mov LB4, al mov LB3, ah shr eax, 16 mov LB2, al mov LB1, ah end; ShowMessage( IntToHex(LB1, 2) + IntToHex(LB2, 2) + IntToHex(LB3, 2) + IntToHex(LB4, 2) ); end; |
AW: einzelne bytes in ein 4-byte int umwandeln
Von inline Assembly würde ich abraten. Ist zwar tatsächlich schneller, als die vom Delphi Compiler ziemlich hirnlos generierte Übersetzung des Pascal Äquivalents, aber:
Wenn du es doch umbedingt verwenden willst, dann solltest du dran denken volatile Register zu preserven:
Delphi-Quellcode:
In der Standard Calling-Convention von Delphi wird EAX zwar final als Return-Value verwendet, aber theoretisch steht es dem Compiler frei auch mitten in der Funktion irgendwelche Werte in EAX abzulegen, die vielleicht nach deinem Assembler Block nochmal gebraucht werden.
asm
push eax .. pop eax end; |
AW: einzelne bytes in ein 4-byte int umwandeln
stimmt, danke für den hinweis! =)
|
AW: einzelne bytes in ein 4-byte int umwandeln
Die ersten zwei Punkte kann man in diesem speziellen Fall nun wirklich ignorieren. Ein Kommentar hin und gut ist.
Weiterhin lassen sich manche Dinge in inline-ASM wirklich elegant lösen (wie dieses hier z.B. oder auch Little-Endian nach Big-Endian z.B.) - aber auch das sind nur maximal 4-Zeiler und mehr als das würde auch ich nicht empfehlen in Inline-ASM. Genug OT ;) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13: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 by Thomas Breitkreuz