Übung Assembler 1 - Aufgabe 1

Bitte arbeitet im 1. Teil der Übung die folgende Beschreibung am Rechner nach :

Für den Pseudocodebefehl steht der MOV-Befehl zur Verfügung Dieser Befehl unterstützt diverse Adressierungsarten. Die einfachste Adressierungsart ist der Direktoperand, d.h. der zur Laufzeit verwendete Wert ist Bestandteil des Befehls. So wird beispielsweise mit zur Laufzeit der Wert 0200 ins AX-Register geschrieben, oder mit zur Laufzeit der Wert 41 ins DL-Register geschrieben.

Es soll nun ein Programm zur Zeichenausgabe entwickelt werden. Dabei hilft die DOS-Funktion "Zeichen über die Standardausgabe ausgeben". Wie (fast) alle DOS-Funktionen wird sie durch das Auslösen des Software-Interrupts 21 aufgerufen. Im AH-Register wird der DOS-Funktionscode (hier 02) und im DL-Register der ASCII-Code des auszugebenden Zeichens erwartet.

Zunächst wird das Debug-Programm gestartet :

Anschließend wird vom Debug-Kommandomodus in den Assembliermodus gewechselt (der erste Befehl soll - oder besser muß - an der Adresse 0100 stehen) Nun können die notwendigen Assemblerbefehle eingegeben werden : Abschließend wird der Assembliermodus durch die Eingabe einer Leerzeile (einfach die RETURN-Taste drücken) zwecks Rückkehr in den Debug-Kommandomodus verlassen.

Mit dem Unassemble-Befehl kann die Byte- bzw. Bitfolge in die Assembler-Schreibweise disassembliert werden :

Nun soll noch eine COM-Datei entstehen, um das Programm zur Zeichenausgabe z.B. von der MSDOS-Eingabeaufforderung aus starten zu können.

Mit dem Name-Befehl wird der Programmname vergeben : Wähle ein anderes beschreibbares Verzeichnis sofern C:\WORK nicht zur Verfügung steht

Im Registerpaar BX:CX wird die Länge des Programms erwartet, die in unserem Beispiel 0008 Bytes beträgt (Der Unassemble-Befehl hilft bei der Ermittlung der Bytelänge). Mit dem Register-Befehl können Registerinhalte betrachtet und verändert werden : Mit dem Write-Befehl wird die COM-Datei auf der Festplatte angelegt : Der Quit-Befehl beendet das Debug-Programm : Durch Eingabe von C:\WORK\CHAR auf der MSDOS-Eingabeaufforderung wird das Programm zur Zeichenausgabe gestartet.

Das Debug-Programm liest ausschließlich von der Standardeingabe und schreibt ausschließlich auf die Standardausgabe. Daher können die obigen Eingaben auch mit dem persönlich bevorzugten Editor z.B. in der Datei C:\WORK\CHAR.DBG hinterlegt werden

um anschließend per Umlenkung der Standardeingabe dem Debug-Programm als Eingabe zu dienen : Da die COM-Datei nur ein Abbild des Hauptspeichers darstellt, kann ihr Inhalt einfach mit in das Debug-Programm geladen werden.

Bitte entwickelt im 2. Teil der Übung ein Programm (abgespeichert als COM-Datei MP1A.COM) folgender Funktionalität :

Was macht das Programm überhaupt ? Die bei der Benutzung des Debug-Programms getätigten Eingaben sollen in der Datei MP1A.DBG hinterlegt werden.

Bitte entwickelt im 3. Teil der Übung ein Programm (abgespeichert als COM-Datei MP1B.COM) folgender Funktionalität :

Was macht das Programm überhaupt ? Die bei der Benutzung des Debug-Programms getätigten Eingaben sollen in der Datei MP1B.DBG hinterlegt werden.

Im 4. und letzten Teil der Übung wird der Abstraktionsgrad gegenüber den vorherigen Teilen ein wenig gesteigert :

Entwickle mit dem Tool DEBUG ein COM-Programm zur Ausgabe des Alphabets in folgendem Format :
A * B * C * D * E * F * G * H * I * J * K * L * M * N * O * P * Q * R * S * T * U * V * W * X * Y * Z
Die Ausgabe des Alphabets mittels der DOS-Funktion "Zeichenkettenausgabe" (DOS-Funktionscode : 09) gilt als unzulässig. Gesucht ist vielmehr eine geeignete Schleife, in der u.a. die DOS-Funktion "Zeichenausgabe" (DOS-Funktionscode : 02) aufgerufen wird. Beachte ferner, das sich weder vor dem ersten noch hinter dem letzten Buchstaben ein Sternchen befindet. Der Alphabetausgabe soll ein mittels DOS-Funktion "Zeichenkettenausgabe" (DOS-Funktionscode : 09) ausgegebener Begrüßungstext vorangehen. Ein Zeilenwechsel ist durch die Ausgabe der Zeichen CarriageReturn (ASCII-Code : 0D) und LineFeed (ASCII-Code : 0A) möglich.

Alle für die Erstellung des COM-Programms mit dem Tool DEBUG notwendigen Eingaben sind in der Datei MP1C.DBG zu hinterlegen.

Zur Verdeutlichung der Funktionalität mag eine vorherige Implementierung mit Turbo Pascal hilfreich sein.

Als weitere Hilfe möge die nachfolgende Zusammenstellung der meisten in den ersten zwei Vorlesungsvormittagen behandelten (vereinfacht dargestellten) Befehlsformate dienen :

MOV Register,Direktoperand MOV Register,Register
ADD Register,Direktoperand ADD Register,Register
ADC Register,Direktoperand ADC Register,Register
SUB Register,Direktoperand SUB Register,Register
SBB Register,Direktoperand SBB Register,Register
MUL Register  
DIV Register  
INT Nummer  
RCL Register,1  
RCR Register,1  
STC  
CLC  
CMC  
LOOP Adresse  
CMP Register,Direktoperand CMP Register,Register
JE/JNE Adresse  
JL/JLE/JGE/JG Adresse  
JB/JBE/JAE/JA Adresse  
JMP Adresse  

Stand: 31.10.2005 (Birger Wolter)