Das OFFIZIELLE PROFAN SUPPORT FORUM
Einsteigerfragen
PROFAN-Programmierung
Helfer & Tools
Anregungen & Vorschläge
PROFAN-NEWS
Die Regeln!
2 - PROFAN-Programmierung

 Neues Thema  |  Zur Übersicht  |  Suchen  |  Einloggen   Vorherige Nachricht  |  Nächste Nachricht 
 XProfan X4 Inline-Assembler
Autor: Arndt Lindner (80.150.206.---)
Datum:   31.01.22 20:24

Ich möchte an dieser Stelle eine Lanze für den Inline-Assembler von XProfanX4 brechen. Er ist hinreichend eingeschränkt, so dass man keine großen Projekte damit angeht aber gleichzeitig hinreichend mächtig, um bestimmte Routinen zu beschleunigen. Das gilt insbesondere, wenn man Schleifen als Assemblerroutinen programmiert.
Ein kleines Beispiel möge das zeigten.
Eine Multiplikation quadratischer Matrizen in Profan
 Proc QMatMul_Profan
 Parameters double k1[], k2[]
 var longint m = sqrt(sizeof(k1[]))
 declare double x[m-1,m-1]
 Declare longint i, j, k, double w
   dec m
   for k, 0, m
     for j, 0,  m
       w = 0.0
       for i, 0, m
         w = w + k1[k,i]*k2[i,j]
       endfor
       x[k,j] = w
     endfor
   endfor
   return x[]
 EndProc
 

wird durch eine Assemblerimplementierung
 Proc QMatMul
 Parameters double k1[], k2[]
 var longint m  = sqrt(sizeof(k1[]))
 declare double x[m-1,m-1]
   aQMatMul(m,addr(x[0,0]),addr(k1[0,0]),addr(k2[0,0]))
   return x[]
 EndProc
 
 ASM "aQMatMul",4
   FINIT
   MOV   ESI,par1           'Dimension der Matrizen
   MOV   EAX,8
   MUL   ESI
   MOV   EDI,EAX            'Anzahl Byte pro Spalte
   MOV   EAX,par2           'Adresse Ergebnismatrix
   MOV   EDX,par3           'Adresse Matrix k1[]
   MOV   EBX,par4           'Adresse Matrix k2[]
   MOV   ECX,ESI
 sch2:
   PUSH  ECX
   PUSH  EBX
   PUSH  EDX
   PUSH  EAX
   MOV   ECX,ESI
 sch1:
   PUSH  ECX
   PUSH  EBX
   PUSH  EDX
   MOV   ECX,ESI
   FLDZ
 sch:
   FLD   QWORD PTR [EDX]
   FLD   QWORD PTR [EBX]
   ADD   EDX,EDI
   ADD   EBX,8
   FMUL
   FADD
   LOOP  sch
   FSTP  QWORD PTR [EAX]
   ADD   EAX,EDI
   POP   EDX
   POP   EBX
   ADD   EBX,EDI
   POP   ECX
   LOOP  sch1
   POP   EAX
   ADD   EAX,8
   POP   EDX
   ADD   EDX,8
   POP   EBX
   POP   ECX
   LOOP  sch2
 ENDASM
 

um einen Faktor von ca. 9000 beschleunigt. Matrizen mit einer Dimension größer als 50 lassen sich erst damit sinnvoll multiplizieren (OK man kann auch externe dlls einbinden).
Der abgespeckte Befehlsumfang des Inline-Assemblers ist aber sehr gut für den Einstieg in die Assemblerprogrammierung geeignet. Mir hat es richtig Spaß gemacht mal wieder etwas in Assembler zu programmieren. In den 1980iger Jahren habe viel Assembler für den Z80 und den PRS 4000 geschrieben. Seit 1990 aber nichts mehr. Es war also fast ein Neueinstieg.

Gruß
Arndt



 Beitrag beantworten  |  Foren-Liste  |  Alle Antworten   Neuerer Beitrag  |  Älteres Thema 

 Beiträge Autor  Datum
 XProfan X4 Inline-Assembler  Neu
Arndt Lindner 31.01.22 20:24 
 Re: XProfan X4 Inline-Assembler  Neu
p. specht 01.02.22 00:05 
 Re: XProfan X4 Inline-Assembler  Neu
Heinz Brill 01.02.22 07:40 
 Re: XProfan X4 Inline-Assembler  Neu
Arndt Lindner 01.02.22 13:33 


 Foren-Liste  |  Zur Registrierung 
 Benutzerlogin
 Benutzername:
 Passwort:
 Login-Daten speichern:
   
 Passwort vergessen?
E-Mail-Adresse oder Username unten eingeben. Dann wird Dir per e-Mail ein neues Passwort zugeschickt.

phorum.org