Programm kommentieren < Assembler < Programmiersprachen < Praxis < Informatik < Vorhilfe
|
Status: |
(Frage) überfällig | Datum: | 12:09 Fr 14.07.2006 | Autor: | saoody |
Aufgabe | Analysieren Sie folgendes Assembler Programm. Kommentieren Sie das Programm ausführlich und beschreiben Sie seine Funktion !
Folgende Hinweise zu Int 21h
01 Zeichen von Standardeingabe lesen
02 Zeichen an Standardausgabe ausgeben
09 Text ausgeben
4C Programm beenden |
Also folgendes, ich selber mache Assembler zum ersten mal und auch so habe ich wenig Ahnung von Programmierung. Hab versucht ein paar Sachen zu analysieren, komme aber trotzdem nicht vorran bzw. zum keinen Ergebnis !!
Start:
mov dx,msg1 => kopiere den message1 in den Register dx
mov ah,09h =>?
int 21h => Aufruf...?
mov AH,01h =>?
int 21h
CMP AL,3ah => Vergleiche die Konstante (3ah) mit dem
Inhalt des AL
JB w1 => Wenn der Inhalt kleiner als 3ah ist, dann
springe zu w1
mov dx,msg
mov ah,09h
int 21h
jmp ende => springe am Ende (unbedingter Sprung)
w1: => einfach eine symbolische Marke
and AL,0fh => ?
MOV CL,4 => ?
RCL AL, CL => Al wird 4 mal nach links rotiert bzw. verschoben
MOV BL, AL ab hier keine Ahnung !!!!!!!!
MOV AH, 01h
int 21h
CMP AL, 3ah
JB w2
mov dx,msg
mov ah,09h
int 21h
jmp ende
w2:
and AL, 0fh
ADD AL, BL
MOV DL, AL
MOV AH, 02h
int 21h
MOV AX,4c00h
int 21h
ende:
MOV AX,4c00h
int 21h
END
Die allgemeine Funktion des Programms, wie ich das vom Prof. mitbekommen habe, war das am Anfang eine Konstante eingegeben wird,
welche in der 2 Routine verglichen und verschoben wird !
Bei w2 wird eine neue Konstante eingegeben und mit der vorherigen verglichen. Am Ende wird eine neue Hexadezimal Konstante erzeugt!
Und der Nachteil war, das wenn der Wert kleiner als 0 wäre, dann würde dieses Programm nicht mehr arbeiten.
Das sind so die groben Dinge an die ich mich noch erinnere !!
Hoffe das jemand in der Lage ist mir weiter zu helfen !!!!!!
Liebe Grüße
saoody
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 12:20 Mo 17.07.2006 | Autor: | matux |
$MATUXTEXT(ueberfaellige_frage)
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 00:13 Di 18.07.2006 | Autor: | saoody |
Hallo, ja ich bin immer noch an eine Antwort interessiert !
Weil dies wichtig für meine Prüfung ist.
Kann mir jemand helfen ????
mfg
saoody
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 17:39 Fr 21.07.2006 | Autor: | Kornel |
Hallo saoody,
ich habe das Programm neu kommentiert, ich hoffe du wirst schlau draus
Start:
mov dx,msg1 ; setze Pointer auf msg1 in das Register dx
mov ah,09h ; Modus Text ausgeben wählen
int 21h ; gib msg1 aus
mov AH,01h ; Modus Standardeingabe lesen wählen
int 21h ; lies über Standardeingabe nach AL
CMP AL,3ah ; war die Eingabe ein ?
JB w1 ; wenn Eingabe ?, springe zu w1
mov dx,msg ; setze Pointer auf msg
mov ah,09h
int 21h ; und gib es aus
jmp ende ; springe zum Ende (unbedingter Sprung)
w1:
and AL,0fh ; aus 3ah wird 0ah = 0000 1100(2)
MOV CL,4 ;
RCL AL, CL ; das heisst RLC !!Al wird 4 mal nach links rotiert bzw. verschoben
; in AL steht also 1100 0000 (2) = a0h
MOV BL, AL ; move a0h nach BL
MOV AH, 01h ; Funktion Standardeingabe
int 21h ; lies Zeichen von Standardeingabe nach AL
CMP AL, 3ah ; ist es ein ?
JB w2 ; dann nach w2
; wenn also kein ?
mov dx,msg ; Pointer auf Msg
mov ah,09h ; Modus Text ausgeben
int 21h ; gib msg aus
jmp ende ; springe zum Ende (unbedingter Sprung)
w2: ; wenn ein ?
and AL, 0fh ; dann wird aus 3ah 0ah
ADD AL, BL ; in BL steht a0h und das wird addiert, gibt aah
MOV DL, AL ; move aah nach DL
MOV AH, 02h ; Zeichen auf Standardausgabe ausgeben
int 21h ; gib aah aus, das ist ein kleines hochgestelltes a
MOV AX,4c00h ; Funktion Programm beenden
int 21h ; ausführen
ende:
MOV AX,4c00h ; Funktion Programm beenden
int 21h ; ausführen
END
d. h.
- gib msg1 aus
- lies ein Zeichen
- ist es ein ? dann springe nach w1
- ist es kein ?, dann gib msg aus und Ende
w1:
- lies ein weiteres Zeichen
- ist es (noch) ein Fragezeichen dann gehe nach w2:
- sonst gibt msg aus
- und Ende
w2:
- gib ein hochgestelltes a aus
- und Ende
d. h.
- gib msg1 aus
- erwarte ein Zeichen, wenn kein ? dann Ende
- wenn ? erwarte weiteres Zeichen, wenn dieses auch ein ? dann gib kleines hochgestelltes a aus
- sonst und dann Ende
viele Grüße
|
|
|
|