Dokumentation

 Bedienungsanleitung für FPTEST.EXE

Das Beispielprogramm wird vom DOS-Prompt aus durch die Eingabe von FPTEST gestartet. Es berechnet die Summe zweier vom Benutzer eingegebenen Zahlen mittels der FP-Befehle des Prozessors und durch Aufruf der Assemblerroutine. Darüber hinaus wird gemessen, wie lange die Addition jeweils dauert.

Damit die einfache Eingabe von Werten möglich ist, die einen Überlauf hervorrufen, muß zusammen mit jedem Summanden noch durch ein Komma getrennt ein Exponent zur Basis 2 eingegeben werden. Er bewirkt, daß die Zahl mit 2Exponent multipliziert wird. So verursacht z.B. zweimaliges Eingeben von 1, 16383 einen Überlauf.

Das Programm durchläuft eine Endlosschleife und fordert nach der Ausgabe der Ergebnisse den Benutzer zur erneuten Eingabe von Summanden auf. Die Eingabe von zwei Summanden 0, 0 oder die Tastenkombination Strg-C beenden diese Schleife.

 Verwendung in eigenen C-Programmen

Die Assemblerroutine, die die Addition durchführt, kann auch von eigenen C-Programmen aus aufgerufen werden. hierzu müssen lediglich folgende Anweisungen zu Beginn des C-Quelltexts eingefügt werden:

void fpadd(long double, long double, long double*);
int fpadd_v;

Außerdem muß beim Compilieren der Assembler-Quelltext assembliert und anschließend mit dem C-Programm gelinkt werden. Der Compiler führt diese Schritte automatisch durch, wenn an das Aufrufkommando "fpadd.asm" angehängt wird, also z.B.:

bcc -IE:Bc5\Include -LE:\Bc5\Lib meinprogramm.c fpadd.asm

Die Funktion fpadd() kann jetzt aufgerufen werden. Hierbei sind die ersten zwei Argumente (die Summanden) Zahlen vom Typ long double, das dritte ein Zeiger auf ein long double. Der Wert dieser dritten Variable ist beim Eintritt in die Funktion ohne Bedeutung; er wird lediglich mit dem Ergebnis überschrieben.

Das Flag fpadd_v wird von fpadd() auf -1 gesetzt, wenn ein Überlauf stattfindet, ansonsten wird ihm der Wert 0 zugewiesen. Um etwaige Überläufe während der Addition abzufangen, sollte fpadd_v im Anschluß an die Addition abgefragt werden, z.B. so:

fpadd(erstersummand, zweitersummand, &ergebnis); /* Addition durchführen */
if (fpadd_v) {
  fprintf(stderr, "Overflow-Fehler!"); /* Fehlermeldung */
  exit(1); /* Programmabbruch */
}

 zurück 01. 04. 1998 - Richard Atterer, Korbinian Herrmann, Florian Müller