Einzelnen Beitrag anzeigen

Assertor

Registriert seit: 4. Feb 2006
Ort: Hamburg
1.296 Beiträge
 
Turbo C++
 
#15

AW: Der DEC x32 ASM in x64/PurePascal Konvertierungsthread

  Alt 8. Jan 2012, 12:55
So, weiter geht es (*):
Delphi-Quellcode:
function DoRndBuffer(Seed: Cardinal; var Buffer; Size: Integer): Cardinal; assembler;
// comparable to Borlands Random() function
asm
      AND EDX,EDX
      JZ @@2
      AND ECX,ECX
      JLE @@2
      PUSH EBX
@@1: IMUL EAX,EAX,08088405H // 134775813
      INC EAX
      MOV EBX,EAX
      SHR EBX,24
      MOV [EDX],BL
      INC EDX
      DEC ECX
      JNZ @@1
      POP EBX
@@2:
end;

function RandomSystemTime: Cardinal; assembler;
// create Seed from Systemtime and PerformanceCounter
var
  SysTime: record
    Year: Word;
    Month: Word;
    DayOfWeek: Word;
    Day: Word;
    Hour: Word;
    Minute: Word;
    Second: Word;
    MilliSeconds: Word;
    Reserved: array [0..7] of Byte;
  end;
  Counter: record
    Lo,
    Hi: Integer;
  end;
asm
      LEA EAX,SysTime
      PUSH EAX
      CALL GetSystemTime
      MOVZX EAX,Word Ptr SysTime.Hour
      IMUL EAX,60
      ADD AX,SysTime.Minute
      IMUL EAX,60
      MOVZX ECX,Word Ptr SysTime.Second
      ADD EAX,ECX
      IMUL EAX,1000
      MOV CX,SysTime.MilliSeconds
      ADD EAX,ECX
      PUSH EAX
      LEA EAX,Counter
      PUSH EAX
      CALL QueryPerformanceCounter
      POP EAX
      ADD EAX,Counter.Hi
      ADC EAX,Counter.Lo
end;
Bei RandomSystemTime wird es tricky: QueryPerformanceCounter in RandomSystemTime ist natürlich ein No-Go für Crossplatform, also bleibt nur PurePascal.

Kennt da jemand was, was auch FPC versteht? Wie gesagt, ich arbeite nicht mit FPC, das hier ist nur für die Vielen, die danach fragen... Ich muß erstmal die RTL von XE2 durchsuchen, ob es eine Win/OSX Kapselung gibt.

Falls sich jemand fragt, wie viel noch kommt: die CRC Funktionen (5 an der Zahl).

@Himitsu: Hattest Du nicht schonmal LHSZ für FPC bzw. x64 portiert? Ich meine mich da an irgendwas zu erinnern...

Ihr seid klasse Während hier Code gepostet wird, kann ich schon an anderer Stelle weitermachen - so könnte die DEC 6.0 wirklich was werden!

Gruß
Assertor

(*) Kein Edit, für die Benachrichtigung - Andreas hat ja gerade einen Lauf
Frederik
  Mit Zitat antworten Zitat