string variable erstellt, aber wie kann ich nun komplette strings darin speichern?



  • also:

    var db 'Hund$' ; wir wollen auch initialisieren
    mov [byte var], 'M' ; aus Hund wird Mund

    wie kann ich jetzt aber statt "Mund" zb nen "Hase" in var speichern?
    (ganz dynamisch geht wohl acuh nicht oder?, aslo auch noch die möglichkeit nen größeren string zu speichern zb: "anhalter" oder sinnvoll nen kleineren "der" 🙄 )

    danke im voraus



  • Tja... Im Grunde ist so etwas aehnliches wie ein dynamisches zuordnen von Strings, wie das in Hochsprachen geht in asm nur wenig sinnvoll.
    Irgendwo muss der String, der eingesetzt werden soll schliesslich herkommen... also musst Du ihn auch im Datensegment definieren. (solange er nicht schon woanders im Speicher liegt)
    Beispiel:

    ...Variablen...
    var1 db "Hund$ "
    var2 db 6 dup (?) ;<- leer (Platz fuer 6 Zeichen)
    
    ...code...
    ;erstmal string in var1 nach var2 kopieren...
    ;ds und es muessen hierfuer auf das Datensegment zeigen.
    mov si,offset var1 ;quelloffset
    mov di,offset var2 ;zieloffset
    mov cx,3 ;6/2
    rep movsw ;kopieren: immer 2byte auf einmal
    ;in var2 sollte jetzt das gleiche stehen, wie in var1
    

    [ Dieser Beitrag wurde am 28.08.2002 um 18:49 Uhr von Nobuo T editiert. ]



  • Das Problem bei der dynamischen verwaltung ist halt, dass du vom Betriebssystem (OS) dir bei jeder Änderung der Menge des benötigten Speichers dir nen Zeiger auf das neue Speicherareal holen musst.

    Bei SingleTask OSs (z.B. DOS) kann man da aber auch ein wenig anarchistisch verfahren und halt etwas irgendwo in den Speicher schreiben. Dann sollte man allerdings verdammt aufpassen das man nichts kaput macht.

    Oder du machst es brav und ordentlich und verlangst den Speiche vom Betriebssystem (wie in c über malloc) , dafür musst du dann halt in die Referenzen schaun und sehen wie du das von deinem OS bekommst. Bei DOS gibt es ne Funktion über den INT 21h (weiss aber nicht welch hab sie nie benutzt >:-).

    mfg
    -bg-


Anmelden zum Antworten