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
 
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#5

Re: Delphi und Assembler

  Alt 18. Jun 2005, 11:01
Delphi-Quellcode:
function ReverseBits(Value,Len : integer) : integer;
begin
asm
    mov edx,Value
    mov ecx,Len
1.) das zusätzliche begin end muß raus
2.) Parameter überigt Delphi standardäßig in den Registern EAX,EDX,ECX
3.) ergo: EAX=Value und EDX=Len
4.) mit mov edx, Value -> mov edx,eax und
5.) mit mov ecx, Len -> mov ecx,edx überschreibst du deine Parameter so daß nachfolgender Pseudocode dies verdeutlicht
6.) mov edx, Value; mov ecx, Len; wäre also mov Len, Value; mov ecx, Len

du überschreibst also deine eigenen Parameter !! so kann das nicht funktionieren.

Mein Tipp an dich: vergiß in deiner Situation in Assembler programmieren zu wollen. Der Compiler erzeugt aus reinem PASCAL Code sehr wohl ausreichend guten Assembler.

Delphi-Quellcode:
function GetReversedBits(AValue: Cardinal; ALen: Byte): Cardinal;
// AValue = EAX; ALen = EDX
asm
   test edx, edx
   jz @Exit // ALen == 0 ??
   sub ecx, ecx // ECX == @Result := 0
@Start:
   shr eax, 1 // AValue div 2
   adc ecx, ecx // @Result = @Result + @Result + Ord(previous AValue)
   dec edx
   jnz @Start
   mov eax, ecx
@Exit:
end;
- shr, shl sind auf heutigen Rechnern langsammer als ADD/ADC/SUB/SBB (Stichworte Pipelines, Instruction Shuffling)
- loop arbeitet nur auf register CX und nicht ECX auf einigen CPU's
- Kombinationen aus dec Register; branch Adresse; sind schneller als der Loop OpCode
- Avalue und @Result sollten Cardinal sein, Integer ist Vorzeichenbehaftet und der OpCode SHR arbeitet ohne Vorzeichen
- ALen sollte der kleinstmögliche Datentyp sein, da theoretisch ALen >= 32 wenig Sinn macht

Gruß Hagen
  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 16:39 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