Lösung: Assemblerprogramm bearbeiten
2. Beschreiben Sie die Ausgabe des Programms!C:\>nasm count.asm -f bin -o count.com
C:\>count
Das Programm zählt rückwärts die eingegebenen einstellige Zahl bis auf 0 herunter.
3. Wie verhält
sich das Programm bei fehlerhaften Eingaben?
Wenn
das eingegebene Zeichen keines zwischen 0 und 1 wird die gleiche
Fehlermeldung ausgegeben und das Programm von vorne gestartet:
4. Was leisten die folgenden Assemblerbefehle?Zahl von 1-9 eingeben:
0
Fehler: Zahl ist nicht zwischen 1-9!
Zahl von 1-9 eingeben:
#
Fehler: Zahl ist nicht zwischen 1-9!
Zahl von 1-9 eingeben:
76543210
- cmp
Entspricht einer Subtraktion (sub), ohne dass einer der beiden Operanten verändert wird. Flags werden gesetzt!
- ja
jump on above, Operand 1 > Operand 2
- jb
jump if below, Operand 1 < Operand 2
- jmp
jump, unbedingter Sprung
5. Was leistet der MSDOS-Funktionsaufruf INT 21 mit den Codes
- 01h
Zeichen wird nach AL eingelesen
- 02h
Zeichen wird auf der Standardausgabe ausgeben
6. Kommentieren Sie den Quellcode!
7. Zeichnen Sie den Programmablaufplan PAP des Programms?org 100h ;Programmstart bei Adresse 0100h
start: mov dx, txt1 ;Eingabeaufforderung ausgeben mov ah, 9h int 021h mov ah, 01h ;Einzelnes Zeichen von der Tastatur lesen int 021h cmp al, 57 ;Zeichen mit 57d ’9’ vergleichen (compare) ja error ;Ergebnis > 9,jump if above nach error cmp al, 49 ;Zeichen mit 49d ’1’ vergleichen jb error ;Ergebnis < 1,jump if below nach errorcount: sub al, 1 ;von al eins subtrahieren (dekrementieren)
mov dl, al ;einzelnes Zeichen ausgeben
mov ah, 02h
int 21h
cmp al, 48 ;Vergleich mit ’0’
ja count ;wenn ’0’ noch nicht erreicht, Sprung -> countende: mov al, 0 ;Rückkehr zum Betriebssystem
mov ah, 4Ch
int 21herror: mov dx, txt2 ;Fehlerausgabe
mov ah, 9h
int 21hjmp start ;Sprung (jump)
section .data ;Datenbereich
txt1: db 'Zahl von 1-9 eingeben:', 13, 10, '$'
txt2: db 13, 10, 'Fehler: Zahl ist nicht zwischen 1-9!', 13,10,'$'
Benutzen Sie dabei das Programm PAP-Designer.