Wert in Variable Speichern
-
Hallo ich hab ein Programm gemacht wo der Benutzer eine Eingabe machen muss am ende soll die Benutzer Eingabe auf dem Bildschirm angezeigt werden.
Bis hier hin bin ich gekommen:
.model small .stack 100h .data MSG DB "Benutzer: $" buffer db 256 dup (?) ,"$" .CODE ENTRYPOINT: mov AX,@DATA mov DS,AX mov DX,OFFSET MSG mov AH,09H int 21h MOV AH,0aH ;string eingeben MOV buffer,AH int 21h mov DX,offset buffer ;string ausgeben mov ah,13h int 10h ;Programm beenden Ende: mov AH,4CH int 21h END ENTRYPOINT END
Ich hab irgendwo gelesen das dass irgendwie so gehen soll aber dann bekomme ich immer die Meldung: Operand types does not match
Ich Programmier mit TASM
.model small .stack 100h .data MSG DB "Benutzer: $" buffer db 256 dup (?) .CODE ENTRYPOINT: mov AX,@DATA mov DS,AX mov DX,OFFSET MSG mov AH,09H int 21h MOV AH,0aH ;string eingeben MOV buffer,AH int 21h mov bl, byte ptr [buffer+1] add bx, buffer+2 mov byte ptr [bx], "$" ; Text mit $ abschliessen mov dx, buffer+2 mov ah, 09H int 021H mov ah,13h int 10h ;Programm beenden Ende: mov AH,4CH int 21h END ENTRYPOINT END
Aber jetzt komm ich einfach nich mehr weiter ich sitz da schon den ganzen Tag dran.
Kann mir wer vielleicht einfach den Korrigierten Quelltext posten ?
-
Ich habe mir das ganze mal angesehen du hast diverse kleine Fehler die
vllt aus Unwissendheit enstanden sind was ja nciht schlimm ist.Wenn du einen Buffer für die Eingabe mit dem INT 21(Speziell der Vector 0AH) verwendest solltest du auf den folgenden Aufbau des Buffers achten:
---------------------------------------------------------------------- | Max | Anzahl| | CR | |Zeichen| Einhabe| Bytes des Strings | Zeichen| | Byte | Bytes | | Byte | ---------------------------------------------------------------------- | ___________| | | | | | | _______________| | | | | | |--> Die Einzelnen Bytes die Über das Interuot eingeben werden | | | |-----> Das Interrupt 21(Vector 0AH) Nutzt dieses Byte | um die Anzahl der Eingebenen Zeichen zu Speichern. | Es sollte daher vorher auf 0 gesetzt werden da es immer nur | Um eins erhöht wird. | |-------> Weiterhin verfügt dieser Interrupt Vektor noch die Möglichkeit Zu Sagen das man nur eine bestimme Anzahl von Zeichen Aktzeptiert. Ist die Ereicht werden keine Zeichen mehr entgegen genommen. -------> Das CR Zeichen steht hinter dem Letzten Eingebenen Zeichen Es wird nach betätigen der Enter Taste gesetzt.
So das erst mal als Vorabinformation das sollte man wissen wenn man Strings über das Interupt 21 einlesen möchte.
Und dein zweiter Fehler ist das du das Interupt 10 Falsch verwendest
Das Interupt erwartet nicht das du in DX den Offset des String movest.
Er sollte nach ES:BP gemovet werden.Ich habe das jetzt alles mal mit int 21 Programmiert vllt hilt es dir ja:)
Wenn du Fragen hast einfach Fragen:)
Aber ich denke die Kommentare sollten reichen:):xmas1:
.model small .stack 256 .data MSG DB "Benutzer: $" buffer DB 10,0,12 dup(".") ;Länge des Buffers ergibt sich aus den Max Zeichen ; + 3 Byte für das CR Zeichen sowie 2 Byte ;für Maximale Eingabe und Anzahl der Eingebenen Zeichen. ENDL DB 10,13,"$" .CODE ENTRYPOINT: mov AX,@data ;AX < - DATA Segment Addresse mov DS,AX ;Data Segment Pointer <- AX mov DX,OFFSET MSG ;DX <-Offset Addresse von MSG mov AH,09H ;Wahl des String Ausgabe Vectors des INT 21 int 21h mov AH,0AH ;Wahl des String Eingabe Vectors des INT 21 mov buffer,10 ;Setzen des 1 Bytes des Buffers auf die Maximalgröße der Eingabe mov DX,OFFSET buffer ;DX <-Offset Addresse vom Buffer int 21h mov DX,OFFSET ENDL ;DX <-Offset Addresse von ENDL(Zeilenumbruch) mov AH,09H ;Wahl des String Ausgabe Vectors des INT 21 int 21h mov CL,buffer+1 ;CL <- Anzahl der Eingebenen Zeichen mov SI,OFFSET buffer+2 ;Setzen des SI Pointers auf das erste Zeichen im Buffer DISP: mov DL,[SI] ;DL < - Des An Si befindlichen Bytes nach DL mov ah,02H ;Wahl des Zeichen Ausgabe Vectors des INT 21 int 21H inc SI ;Incrementieren des SI Pointers loop DISP ;For Schleife Wiederhole Solange CL > 0 Ende: mov AH,01H ;Wahl des Zeichen Eingabe Vectors des INT 21 int 21H ;Wartet auf eine Eingabe eines Users mov AH,4CH ;Wahl des Ende Vectors des INT 21 int 21h ;Programm beenden END ENTRYPOINT END