Prof. Dr. K. Wüst Fachhochschule Gießen-Friedberg Fachbereich MNI Klausur zu "Maschinennahe Programmierung", 22.1.97 -------------------------------------------------- Nachname: . . . . . . . . . . . . Vorname: . . . . . . . . . . Matrikelnummer: . . . . . . . . . Studiensemester: . . . . mögliche Punkte erreicht ---------------------------------------------------------- Aufgabe 1 4 Aufgabe 2 4 Aufgabe 3 4 Aufgabe 4 4 Aufgabe 5 8 ---------------------------------------------------------- Summe 24 Note: Benutzen Sie die Rückseiten der Aufgabenblätter, falls der Platz auf der Vorderseite nicht reicht! Falls Sie Befehle verwenden, die über den 8086-Befehlssatz hinausgehen, bitte kennzeichnen! Aufgabe 1 ========= Geben Sie bitte in hexadezimaler Schreibweise an, welchen Inhalt die Register AX, BX, CX und DX nach dem Durchlaufen des folgenden Programmstückes haben: mov dx,1 mov ax,5503h mov bx,100h div bx ror ax mov cx,0040h ror bx,1 rol cx,1 l1: dec bx loop l1 inc bx AX = ....... BX = ....... CX = ....... DX = ....... Aufgabe 2 ========= Schreiben Sie eine Assemblerprozedur, die im Register AX die Bildschirmbreite in Textspalten zurückgibt. Diese ist auf den Speicherplätzen 40:4A und 40:4B als Wort gespeichert. Klausur zu "Maschinennahe Programmierung", 22.1.97 - Seite 2 Aufgabe 3 ========= Schreiben Sie eine Assemblerprozedur, die feststellt, ob der angeschlossene Drucker noch Papier hat. Sie können dazu die Funktion 02 "Lies Druckerstatus" des INT 17h verwenden: INT 17h Vor Aufruf: AH = 02 Lies Druckerstatus Nach Aufruf: AH = Druckerstatusbyte, darin: Bit5=1: Papierende! Die Assemblerroutine soll das Carry-Flag setzen, wenn noch genug Papier da ist. Aufgabe 4 ========= Der INT 11h (ein BIOS-Aufruf) gibt Auskunft über die Ausstattung Ihres PC. Nach seinem Aufruf findet man im Register AX auf dem Feld von Bit 9 bis Bit 11 die Anzahl der angeschlossenen RS232-Karten. Vervollständigen Sie untenstehende Inline-Assembler-Funktion, die diese Anzahl zurückgibt! int Anzahl_RS232(void) { } Aufgabe 5 ========= Schreiben Sie in Assembler eine externe Funktion, die aus C- oder C++ Programmen aufgerufen werden kann, und zurückgibt, wieviele Zeichen einer im C/C++ Programm definierten Zeichenkette Ziffern sind, d.h. Zeichen zwischen '0' und '9'. Das C/C++ Programm soll im Speichermodell SMALL übersetzt sein, der Prototyp der Funktion soll lauten: int Ziffern( char *Zeichenkette);