#include <stdio.h>
#include <float.h>
int main() {
float i;
for (i = 0; i < FLT_MAX; i++) {
printf("%f\n", i);
}
}
Wie oft wird diese Schleife ausgeführt werden? Warum? Demonstrieren Sie anhand von 32-bit breiten IEEE-Floating-Point Zahlen!
Schreiben Sie ein einfaches Assembler-Programm, das Floating-Point-Zahlen addiert. Beachten Sie, dass sie im Assembler-Quelltext keine Komma-Zahlen angeben können, Sie müssen von Hand den entsprechenden Zahlenwert eintippen.
Mein Hinweis: lasst euch von einem C-Programm die Zahlen übergeben.
Um zu gucken, wie C die x87-FPU nutzt benutzt die Kompilierflags -O0 -mfpmath=387
.
#include <stdio.h>
#include <inttypes.h>
// Unsere NASM-Funktion bekommt ein Zeiger auf das Array und die Anzahl der
// Elemente in dem Array übergeben
void bubble_sort(int64_t[], uint64_t);
unsigned int main() {
// Erstelle Array mit ein paar Zahlen
int64_t array[] = {6,8,2,6,-5,3,-1,9,8,0,6,4,5,-8,-4,3,2,6};
uint64_t num_elements = sizeof(array)/sizeof(int64_t);
int64_t i;
printf("groesse: %u\n", num_elements);
printf("vorher: ");
for (i = 0; i < num_elements; ++i) { printf("%i, ", array[i]); }
// Sortieren
bubble_sort(array,num_elements);
printf("\nnachher: ");
for (i = 0; i < num_elements; ++i) { printf("%i, ", array[i]); }
printf("\n");
return 0;
}
Gewünschte Ausgabe:
groesse: 18
vorher: 6, 8, 2, 6, -5, 3, -1, 9, 8, 0, 6, 4, 5, -8, -4, 3, 2, 6,
nachher: -8, -5, -4, -1, 0, 2, 2, 3, 3, 4, 5, 6, 6, 6, 6, 8, 8, 9,
Besprechung nächste Woche, da auch noch nicht in der Vorlesung behandelt.
BCD (Binary Coded Decimal) stellt ein spezielles binäres Format für Zahlen dar.
Jede Ziffer (0-9) wird durch 4 Bit (0000-1001) dargestellt.
Ziffern werden einzeln kodiert: 5629
wird als 0101 0110 0010 1001
kodiert.
Wir betrachten nur positive Zahlen.
bcd(5629)
sollte als Ergebnis 22057
liefern.
Wenn in B+V-Darstellung oder IEEE subtrahiert wird, dann müsst ihr eine schriftliche Subtraktion durchführen.
Dabei immer (betragsmäßig) größere Zahl minus (betragsmäßig) kleinere Zahl rechnen.
Und danach das Vorzeichen des Ergebnis bestimmen.
Umrechnen zwischen Zehner- und Zweiersystem
Einer-/Zweierkomplement, B+V
Darstellung und Rechnen mit IEEE-Zahlen
Normalisierung
IEEE ≠ R
diskrete Sprünge
es gibt Maximum/Minimum
Assembler
Calling Conventions
(Call-)Stack