Prof. Dr. K. Wüst Fachhochschule Gießen-Friedberg Fachbereich MNI Klausur zu "Maschinennahe Programmierung", 4.3.1998 --------------------------------------------------- Nachname: . . . . . . . . . . . . Vorname: . . . . . . . . . . Matrikelnummer: . . . . . . . . . mögliche Punkte erreicht ---------------------------------------------------------- Aufgabe 1 4 Aufgabe 2 4 Aufgabe 3 5 Aufgabe 5 7 ---------------------------------------------------------- Summe 20 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 bl,2 not bl neg bl xor bh,bh mov cx,0D2E2h sub cl,ch xor ch,ch mov dx,1 mov ax,0046h shr ax,1 div cx AX = ....... BX = ....... CX = ....... DX = ....... Aufgabe 2 ========= Schreiben Sie eine Assemblerprozedur, die mehrmals von einer vorgegebenen I/O-Portadresse ein Byte liest und die eingelesenen Bytes als Block fortlaufend an einer vorgegebenen Adresse im Speicher ablegt. Die Schnittstelle sei wie folgt aufgebaut: Vor Aufruf: BX = I/O-Portadresse CX = Anzahl einzulesender Bytes ES = Segmentanteil der Startadresse des Speicherbereiches SI = Offsetanteil der Startadresse des Speicherbereiches Nach Aufruf: AX = erstes am Port eingelesenes Byte Klausur zu "Maschinennahe Programmierung", 4.3.98 - Seite 2 Aufgabe 3 ========= Schreiben Sie eine Assemblerprozedur, die zu einer übergebenen positiven Zahl die Fakultät bildet. Führen Sie auch eine einfache Fehlerbehandlung durch: Es soll angezeigt werden, wenn das Register BX zu klein ist für das Ergebnis. Tragen Sie in der Schnittstellenbeschreibung ein, wie der Fehler angezeigt wird. Die Schnittstelle soll sein: Vor Aufruf: AX = Zahl, deren Fakultät berechnet werden sollI/O-Portadresse Nach Aufruf: BX = berechnete Fakultät ..... = Fehler! Ergebnis zu groá für BX. Beispiel: Bei Aufruf der Prozedur ist AX=4, dann muss bei Rückkehr aus der Prozedur BX=24 sein ( 1*2*3*4 = 24 ) Aufgabe 4 ========= Schreiben Sie in Assembler eine externe Funktion, die aus C- oder C++ Programmen aufgerufen werden kann, und einen String auf dem Bildschirm ausgibt. Der Prototyp der Funktion soll lauten: int zeige_string(char **p); Der String soll Zero-terminiert sein (ASCIIZ). Die Funktion soll vom Typ int sein und die Anzahl der ausgegebenen Zeichen zurückgeben. p ist ein Zeiger auf einen Zeiger, der auf das erste Zeichen des Strings zeigt. Die Ausgabe kann mit der DOS-Funktion 02h gemacht werden: Vor Aufruf: AH = 02h (Funktionsnr) DL = auszugebendes Zeichen Nach Aufruf: -