AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Assembler: 0 ms für 50 Mio Durchläufe einer Funktion?
Thema durchsuchen
Ansicht
Themen-Optionen

Assembler: 0 ms für 50 Mio Durchläufe einer Funktion?

Ein Thema von moritz · begonnen am 31. Jan 2005 · letzter Beitrag vom 31. Jan 2005
 
moritz

Registriert seit: 18. Apr 2003
1.037 Beiträge
 
#1

Assembler: 0 ms für 50 Mio Durchläufe einer Funktion?

  Alt 31. Jan 2005, 20:24
Sers Leute,

angeregt von dem Thema über das verdunkeln einer Farbe habe ich mich heute hingesetzt, und dazu eine Funktion in Assembler geschrieben. Herausgekommen ist folgendes:
Delphi-Quellcode:
function Darken2(Value: TColor; Percentage: Byte): TColor;
var Buffer: Array[0..3] of Byte;
asm
  PUSHA

  MOV EBX, Value
  XOR ECX, ECX
  MOV CX, 3
  @@CLC:
    MOV AL, BL
    MUL Percentage
    MOV DL, $64
    DIV DL
    MOV byte ptr buffer[3], al
    SHR buffer, 8
    SHR EBX, 8

    SUB CX, 1
    CMP CX, 0
    JNE @@CLC
  //LOOP @@CLC

  MOV EAX, Buffer
  MOV Result, EAX
  POPA
end;
Das Loop ist deswegen kommentiert, weil es komischerwiese nicht ging. Er hat einfach weitergemacht, obwohl CX 3 war. Deswegen habe ich es selber geschrieben.
Jetzt meine Frage: Ich prüfe mit folgender Funktion die Zeit, die die Ausführung benötigt:
Delphi-Quellcode:
var Start: Int64;
    I: Integer;
begin
  Start:=GetTickCount;
  for I:=0 to 50000000 do
   Darken2(clRed, 50);
  ShowMessage(IntToStr(GetTickCount-Start));
KANN es sein, dass ich 0ms rausbekomme? (AMD Athlon 3000+) Die gleiche Delphi-Funktion
Delphi-Quellcode:
function Darken(Value: TColor; Percentage: Byte): TColor;
type PP = ^DWord;
var Buffer: Array[0..3] of Byte;
    I: Integer;
begin
  PP(@Buffer)^ := Value;
  for I:=0 to 2 do
    Buffer[I] := (Buffer[I] * Percentage) DIV 100;
  Result := PP(@Buffer)^;
end;
benötigt etwa 5000ms

Irgendwie ist das Komisch, und ich finde keinen Fehler

Gruß, Moritz
"Optimistisch ist diejenige Weltanschauung, die das Sein höher als das Nichts stellt und so die Welt und das Leben als etwas an sich Wertvolles bejaht."
Albert Schweitzer
  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 12:19 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 by Thomas Breitkreuz