Assembler-Routine portieren: x86 auf x64
Hallo in die Runde,
ich habe eine Verständnisfrage. Habe folgende Assembler-Routine erstellt:
Programmier-Umgebung:
Lazarus-Pascal 1.2.4. mit fpc 2.6.4
Ist Teil einer Iterationsschleife zur Berechnung der Mandelbrot-Menge. Das habe ich auf einem 32-bit Windows 7 laufen und das funkt. klasse.
Ich möchte das Ganze nun auf ein 64-bit Windows 7 System bringen.
Frage: Macht es Sinn, das Modul entspr. anzupassen? Und wenn ja, was müsste ich ändern?
In Sachen Assembler bin ich leider absolute Niete - für das Ding hier habe ich Wochen gebraucht ...
Gruß
ANKH
ich habe eine Verständnisfrage. Habe folgende Assembler-Routine erstellt:
ASM
{x:=SQR(x)-SQR(y)+r:}
FLD x {x laden}
FST xalt {entspr. x:=xalt}
FMUL ST,ST {SQR(x) bilden}
FLD y {y laden}
FMUL ST,ST {SQR(y) bilden}
FSUBP ST(1),ST {SQR(x)-SQR(y) bilden, Stack poppen}
FLD r {r laden}
FADDP ST(1),ST {SQR(x)-SQR(y)+r bilden, Stack poppen}
FSTP x {x speichern}
//y:=2*xalt*y+i:
FLD Mult {Mult laden}
FLD y {y laden}
FLD xalt {xalt laden}
FMULP ST(2),ST {Mult*xalt bilden, Stack poppen}
FMULP ST(1),ST {Mult*xalt*y bilden, Stack poppen}
FLD i {i laden}
FADDP ST(1),ST {Mult*y*xalt+i bilden, Stack poppen}
FSTP y {y speichern}
INC v {entspr. dem Pascal-Befehl INC(v) }
FLD x {x laden}
FMUL ST,ST {SQR(x) bilden}
FLD y {y laden}
FMUL ST,ST {SQR(y) bilden}
MOV AL,IsBMode {IsBMode in AL laden}
OR AL,AL {ODER-Verknüfung mit sich selbst, verändert den Wert nicht, setzt aber Flags!}
{Die beiden letzten Zeilen stellen einen logischen Vergleich folgender Art dar:}
{MOV AL,1 --> entspr. TRUE}
{TEST IsBMode,AL}
{Die ODER-Verknüfung ist jedoch schneller und benötigt weniger Code!}
JNZ @SetBMode {bedingter Sprung: "Jump if no zero flag set", d.h. wenn IsBMode=TRUE, d.h.: 1 UND 1 = 1 in TEST}
FADDP ST(1),ST {SQR(x)+SQR(y) bilden, Stack poppen}
JMP @StoreLimit {unbedingter Sprung, überspringen der nächsten Zeile}
@SetBMode:
FMULP ST(1),ST {SQR(x)*SQR(y) bilden, Stack poppen}
@StoreLimit:
FSTP Limit {ST(0) in Limit speichern, Stack poppen}
END;
Programmier-Umgebung:
Lazarus-Pascal 1.2.4. mit fpc 2.6.4
Ist Teil einer Iterationsschleife zur Berechnung der Mandelbrot-Menge. Das habe ich auf einem 32-bit Windows 7 laufen und das funkt. klasse.
Ich möchte das Ganze nun auf ein 64-bit Windows 7 System bringen.
Frage: Macht es Sinn, das Modul entspr. anzupassen? Und wenn ja, was müsste ich ändern?
In Sachen Assembler bin ich leider absolute Niete - für das Ding hier habe ich Wochen gebraucht ...
Gruß
ANKH
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 246696
Url: https://administrator.de/forum/assembler-routine-portieren-x86-auf-x64-246696.html
Ausgedruckt am: 22.12.2024 um 19:12 Uhr
4 Kommentare
Neuester Kommentar
Moin,
Warum meinst Du, daß es nötig wäre da etwas anzupassen?
x86-Maschinencode its ein Subset der 64-Bit-prozessoren. Du mußt die x64-erweiterungen nicht nutzen, außer Du benötigst entsprechend große Datenstrukturen oder Adressraum.
hast Du es einfach mal probiert, ob das so auch in Deinem 64-bit-Windows funktioniert? Oder willst Du "doppelt genau" rechnen?
lks
Warum meinst Du, daß es nötig wäre da etwas anzupassen?
x86-Maschinencode its ein Subset der 64-Bit-prozessoren. Du mußt die x64-erweiterungen nicht nutzen, außer Du benötigst entsprechend große Datenstrukturen oder Adressraum.
hast Du es einfach mal probiert, ob das so auch in Deinem 64-bit-Windows funktioniert? Oder willst Du "doppelt genau" rechnen?
lks
Zitat von @AnkhMorpork:
Das läuft optimal unter 64-bit, keine Frage. Möchte einfach nur was dazulernen.
Das läuft optimal unter 64-bit, keine Frage. Möchte einfach nur was dazulernen.
Dann probier doch einafch die doppelt genauen Berechnungen aus. udn miß mal, wie sich das auf das ergebnis udn die berechnungszeien auswirkt.
lks