Prof. Dr. K. Wüst Fachhochschule Gießen-Friedberg Fachbereich MNI Klausur zu "Maschinennahe Programmierung", 16.7.1999 ---------------------------------------------------- Nachname: . . . . . . . . . . . . Vorname: . . . . . . . . . . Matrikelnummer: . . . . . . . . . mögliche Punkte erreicht ---------------------------------------------------------- Aufgabe 1 4 Aufgabe 2 4 Aufgabe 3 5 Aufgabe 4 5 Aufgabe 5 7 ---------------------------------------------------------- Summe 20 Note: Benutzen Sie die Rückseiten der Aufgabenblätter, falls der Platz auf der Vorderseite nicht reicht! 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: xor dx,dx mov ax,5 mov bx,2 div bx div bx mov cx,092A2h sub cl,ch xor ch,ch or bx,cx rol bx,1 AX = ....... BX = ....... CX = ....... DX = ....... Aufgabe 2 ========= Der INT 11h ("Peripherie-Liste") gibt Auskunft über die angeschlossene Peripherie. Er gibt im Register AX ein Geräteperipherie-Wort zurück, in dem unter anderem auf den Bits 14 und 15 die Anzahl der angeschlossenen Drucker als 2-Bit-Zahl gespeichert ist. INT 11h: Vor Aufruf: keine Parameter zu übergeben Nach Aufruf: Geräteperipherie-Wort in AX Schreiben Sie eine Assemblerprozedur, die die Anzahl der angeschlossenen Drucker in einem Register zurückgibt! Beschreiben Sie auch die Schnittstelle der Prozedur (Parameterübergabe, veränderte Register)! Klausur zu "Maschinennahe Programmierung", 4.3.98 - Seite 2 Aufgabe 3 ========= Die folgende C-Funktion erhält als Eingabe-Parameter einen Großbuchstaben. Dieser wird in den zugehörigen Kleinbuchstaben verwandelt und als Funktionswert zurückgegeben. Ist der übergebene Parameter kein Großbuchstabe, soll der Wert 0 zurückgegeben werden. Ergänzen Sie die fehlenden Befehle in Inline-Assembler! Hinweis: 'A'=65, 'Z'=90, 'a'=97, 'z'=122. unsigned char toLower(unsigned char Buchstabe) { unsigned char c; _asm { } return c; } Aufgabe 4 ========= Schreiben Sie in Assembler eine Prozedur die einen im Speicher liegenden Datenblock untersucht, und die Häufigkeit der darin vorkommenden Zeichen (8-Bit-Zeichen) ermittelt (Bis max. 255). Speichermodell SMALL. Die Schnittstelle der Funktion ist wie folgt gegeben: Vor Aufruf: BX = Zeiger auf den zu untersuchenden Datenblock DI = Zeiger auf Feld von Häufigkeitszählern zu je 8 Bit Nach Aufruf: - Veränderte Register: ............................................... Aufgabe 5 ========= Von einem Compiler soll in einer einer 32-Bit-Umgebung (Flaches Speichermodell) aus einem C++-Programm Assemblercode erzeugt werden. Überlegen Sie, welcher Assemblercode durch die drei Befehle in der Funktion "test" erzeugt werden könnte. Machen Sie Vorschläge für funktionsfähigen Assemblercode und tragen Sie die Assemblerbefehle auf den gepunkteten Linien ein! Kein Stackframe! int test(void) { int **p; ......................................... **pp=4711h; ......................................... ......................................... ......................................... return 0; ......................................... }