DOS - Zeichenfolge einlesen??
-
Hi,
wie kann ich ne Zeichenfolge einlesen und in der var abspeicher??
Bin etwas angefangen,nur das klappt nicht.DATA eingabe DB 10 DUP(?) .CODE START: mov ax,@DATA mov ds,ax mov ah,08h int 21h mov dx,OFFSET eingabe mov eingabe,al mov ah,02h int 21h END
nur egal welches Zeichen ich eingebe, der gibt mir imemr so nen komischenpfeil nach oben aus
[ Dieser Beitrag wurde am 28.12.2002 um 19:58 Uhr von Nobuo T editiert. ]
-
Also wenn du nicht unbedingt BIOS Interrupt Funktionen zum einlesen benutzen musst, kannst du am besten Int 21h/AH=0Ah nehmen. Die liest einen String ein und speichert ihn samt dem terminierendem 13h (enter). Die Funktion selbst muss ich ja wohl nicht erklären (siehe Ralf Brown's Interrupt List, Link findest du sicherlich in der FAQ).
Wenn du den String dann allerdings anders terminiert haben willst (z.b. nullterminiert oder "' ändern sollte (für Ausgabe via Int 21h/AH=09h):mov ax,segment eingabe mov es,ax mov di,offset eingabe mov cx,-1 mov al,13h repnz scasb mov byte ptr es:[di-1],'$'
Ich hoffe mal der Code klappt so. Real Mode asm ist lang her bei mir und ich hab gerade keine Gelegenheit den Code zu testen.
-
hmm ok ich rufe die 0Ah funktion auf, nur leider tut sich dann gar nichts,sondern die anwendung wird einfach beendet.
ich hab es einfach nur so gemachtmov ah,0Ah int 21h
sollte ja richtig sein.
-
Hi,
so einfach ist das leider nicht.
Allein durch logisches Denken sollte dir auffallen, dass Du dieser DOS-Funktion so noch nicht mal eine Speicheraddresse uebergeben hast, bei der die eingelesene Zeichenfolge abgelegt werden soll.
Lies dir am besten die Beschreibung zum int 21h Funktion 0Ah in Ralf Browns Interrupt Liste nochmal genauer durch.
-
hmm doch ich habe ihm ja gesgat wo er es ablegen soll, nur nicht mit gepostet.
so entnehme ich es jedenfalls aus meiner interrupt tabelle die ich heir habe..DATA eingabe db10 DUP(?) .CODE mov ax,@DATA mov ds,ax mov dx,OFFSET eingabe mov ah,0Ah int 21h jmp ENDE ;hier kommt noch des ENDE Label + code
also die Funktion 0Ah brauhct doch die Speicheradresse in dx und die geb ich ihm ja mit offset eingabe ....
-
Jo, is soweit ok.
Nur in der Array fuer "eingabe" fehlt noch was...
Ich hab da z.B. in den letzten Zeilen der Beschreibung der Funktion 0Ah noch sowas gelesen:Format of DOS input buffer:
Offset Size Description (Table 01344)
00h BYTE maximum characters buffer can hold
01h BYTE (call) number of chars from last input which may be recalled
(ret) number of characters actually read, excluding CR
02h N BYTEs actual characters read, including the final carriage returnPraktisch muesste das in deinem Code dann so aussehen:
.DATA eingabe db 10 ;so viele Zeichen koennen im Puffer maximal abgelegt werden... db 00 ;wird vom Interrupt gesetzt (gelesene Zeichen) db 10 DUP(?) .CODE mov ax,@DATA mov ds,ax mov dx,OFFSET eingabe mov ah,0Ah int 21h jmp ENDE ;hier kommt noch des ENDE Label + code