Technische Universität München, Fakultät für Informatik

 
LRR-TUM
Lehr- und Forschungseinheit Informatik X
Rechnertechnik und Rechnerorganisation/ Parallelrechnerarchitektur
TUM-INFO

Praktikum Technische Grundlagen der Informatik

Software für den Bereich Maschinennahe Programmierung (80x86)


Aufgabe im Bereich Maschinennahe Programmierung ist die Entwicklung einer in 80x86-Assembler geschriebenen Routine, die unter Verwendung des 80x87-Coprozessors numerische Berechnungen mit reellen Zahlen durchführt.
Dabei ist die Assembler-Routine von einem vorgegebenen, in C geschriebenen Rahmenprogramm aus aufzurufen.
Zum Austesten der Routine müssen das C-Programm compiliert, die zu entwickelnde Routine assembliert und die daraus entstandenen beiden Object-Dateien zusammengebunden werden.

Die Entwicklungsumgebung kann frei zwischen DOS oder LINUX gewählt werden.

Hierzu sind folgende Werkzeuge zu verwenden:
 

Hinweise:

DOS:
Da DOS standardmäßig kein 32-Bit Speichermodell unterstützt und es bei Verwendung von 16 Bit C-Compilern in Verbindung mit NASM häufig Probleme mit dem Linken gibt, ist das frei verfügbare Paket DJGPP zu installieren. Dieses beinhaltet eine komplette 32-Bit Entwicklungsumgebung für DOS einschließlich Compiler, Linker und Debugger. Das ZIP-File ist in ein geeignetes Verzeichnis (z.B. c:\djgpp) zu entpacken. Weiterhin sind die entprechenden Umgebungsvariablen in c:\autoexec.bat zu setzen:

        set DJGPP=c:\djgpp\djgpp.env
        set PATH=c:\djgpp\bin;%PATH%

Dann ist das System neu zu starten.  Nach dem Neustart ist folgender Befehl aufzurufen:

        go32-v2

Es sollte eine Meldung über den verfügbaren Speicherplatz ausgegeben werden.
Das DJGPP-Paket ist jetzt verwendbar.

Die Homepage für DJGPP findet sich hier.
 

LINUX:
Mit Ausnahme des Assemblers nasm sind die erforderlichen Werkzeuge unter LINUX bereits vorhanden. Je nachdem, welche libc-Version die LINUX-Version verwendet, muß das entsprechende rpm-Paket (für libc5 oder libc6) mittels

    rpm -i <Paketname>

unter root-Rechten installiert werden.
 

Compilieren und Linken (DOS und LINUX):
Das Erzeugen des ausführbaren Programms erfolgt am besten mit Hilfe des von UNIX her bekannten Befehls make, der ebenfalls Teil der DJGPP-Distribution ist. Hierzu wird allerdings eine Steuerdatei, das sogenannte Makefile, benötigt, in dem angegeben ist, welche Quelldateien zu verarbeiten sind. Im folgenden ist als Beispiel ein Makefile zur Erzeugung eines Programms calctest (LINUX) bzw. calctest.exe (DOS). Die entsprechende Datei ist unter dem Namen Makefile abzuspeichern. Das C-Programm befinde sich in read.c, die Assembler-Routine in calc.asm.

        CFLAGS= -g
all:
        nasm -f <Ausgabeformat> calc.asm
        gcc -c -g readbla.c
        gcc -o calctest calc.o readbla.o -lm

Achtung: bei eingerückten Zeilen ist im Makefile TAB zu verwenden!
Zu beachten ist außerdem noch das Ausgabeformat für nasm: Unter DOS muß hier coff verwendet werden, unter LINUX elf oder aout.
 

Debugging (DOS):

Im DJGPP-Paket sind mehrere Debugger enthalten. Zum einen lassen sich mit der Benutzeroberfläche RHIDE, die der von Borland bekannten Turbo-C bzw. Turbo-Pascal Oberfläche nachempfunden ist, Debug-Operationen durchführen
(Aufruf: rhide <Programmname>).

Optional kann man auch den Debugger rhgdb direkt verwenden
(Aufruf: rhgdb <Programmname>).

Eine kommandozeilenorientierte Version von gdb steht ebenfalls zur Verfügung
(Aufruf: gdb <Programmname>).

Darüber hinaus bietet der Debugger fsdb die Möglichkeit, die Register der 80x87 Coprozessoreinheit zu untersuchen
(Aufruf: fsdb <Programmname>, Hilfe  mit F1).

Debugging (LINUX):

Unter LINUX kann der Debugger gdb, und die darauf aufsetzenden grafischen Versionen xxgdb, mxgdb, kdbg, ddd etc. verwendet werden. Eine Liste verschiedener Debugger findet sich hier.
 

Weitere Links

  • Informationen zur Intel 80x87 Floating Point Unit gibt es hier und hier.

  •  
  • Ein exemplarisches  Framework  zur Einbindung von Assembler-Code in ein C-Programm in gzipped tar  (UNIX) bzw. ZIP (DOS).

  •  
  • Die Homepage für den Assembler NASM mit Binaries für DOS und LINUX.

  •  
  • Beispieldateien für die Projekte zur Messwerteverarbeitung
    Carsten Trinitis, 27 March 2001