Übung Assembler 1 - Aufgabe 5
Entwickle zunächst ein möglichst allgemein verwendbares Unterprogramm zum Ausgeben einer 16-Bit ganzen Zahl ohne Vorzeichen in einem Zahlensystem zwischen der Basis 2 und 36 über die Standardausgabe.
Die Parameterübergabe erfolgt per DX- und AX-Register; das DX-Register enthält die auszugebende Zahl, und das AX-Register die Zahlensystemsbasis.
Anschließend soll jenes Unterprogramm von einem Programm (EXE-Format) aufgerufen werden, welches fortlaufend Zeichen über die Standardeingabe einliest und wie folgt reagiert :
- 1 : Erhöhung auszugebender Zahl um 1000
- 2 : Erhöhung auszugebender Zahl um 100
- 3 : Erhöhung auszugebender Zahl um 10
- 4 : Erhöhung auszugebender Zahl um 1
- 7 : Verminderung auszugebender Zahl um 1000
- 8 : Verminderung auszugebender Zahl um 100
- 9 : Verminderung auszugebender Zahl um 10
- 0 : Verminderung auszugebender Zahl um 1
- + : Erhöhung Zahlensystemsbasis um 1 (Obergrenze: 36)
- - : Verminderung Zahlensystemsbasis um 1 (Untergrenze: 2)
- = : Programmende
Jedes gültige Eingabezeichen führt zu einer Zahlenausgabe (ergänzt jeweils um die dezimale Ausgabe der Zahlensystemsbasis).
Begonnen wird mit der Zahl Null im Dezimalsystem.
Die Behandlung eines Überlaufs der auszugebenden Zahl ist nicht gefordert.
Um einen Eindruck vom Programmablauf zu erhalten könnt Ihr hier eine Demo nebst Eingabedaten und berechneten Ausgabedaten herunterladen.
Übung Assembler 1 - Aufgabe 6
Entwickle ein EXE-Programm, welches wiederholt jeweils ein Zeichen ohne Echo von der Standardeingabe einliest, dessen Position in der Zeichentabelle QUELL sucht, und anschließend die Zahl an derselben Position in der Worttabelle ZIEL als Dezimalzahl über die Standardausgabe ausgibt.
Sollte das eingegebene Zeichen nicht in QUELL enthalten sein, wird statt einer Zahl ein Fragezeichen über die Standardausgabe ausgegeben.
Die Verarbeitung endet durch Eingabe des ESC-Zeichens (ASCII-Code: 1Bh).
Der Code zur Ausgabe der Dezimalzahl über die Standardausgabe soll in einem separaten Modul (Quellcode) angeordnet sein.
Zur Lösung dieser Aufgabe gilt die Verwendung des nachfolgenden Programmgerüstes als verbindlich.
EXTRN DEZOUT:FAR
CSEG SEGMENT
ASSUME CS:CSEG,DS:DSEG
MAIN PROC
MOV AX,DSEG
MOV DS,AX
...
ENDE: MOV AX,4C00h
INT 21h
MAIN ENDP
...
CSEG ENDS
DSEG SEGMENT
QUELL DB "ACBEDGFIHKJMLONQPSRUTWVYXZ"
ZIEL DW 41,43,42,45,44,47,46,49,48,
52,51,54,53,56,55,58,57,61,
59,63,62,65,64,67,66,68
DSEG ENDS
SSEG SEGMENT STACK
DW 128 DUP (?)
SSEG ENDS
END MAIN
Liebe angehende Technische Informatikassistenten des 3. Semesters :
Dies ist die letzte Übung Assembler 1 dieses Semesters.
Für die nun folgende Klausurperiode wünscht das PTL-Team viel Erfolg.
Das Fach Assembler 1 findet im 4. Semester seine Fortsetzung in den Fächern
Assembler 2 (Dirk Ahrens) und Microcontroller (Bernd Albrecht und Rene Bodaine).
Stand: 03.01.2006 (Birger Wolter)