Wäre wirklich schön, wenn mir damit jemand helfen könnte, der sich besser damit auskennt.
Ich habe mich mal daran gemacht einige Assemblerfunktionen zu schreiben, um ein wenig dazuzulernen, ob
asm bei so etwas sinnvoll ist, sei mal dahin gestellt.
Folgende Funktion soll zusammenhängendes Byte einer Variable oder Instanz löschen (mit 0 füllen).
Delphi-Quellcode:
procedure ByteLoeschen(p: Pointer;
Index: Byte);
assembler;
asm
mov EDX, 0FFFFFF00h
mov CL, BL
sal Cl, 3
//Linksverschiebung mit Anhängen von Nullen, *2*2*2
STC
//setze Carry-Flag, um kein Bit zu verlieren
rcl EDX, CL
//Rechtsverschuebung mit Anhängen des Carry-Flags, setzt Carry-Flag
and [EAX], EDX
end;
Das Ganze funktioniert so weit auch ganz gut, meine Frage ist mehr, ob diese Lösung effektiv ist, oder wie "der übliche Weg" für so etwas aussieht (ohne im Pointer gleich den Anfang des zu löschenden Bytes zu übergeben).
asm wird ja normalerweise nur benutzt, um Code möglichst effektiv zu gestalten.