?
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