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 willKö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?
-
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ß