Zeichenkettenmanipulaton!!

Asterix
Hallo habe ein kleines Programm geschrieben, welches von der Tastatur max 10 Zeichen einliest und auf der Konsole ausgibt.

Jetzt möchte ich das die Zeichenkette in umgekehrter Reihenfolge ausgegeben wird, wie stelle ich diese an?

hier mein Quelltext::


data segment
eing_str db "Zeichen eingeben: ","$"
anzahl db 10,?
puffer db 10 dup (?)
crlf db 13,10,"$"
data ends

ausgabe macro string
mov dx,offset string
mov ah,09h
int 21h
endm


code segment
assume cs:code, ds:data, ss:stack

start:

mov ax,seg data
mov ds,ax

ausgabe eing_str

mov dx,offset anzahl
mov ah,0ah
int 21h


xor bx,bx
mov bl,anzahl[bx+1]
mov anzahl [bx+2],"$"


ausgabe crlf
ausgabe puffer

sub al,al
mov ah,4ch
int 21h

code ends

stack segment stack
dw 20 dup(?)

stack ends

end start


Danke für Eure Antworten Asterix
daHooligan
hab zwar rel. wenig ahnung von assembler würde aber mal sagen, dass du die zeichen irgendwo speichern und dann in umgekehrter reihenfolge wieder auslesen und ausgeben musst.
Tweety!
hab auch nicht so viel ahnung, aber gibts da nicht die funktionen

rrb und rlb (rotate right byte und rotate left byte) bzw. vielleicht auch die einzelnen word register rotieren lassen

unglücklich sry hab mich zu wenig befasst mit assembler obwohl ichs eigentlich mal gelernt hab ^^
Asterix
Ersteinmal danke ich Euch für Eure Antworten, aber ich habe gelesen das man dieses Problem mit direction flags regeln könnte. Da gibt es den Befehl STD, der die Zeichenkette von rechts nach links abarbeiten sollte. Leider habe ich das bereits ausprobiert, komme aber nicht zu meinem gewünschten Ergebnis


Fab
Code Monkey
Naja mit STD setzt Du nur das Direction Flag auf 1, d. h. für Subtraktion des Zählers bei den movsb, stosb, scasb usw. Befehlen (CLD löscht es für Addition).

Auf die Schnelle könntest Du es so machen:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
mov al, bl                            ; bl = anzahl zeichen
add al, 3
mov puffer[0], al               ; länge des puffers
mov puffer[1], bl               ; anzahl chars

mov cx, bx				
mov ax, bx                          ; bx sichern

loop1:
	mov bx, ax                  ; bx restoren
	sub bx, cx			  
	mov dl, anzahl[bx+2]   ; anzahl von 2 an vorwärts auslesen
	mov bx, cx		
	mov puffer[bx+1], dl	; puffer rückwärts schreiben
	dec cx		
	test cl, cl
	jne loop1

mov bx, ax	                   
mov puffer[bx+2], "$" 

ausgabe crlf
ausgabe puffer[2]        ; puffer ab text ausgeben


geht bestimmt auch besser/kürzer ... Augenzwinkern

man könnte ne struc machen für den Stringbuffer z. B.
und im Moment fressen Pufferlängenfeld, Anzahlfeld und "$" 3 Bytes, also sind bei Pufferlänge 10 nur 7 Zeichen möglich.