Einzelnen Beitrag anzeigen

Muetze1
(Gast)

n/a Beiträge
 
#4

Re: Delphi & ASM - Integer umdrehen

  Alt 4. Sep 2007, 20:27
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);
  Mit Zitat antworten Zitat