Wie kann ich DB eingeben?



  • Ich habe folgendes Problem.

    Und zwar habe ich zwei vorgegebene Arrays, mit denen gearbeitet wird.
    bzw. mit den Zahlen dadrinnen.

    Es schaut ungefähr so aus.

    array db 1, 3, 4, 5
    array2 db 3, 4, 5, 6

    Ich möchte diese aber selbst per Eingabe setzen, quasi die Zahlen wie oben selber setzen - und das per Interrupt.

    Ich habs schon mit

    mov dx, offset array
    mov ah, 08h
    int 21h

    Probiobiert, wo ich nach aufforderung eben die zahlen wie z.b: 3, 6, 7, 8 eingebe. Aber die übernimmt er nicht.

    Was mache ich falsch?



  • Google mal nach Ralf Brows Interrupt List.

    bzw. Strings kann man einlesen mit:

    mov ah,7
    int 21h
    


  • Moin.

    Alternativ kann auch der "BUFFERED INPUT" verwendet werden, womit die Anzahl der Eingabe begrenzt werden kann.
    RBIL->inter61b.zip->INTERRUP.F

    --------D-210A-------------------------------
    INT 21 - DOS 1+ - BUFFERED INPUT
    	AH = 0Ah
    	DS:DX -> buffer (see #01344)
    Return: buffer filled with user input
    Notes:	^C/^Break are checked, and INT 23 is called if either detected
    	reads from standard input, which may be redirected under DOS 2+
    	if the maximum buffer size (see #01344) is set to 00h, this call returns
    	  immediately without reading any input
    SeeAlso: AH=0Ch,INT 2F/AX=4810h
    
    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 return
    

    Speicherbereich reservieren:

    DOSinputbuffer DB Anzahl_1 dup (30h)
    array          DB Anzahl_2 dup (0EEh)
    array2         DB Anzahl_3 dup (0FFh)
    

    Danach muss vom ASCII-Wert aber auch noch 30h abgezogen werden, weil im Array sollen vermutlich wohl keine ASCIIs reingeschrieben werden. Im Falle sich ein Wert aus zwei, oder mehreren ASCII-Ziffern zusammensetzt, dann müssen die einzelnen Ziffern je nach Position im Dezimal-System nach Abzug von 30h jeweils mit 10 multipliziert und dann zusammen gefügt werden.

    Dirk




Anmelden zum Antworten