AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Delphi und Assembler

Ein Thema von HolgX · begonnen am 17. Jun 2005 · letzter Beitrag vom 18. Jun 2005
 
HolgX

Registriert seit: 16. Jun 2005
2 Beiträge
 
#1

Delphi und Assembler

  Alt 17. Jun 2005, 23:28
Hallo

Ich weiß nicht, ob das in dieses Forum gehört, aber ein besseres ist mir nicht eingefallen.
Mein Problem war, dass ich mich mit Bit-Operationen befassen mußte, welche bekanntermaßen in Delphi nicht sonderlich unterstützt werden. Also hab ich auf den Assembler zurückgegriffen (mit dem Teil bin ich aufgewachsen), aber leider...

Angeblich sollen alle Anweisungen (laut Borland bis mindestens 386) implementiert sein. Das stimmt so nicht, bis Turbo-Pascal klappte alles reibungslos, aber ich hatte bereits ab Delphi 4 Probleme damit. Nun wollte ich mit Delphi 7 eine Bitvertauschung durchführen (Stichwort Huffman), gabs auch schonmal im Forum, der Code hat mir aber nicht gefallen.
Also selber coden. Folgender Ansatz:

Delphi-Quellcode:
function ReverseBits(Value,Len : integer) : integer;
begin
asm
    mov edx,Value
    mov ecx,Len
    xor eax,eax
@1: shr edx,1
    rcl eax,1
    loop @1
  end;
end;
Prima, Delphi meckert nicht, alles Klasse. Ergebnis: Nur Nullen, buchstäblich. Was heißen soll, daß diese LOOP-Anweisung nicht funktioniert oder anders gesagt, nur der Form halber akzeptiert wird.
Weiter:
Man richte seine Aufmerksamkeit auf die beiden ersten Zeilemn unter "asm". Die habe ich so aus der Delphi-Hilfe übernommen, nur andere Namen verwendet. Wie ich schon sagte, es klappt nicht. Beide Register (EDX und ECX) enthalten immer die gleichen Werte, nämlich den ersten, der im Prozedurkopf steht.

Wenn ich statt dessen das mache, was ich eigentlich nicht wollte (als Assembler-Programmierer *****), funzt es:

Delphi-Quellcode:
function ReverseBits(Value,Len : integer) : integer;
var
 v,l : integer;
begin
  v:=Value; // das könnte man weglassen und mov edx, value schreiben
  l:=Len; // das aber nicht
  asm
    mov edx,v
    mov ecx,l
    xor eax,eax
@1: shr edx,1
    rcl eax,1
    dec cx
    jnz @1 // LOOP funktioniert leider nicht
    mov Result,eax
  end;
end;
Daß diese Assembler-Geschichte nicht zum eigentlichen Bestandteil von Delphi gehort, ist mir schon klar. Aber wenn es schon angeboten wird, sollte es auch funktionieren. Zumal man damit einige Probleme ziemlich einfach erschlagen kann.

Hat jemand schon mal ähnliche Erfahrungen gemacht?

Bis dann, HolgX

[edit=Christian Seehase]Delphi-Tags gesetzt. Bitte künftig selber machen. Danke. Mfg, Christian Seehase[/edit]
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:57 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-2025 by Thomas Breitkreuz