AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen FreePascal FreePascal Portierungsproblem mit Assembler, Register
Thema durchsuchen
Ansicht
Themen-Optionen

Portierungsproblem mit Assembler, Register

Ein Thema von Schorschi5566 · begonnen am 6. Jun 2011 · letzter Beitrag vom 18. Mai 2012
 
Schorschi5566

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

AW: Portierungsproblem mit Assembler, Register

  Alt 15. Jun 2011, 17:02
Hallo Hagen,

danke für die Antworten. Das Problem war eigentlich schon gelöst.

Der Delphi-Mode war schon eingeschaltet.

MOV CRCDef.Polynomial,EDX ist ja nix anderes als MOV [EAX].TCRCDef.Polynomial, EDX das würde schon passen, denke ich...

Dieses Problem ist wohl noch zu lösen. Allerdings ist der ASM-Anteil am DEC doch recht hoch und es geht dann mit solchen Sachen weiter...

Generating PIC, but reference is not PIC-safe
Da musste ich erstmal googlen, was das überhaupt bedeutet. Es geht um die Verwendbarkeit des Codes in DLLs unter Linux, oder so.
Wenn ich auf die Art weiterporte kommt hinten garantiert irgendwas raus, was sich zwar kompilieren lässt, aber mit DEC nicht mehr allzuviel zu tun haben dürfte.


Das PIC-Problem trat hier auf, wenn ich mich nicht irre: (Handelt sich wohl um eine globale Referenz auf FCRC16. Könnte man vielleicht lösen, wenn man FCRC16 als Parameter übergibt)

Delphi-Quellcode:
function CRC16(CRC: Word; const Buffer; Size: Cardinal): Word;
asm
       JECXZ @@2
       PUSH EDI
       PUSH ESI
       MOV EDI,ECX
{$IFDEF PIC}
       MOV ESI,[EBX].FCRC16 // hier kracht's auch! Not PIC-Safe
{$ELSE}
       MOV ESI,FCRC16
{$ENDIF}
       XOR ECX,ECX
       TEST ESI,ESI
       JZ @@3
@@1: MOV CL,[EDX]
       XOR CL,AL
       SHR EAX,8
       INC EDX
       XOR EAX,[ESI + ECX * 4]
       DEC EDI
       JNZ @@1
       POP ESI
       POP EDI
@@2: RET
@@3: PUSH EAX
       PUSH EDX
       CALL CRC16Init
       MOV ESI,EAX
       XOR ECX,ECX
       POP EDX
       POP EAX
       JMP @@1
end;
Der Fehler kommt unabhängig davon ob PIC definiert ist oder nicht.


Wahrscheinlich wird es noch einige Stellen im Code von DEC geben, über die FPC oder Lazarus stolpert. Wenn ich dich dann jedesmal nerven darf, würde ich weitermachen.


Grüße,
Uwe
Uwe
"Real programmers can write assembly code in any language." - Larry Wall
Delphi programming rocks
  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 18:35 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