Zitat von
quendolineDD:
Dabei brauch doch das
ASM einen Wert der zum Beispiel so aussieht: $123456. Und so sehen doch immer nur die Pointer aus ... (btw. vlt auch doch nicht :-\ )
Das ist einfach nur eine hexadezimale Darstellung der Zahlen. Diese ist durch die Basis von 16 platzsparender und effektiver als die Angabe in dezimalen System (Basis von 10).
Zitat von
quendolineDD:
Aber der Wert, welcher dabei herauskommt ist ganz und gar nicht "umgedreht".
Das sieht nur so aus.
Zitat von
quendolineDD:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var nmbr: integer;
begin
nmbr:= StrToInt(Edit1.Text);
asm
mov edx, nmbr;
bswap edx;
mov nmbr, edx;
end;
Label1.Caption := inttostr(nmbr);
end;
So ist es richtig.
Zitat von
quendolineDD:
Geb ich nun zum Beispiel "123456" ein, erhalte ich als Rückgabewert in das Label folgende Zahl: "1088553216".
Er dreht die einzelnen Bytes um und von daher arbeitet er auf der Basis von 256 und nicht auf der Basis von 10, so wie du es ausgibst. Da die Basis von 256 schlecht auszugeben ist, nutze einfach die Basis von 16 (hexadezimal), weil dort ergeben 2 Stellen eine Basis von 256. Somit siehst du dann eher was er macht.
Also: gebe in dein Editfeld mal $12345678 ein und die Ausgabe kannst du auch wieder hexadezimal gestalten:
Label1.Caption := inttohex(nmbr, 8);