Einzelnen Beitrag anzeigen

Schorschi5566

Registriert seit: 6. Feb 2006
197 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#1

Portierungsproblem mit Assembler, Register

  Alt 6. Jun 2011, 20:23
Hallo DP,

ich versuche die DEC-Library von Hagen nach Lazarus zu porten.

An einer Stelle in der CRC.pas bekomme ich die Fehlermeldung:

Fatal: Syntax error, "identifier" expected but "register" found
Delphi-Quellcode:
// initilaize CRC Definition with a custom Algorithm
function CRCSetup(var CRCDef: TCRCDef; Polynomial, Bits, InitVector, FinalVector: Cardinal; Inverse: LongBool): Boolean;

implementation

function CRCSetup(var CRCDef: TCRCDef; Polynomial, Bits, InitVector,
  FinalVector: Cardinal; Inverse: LongBool): Boolean; register;
asm // initialize CRCDef according to the parameters, calculate the lookup table
       CMP ECX,8
       JB @@8
       PUSH EBX
       PUSH EDI
       PUSH ESI
       MOV [EAX].TCRCDef.Polynomial,EDX // <<< Hier kommt der Fehler!
       MOV [EAX].TCRCDef.Bits,ECX
       MOV EBX,InitVector
       MOV EDI,FinalVector
       MOV ESI,Inverse
       MOV [EAX].TCRCDef.CRC,EBX
       MOV [EAX].TCRCDef.InitVector,EBX
       MOV [EAX].TCRCDef.FinalVector,EDI
       MOV [EAX].TCRCDef.Inverse,ESI
       XOR EDI,EDI
       LEA EBX,[ECX - 8]
       SUB ECX,32
       DEC EDI
       NEG ECX
       SHR EDI,CL
       MOV [EAX].TCRCDef.Shift,EBX
       MOV [EAX].TCRCDef.Mask,EDI
       TEST ESI,ESI
       JZ @@5
       XOR EBX,EBX
       MOV ECX,[EAX].TCRCDef.Bits
@@1: SHR EDX,1
       ADC EBX,EBX
       DEC ECX
       JNZ @@1
       NOP
       MOV ECX,255
       NOP
@@20: MOV EDX,ECX
       SHR EDX,1
       JNC @@21
       XOR EDX,EBX
@@21: SHR EDX,1
       JNC @@22
       XOR EDX,EBX
@@22: SHR EDX,1
       JNC @@23
       XOR EDX,EBX
@@23: SHR EDX,1
       JNC @@24
       XOR EDX,EBX
@@24: SHR EDX,1
       JNC @@25
       XOR EDX,EBX
@@25: SHR EDX,1
       JNC @@26
       XOR EDX,EBX
@@26: SHR EDX,1
       JNC @@27
       XOR EDX,EBX
@@27: SHR EDX,1
       JNC @@28
       XOR EDX,EBX
@@28: MOV [EAX + ECX * 4],EDX
       DEC ECX
       JNL @@20
       JMP @@7
@@5: AND EDX,EDI
       ROL EDX,CL
       MOV EBX,255
// can be coded branchfree
@@60: MOV ESI,EBX
       SHL ESI,25
       JNC @@61
       XOR ESI,EDX
@@61: ADD ESI,ESI
       JNC @@62
       XOR ESI,EDX
@@62: ADD ESI,ESI
       JNC @@63
       XOR ESI,EDX
@@63: ADD ESI,ESI
       JNC @@64
       XOR ESI,EDX
@@64: ADD ESI,ESI
       JNC @@65
       XOR ESI,EDX
@@65: ADD ESI,ESI
       JNC @@66
       XOR ESI,EDX
@@66: ADD ESI,ESI
       JNC @@67
       XOR ESI,EDX
@@67: ADD ESI,ESI
       JNC @@68
       XOR ESI,EDX
@@68: ROR ESI,CL
       MOV [EAX + EBX * 4],ESI
       DEC EBX
       JNL @@60
@@7: POP ESI
       POP EDI
       POP EBX
@@8: CMC
       SBB EAX,EAX
       NEG EAX
end;
Kommt Free Pascal nicht mit "register" klar? Aber dann müsste doch der Fehler schon bei der Deklaration kommen, oder?

Oder kann mir bitte jemand helfen, den ASM-Code umzuschreiben, so dass die Parameterübergabe ganz normal ohne register funktioniert?


Grüße,
Uwe
Uwe
"Real programmers can write assembly code in any language." - Larry Wall
Delphi programming rocks
  Mit Zitat antworten Zitat