Debugger Compilerschalter für Qword Ptr ?

Für Fragen rund um die Ide und zum Debugger
Antworten
br_klaus
Beiträge: 244
Registriert: Do 21. Jan 2010, 22:33
OS, Lazarus, FPC: Windows Vista (L 0.9.31 FPC 2.5.1)
CPU-Target: 32Bit
Wohnort: z.z. Brasilien, sonst 82335 Berg-Leoni (südlich von München)

Debugger Compilerschalter für Qword Ptr ?

Beitrag von br_klaus »

Hallo,

zunächst bitte ich um Entschuldigung, daß ich dieselbe Frage gerade erst unter "Sonstiges" gestellt hatte. Ich habe jetzt erst gemerkt, daß Debugger unter IDE läuft.

Also mein Problem ist folgendes:

Ich bin gerade dabei, mich mit KOL anzufreunden, damit kann man sehr kleine Programmdateien erstellen (statt 11-16 MB wie in Lazarus vielleicht 150 bis 400 KB). Die arbeiten viel mit Objekten und Zeigern auf Objekte und auch sehr viel mit ausgeklügelten Assembler-Anweisungen, um den Programmcode möglichst klein zu halten.
Da bin ich auf folgendes Problem gestoßen (beim Versuch, die Komponente CxKOLTiffJpg zu kompilieren).


Beim Kompilieren von

Code: Alles auswählen

procedure _extra_pool_slap;
  asm
    DD 00H
    DD 01338H
 end;
und dann

Code: Alles auswählen

asm 
    MOV ESI, DWORD PTR _extra_pool_slap[ESI*4]
  end;
erhalte ich eine Errormeldung wegen Inkompatibilität mit imm32.
Wenn ich jedoch PTR weglasse, dann geht es. Aber ob dann noch das gleiche Ergebnis herauskomt?

Und die folgende Prozedur

Code: Alles auswählen

procedure _reala_3ff000000000000; // einfach der Wert $3ff000000000000
  asm
    DQ 03F0000000000000H
  end;
erzeugt die Compilermeldung: kann HEX-Zahl nicht berechnen.
Wenn ich es umschreibe (wie oben _extra_pool_slap) in 2 DWORDs

Code: Alles auswählen

asm
   DD 00000000H
   DD 03FF0000H
end;
dann geht es.

Jedoch beim Versuch, dann dieses hier zu kompilieren:

Code: Alles auswählen

asm
   fld   QWORD  PTR  _reala_3ff000000000000
end;
kommt wieder eine Compilermeldung, daß das nicht geht.

Gibt es da eine spezielle Compilereinstellung, mit der diese ASM-Anweisungen problemlos gelesen werden können?

Herzlichen Dank,
P. Nikolaus

Benutzeravatar
theo
Beiträge: 10859
Registriert: Mo 11. Sep 2006, 19:01

Re: Debugger Compilerschalter für Qword Ptr ?

Beitrag von theo »

Wieso machst du einen Doppelpost?

Deine Frage ist sowieso eher ein Fall für die FPC Mailing-Liste.

marcov
Beiträge: 1102
Registriert: Di 5. Aug 2008, 09:37
OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
CPU-Target: 32/64,PPC(+64), ARM
Wohnort: Eindhoven (Niederlande)

Re: Debugger Compilerschalter für Qword Ptr ?

Beitrag von marcov »

br_klaus hat geschrieben:
zunächst bitte ich um Entschuldigung, daß ich dieselbe Frage gerade erst unter "Sonstiges" gestellt hatte. Ich habe jetzt erst gemerkt, daß Debugger unter IDE läuft.

Also mein Problem ist folgendes:

Ich bin gerade dabei, mich mit KOL anzufreunden, damit kann man sehr kleine Programmdateien erstellen (statt 11-16 MB wie in Lazarus vielleicht 150 bis 400 KB).
Arbeiten Sie noch auf Floppy disks ? :roll:
Die arbeiten viel mit Objekten und Zeigern auf Objekte und auch sehr viel mit ausgeklügelten Assembler-Anweisungen, um den Programmcode möglichst klein zu halten.
Da bin ich auf folgendes Problem gestoßen (beim Versuch, die Komponente CxKOLTiffJpg zu kompilieren).

Beim Kompilieren von

Code: Alles auswählen

procedure _extra_pool_slap;
  asm
    DD 00H
    DD 01338H
 end;
und dann

Code: Alles auswählen

asm 
    MOV ESI, DWORD PTR _extra_pool_slap[ESI*4]
  end;
erhalte ich eine Errormeldung wegen Inkompatibilität mit imm32.
Wenn ich jedoch PTR weglasse, dann geht es. Aber ob dann noch das gleiche Ergebnis herauskomt?
Welcher FPC target? Jene opcode ist nur fuer 32-bit. In 64-bit wird den Fehler behoben wenn man ptr weglasst, aber der Bedeutung ändert sich dan.

Wenn es 64-bit ist, dann soll entweder ein anderen, 64-bit spezifischer Teil der Code kompiliert werden, oder den Code ist grundsätzlich nicht lauffähig unter 64-bit. (was logisch ist, fuer Minimallisten wie Kol, die Praktische Anwendungen davon sind mehr fuer WinCE)
Und die folgende Prozedur

Code: Alles auswählen

procedure _reala_3ff000000000000; // einfach der Wert $3ff000000000000
  asm
    DQ 03F0000000000000H
  end;
erzeugt die Compilermeldung: kann HEX-Zahl nicht berechnen.
Wenn ich es umschreibe (wie oben _extra_pool_slap) in 2 DWORDs

Code: Alles auswählen

asm
   DD 00000000H
   DD 03FF0000H
end;
dann geht es.
Das ist Äquivalent.
Jedoch beim Versuch, dann dieses hier zu kompilieren:

Code: Alles auswählen

asm
   fld   QWORD  PTR  _reala_3ff000000000000
end;
kommt wieder eine Compilermeldung, daß das nicht geht.

Code: Alles auswählen

[/quote]

Das ist etwas ganz anders.

[quote]
Gibt es da eine spezielle Compilereinstellung, mit der diese ASM-Anweisungen problemlos gelesen werden können?
[/quote]

Dies ist alles sehr Spezialisiert. 

1) wenn es ein 64-bit Target ist, soll man sich zuerst befragen ob KOL das überhaupt unterstützt

2) wenn es 32-bit ist, soll man sich fragen, worum es nicht funktioniert bevor man quasi random anfängt Code zu ändern. Stimmt die Version mit diejene die vom KOL Team empfohlen wird?

Und natürlich konnte man die KOL Leute selber fragen.

br_klaus
Beiträge: 244
Registriert: Do 21. Jan 2010, 22:33
OS, Lazarus, FPC: Windows Vista (L 0.9.31 FPC 2.5.1)
CPU-Target: 32Bit
Wohnort: z.z. Brasilien, sonst 82335 Berg-Leoni (südlich von München)

Re: Debugger Compilerschalter für Qword Ptr ?

Beitrag von br_klaus »

Ich habe nur 32 Bit Windows 7 (bzw Windows Vista) und FPC 2.6.0. Ich denke, dann muß das wohl daran liegen, daß da igendwo übesehen wurde, ein {$IFndef Win32} o.ä. einzufügen und dann entsprechenden alternativen Code.
QWord ist ja 64 Bit.

Aber was mich trrotzdem wundert, ist, daß es bei MOV ESI, DWORD PTR xxx[esi*4] Schwierigkeiten mit PTR gibt, das ist ja alles 32Bit.
Vielleicht geht es mit aufteilen in mehrere Schritte:

Code: Alles auswählen

push EAX
push EBX
mov EBX, PTR xxx
mov EAX, ESI   
shl EAX,2
add EBX,EAX   // geht das nicht noch einfacher, mit LEA oder ähnlich, da kenne ich mich zu wenig aus
mov ESI, [EBX]
pop EBX
pop EAX
Ich werde mal den umgebenden Code für die anderen Probleme posten, damit ich weiß, wie ich dasselbe Ergebnis in 32Bit Assemlber bekomme.
Jedenfalls schon mal herzlchen Dank für die Antwort.

hde
Beiträge: 556
Registriert: Mi 11. Aug 2010, 02:56

Re: Debugger Compilerschalter für Qword Ptr ?

Beitrag von hde »

Wenn ich es richtig sehe, kennt KOL-CE nur 32 bit
hde

br_klaus
Beiträge: 244
Registriert: Do 21. Jan 2010, 22:33
OS, Lazarus, FPC: Windows Vista (L 0.9.31 FPC 2.5.1)
CPU-Target: 32Bit
Wohnort: z.z. Brasilien, sonst 82335 Berg-Leoni (südlich von München)

Re: Debugger Compilerschalter für Qword Ptr ?

Beitrag von br_klaus »

hde hat geschrieben:Wenn ich es richtig sehe, kennt KOL-CE nur 32 bit
hde
Dann vers4tehe ich aber nicht, wieso da Qwords verwendet werden. Die sind doch 64 Bit?

marcov
Beiträge: 1102
Registriert: Di 5. Aug 2008, 09:37
OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
CPU-Target: 32/64,PPC(+64), ARM
Wohnort: Eindhoven (Niederlande)

Re: Debugger Compilerschalter für Qword Ptr ?

Beitrag von marcov »

br_klaus hat geschrieben:
hde hat geschrieben:Wenn ich es richtig sehe, kennt KOL-CE nur 32 bit
hde
Dann vers4tehe ich aber nicht, wieso da Qwords verwendet werden. Die sind doch 64 Bit?
qwords nicht. int64 und qword 64-bit Typen existieren auch auf 32-bit. Sowie auch comp, aber den soll man besser vergessen :-)

Aber wen man ein qword versucht zu laden ist das nicht moeglich in asm. Die register sind noch immer 32-bit. (ausnahme, comp, aber der soll man vergessen)

Aber es soll kein 64-bit im Spiel sein. Dann kann es fast alles sein. Falscher KOL, falscher FPC, KOL nicht detektiert FPC nicht gut und man soll FPC manuell in Delphi Modus bringen usw.

Also zuerst sollen wir ein Schritt zurück nehmen, und die basis Kontrolieren:

- Welcher FPC 2.6.0 32-bit win32
- Welcher KOL ?
- Soll dieser version von KOL dieser version von FPC unterstuetzen?
- Soll dieser version von KOL dieser version von FPC automatisch unterstuetzen? Oder soll man zuerst etwas machen? (zb -Sd oder ein mitgelieferten Batchfile nutzen)

br_klaus
Beiträge: 244
Registriert: Do 21. Jan 2010, 22:33
OS, Lazarus, FPC: Windows Vista (L 0.9.31 FPC 2.5.1)
CPU-Target: 32Bit
Wohnort: z.z. Brasilien, sonst 82335 Berg-Leoni (südlich von München)

Re: Debugger Compilerschalter für Qword Ptr ?

Beitrag von br_klaus »

marcov hat geschrieben:
br_klaus hat geschrieben:
hde hat geschrieben:

Dann kann es fast alles sein. Falscher KOL, falscher FPC, KOL nicht detektiert FPC nicht gut und man soll FPC manuell in Delphi Modus bringen usw.

Also zuerst sollen wir ein Schritt zurück nehmen, und die basis Kontrolieren:

- Welcher FPC 2.6.0 32-bit win32
- Welcher KOL ?
- Soll dieser version von KOL dieser version von FPC unterstuetzen?
- Soll dieser version von KOL dieser version von FPC automatisch unterstuetzen? Oder soll man zuerst etwas machen? (zb -Sd oder ein mitgelieferten Batchfile nutzen)
Ich habe Windws 7 (bzw Vista) 32 bit. FPC natürlich auch 32 it. KOL die letzte Version (3.17)
Ich mußte schon {$mode delphi} setzen, damit der Compiler anstandslos die asm-Anweisungen akzeptierte (sonst hätte ich jedesmal am Ende des Prozedurnamens Asembler; hinzufügen müssen.
Bei anderen Projekten gibt es auch keine Schwierigkeit, nur bei diesen speziellen asm-Anweisungen. Die scheinen wohl für 64-Bit-Rechner gedacht?

marcov
Beiträge: 1102
Registriert: Di 5. Aug 2008, 09:37
OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
CPU-Target: 32/64,PPC(+64), ARM
Wohnort: Eindhoven (Niederlande)

Re: Debugger Compilerschalter für Qword Ptr ?

Beitrag von marcov »

br_klaus hat geschrieben: . Die scheinen wohl für 64-Bit-Rechner gedacht?
Das dachte ich zuerst, aber fld qword ptr ist ein comp, also das kann denk ich auch (?) in 32-bit.

br_klaus
Beiträge: 244
Registriert: Do 21. Jan 2010, 22:33
OS, Lazarus, FPC: Windows Vista (L 0.9.31 FPC 2.5.1)
CPU-Target: 32Bit
Wohnort: z.z. Brasilien, sonst 82335 Berg-Leoni (südlich von München)

Re: Debugger Compilerschalter für Qword Ptr ?

Beitrag von br_klaus »

marcov hat geschrieben:[quote="br_klaus" . Die scheinen wohl für 64-Bit-Rechner gedacht?
Das dachte ich zuerst, aber fld qword ptr ist ein comp, also das kann denk ich auch (?) in 32-bit.[/quote]

Hatte vergesen zu sagen, daß das nicht KOL war, sondern "normales" Lazarus mit LCL etc.
Und da kann ich das, was das Programm selber macht und was der Assembler-Debugger auch anzeigt (mit fildl...) , nicht sleber in einer asm-Anweisung erzeugen, was mich schon sehr wundert...

Antworten