www.vorhilfe.de
Vorhilfe

Kostenlose Kommunikationsplattform für gegenseitige Hilfestellungen.
Hallo Gast!einloggen | registrieren ]
Startseite · Forum · Wissen · Kurse · Mitglieder · Team · Impressum
Navigation
 Startseite...
 Neuerdings beta neu
 Forum...
 vorwissen...
 vorkurse...
 Werkzeuge...
 Nachhilfevermittlung beta...
 Online-Spiele beta
 Suchen
 Verein...
 Impressum
Das Projekt
Server und Internetanbindung werden durch Spenden finanziert.
Organisiert wird das Projekt von unserem Koordinatorenteam.
Hunderte Mitglieder helfen ehrenamtlich in unseren moderierten Foren.
Anbieter der Seite ist der gemeinnützige Verein "Vorhilfe.de e.V.".
Partnerseiten
Weitere Fächer:

Open Source FunktionenplotterFunkyPlot: Kostenloser und quelloffener Funktionenplotter für Linux und andere Betriebssysteme
Forum "Assembler" - Programm kommentieren
Programm kommentieren < Assembler < Programmiersprachen < Praxis < Informatik < Vorhilfe
Ansicht: [ geschachtelt ] | ^ Forum "Assembler"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien

Programm kommentieren: Frage (überfällig)
Status: (Frage) überfällig Status 
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

        
Bezug
Programm kommentieren: Fälligkeit abgelaufen
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 12:20 Mo 17.07.2006
Autor: matux

$MATUXTEXT(ueberfaellige_frage)
Bezug
                
Bezug
Programm kommentieren: Frage (beantwortet)
Status: (Frage) beantwortet Status 
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

Bezug
                        
Bezug
Programm kommentieren: Antwort
Status: (Antwort) fertig Status 
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

Bezug
Ansicht: [ geschachtelt ] | ^ Forum "Assembler"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien


^ Seitenanfang ^
www.mathebank.de
[ Startseite | Forum | Wissen | Kurse | Mitglieder | Team | Impressum ]