STOSB



  • Hi Leute,

    ich habe ein Problem mit STOS(B). Ich habe einen String definiert

    willkommen DB "Herzlich willkommen!"
    

    und ändere ihn dann mit

    PUSH DS
        POP ES
        MOV AX , "t"
        MOV DI , OFFSET willkommen + 0 ; (bzw. 1, 2 oder 3)
        STOSB
    

    für jeden Buchstaben von Test. Als erstes weiß ich dass im Moment umständlich ist und ich mit STOSD besser beraten wäre, aber das hat ja ich Moment keine Auswirkungen.
    Auf jeden Fall, wenn ich willkommen danach ausgebe, bekomme ich ein
    "testlich willkommen!"
    Passt zwar auch, ist aber nicht das was ich will 🙂

    Könnt ihr mir helfen?

    Gruß

    Edit: Mir fällt eben auch auf dass, wenn der definiertes string kürzer ist als test, asl z.b. "on", komiche fehlerauftreten. Wie kann ich denn mehr SPeicherplatz dazutun oder muss ich von Anfang an genug reservieren? Wenn ja, kann ich den irgendwie mit ASCII-Nichts 🙂 Zeichen füllen?


  • Mod

    moritzm schrieb:

    Passt zwar auch, ist aber nicht das was ich will 🙂

    was willst du denn 🙂

    falls du einen ganzen string initialisieren willst, sollstest du das rep präfix benutzen (cx/ecx vorher initialisieren)

    für stringoperationen musst du immer vorher genug speicher reservieren, sonst entsteht ja eben das uralt problem des pufferüberlaufs...



  • Was ist REP? 🙂

    (Kannst du in ICQ kommen? 🙄 )



  • Nachtrag: Wie könnte ich das Problem denn dann lösen? Ich muss den "String" im Prinzip von 0-250 Zeichen voll benutzen können, jederzeit mehr zeichen (also bis zu 250) eintragen können und er sollte halt die restlichen nicht anzeigen. kann ich den speicher irgendwie freigeben? Einfach eine 0 in den Speicher schreiben?



  • Hi!

    Entweder verwendest du dynamische Speicherreservierung (DOS-Funktionscode zum reservieren 48h und zum freigeben 49h, in Verbindung mit Interrupt 21h) oder du reservierst am leichtesten wie folgt direkt genug Speicher:

    str db 200 dup (0)
    

    Oder du nimmst statt der Initialisierung mit 0 das '$'-Zeichen, dann musst du nicht nachdem du den String nach str geschrieben hast, jedesmal eine Endekennung dranhängen.

    REP bedeutet repeat, dahinter gibst du einfach einen Stringbefehl an und dieser wird dann solange ausgeführt wie der Inhalt in CX nicht 0 ist.

    Code-Hacker



  • Tag!

    Das $ Zeichen funktionier, sptize! Danke!
    Und den rest setze ich dann mir Rep.

    Danke!!

    Gruß


Anmelden zum Antworten