Was ist mit den Units passiert ?
Das Beispiel in der Hilfe funktioniert bei mir nicht mehr.
Der Compiler macht zwar eine Unit (.pcu) aber das
aufrufende Programm macht nichts.
Hintergrund :
Ich will mir eine Sammlung mit ASM geschriebenen Funktionen
anlegen. Also sowas :
Code
$L
ASM "FindMid3", 3
PUSH EBX
PUSH ECX
PUSH EDX
PUSH ESI
PUSH EDI
MOV ESI, Par1 // Zieladresse
MOV ECX, Par2 // Größe
MOV EDI, Par3 // Profan-Varibale als Fehlerflag
XOR EBX, EBX // EBX löschen, Anfangswert für Summierung
MOV [EDI], EBX // Fehlerflag löschen
CLD
DEC ECX
PUSH ECX // Anzahl Einträge notieren
JMP @@smSchleife
@@smErr: // Bei Überlauf
POP EAX
MOV ECX, -1 // Fehlerwert
MOV [EDI], ECX // Fehlerflag-Variable setzen
JMP @@smEnd // Und zum Ende
@@smSchleife:
//xor ebx, ebx
LODSD // Wert lesen
// für später (noch einbauen):
// Abstand EBX zum MaxMin-Wert $7FFFFFFF-$FFFFFFFF muß kleiner
// sein als EAX abhängig von den Vorzeichen
ADD EBX, EAX // Gelesenen Wert zu EBX addieren
JO @@smErr // Bei Überlauf raus
LOOP @@smSchleife // Wiederholen bis ECX = 0
MOV EAX, EBX // Summe nach EAX
XOR EDX, EDX // EDX löschen für Division EDX:EAX / ECX
CMP EAX, 0 // ist negativ Zahl in EAX
JG @@smNoN // Nein
DEC EDX // sonst negatives Vorzeichen nach EDX
@@smNoN:
POP ECX // notierte Anzahl Einträge zurückholen
IDIV ECX // Summe durch Anzahl Einträge
// Érgebnis steht in EAX
@@smEnd:
POP EDI
POP ESI
POP EDX
POP ECX
POP EBX
EndASM
Proc ?_Mittelwert
Parameters Long arrayadrr, size, fehler
Return FindMid3(arrayaddr, size, fehler)
EndProc
Alles anzeigen
Interessant wäre in diesem Zusammenhang jetzt auch noch, wenn man einen Namensraum der
ASM-Routine direkt vergeben könnte
Es scheint auch so, daß keine Rückgabewerte (RETURN) gehen.
Hat das schon jemand getestet ?