Es en asembler ya lo tenia creado y sorry por el catalan.
cr EQU 13
lf EQU 10
print macro arg1
push ax
push dx
lea dx,arg1
mov ah,9
int 21h
pop dx
pop ax
endm
read macro arg1
push ax
push dx
lea dx,arg1
mov ah,10
int 21h
pop dx
pop ax
endm
dades SEGMENT PARA PUBLIC
missatge DB 'Entra el texte',cr,lf,'$'
maxcad DB 29
lencad DB 0
cadena DB 30 DUP(0)
girat DB 30 DUP(0)
linia_blanc DB cr,lf,'$'
missatge1 DB 'Vols sortir del programa?
(Premeu "s" per sortir)',cr,lf,'$'
maxcad1 DB 2
lencad1 DB 0
cadena1 DB 3 DUP(0)
dades ENDS
codi SEGMENT PARA PUBLIC 'code'
main PROC FAR
ASSUME CS:codi,DS:dades,SS:pila,ES:dades
mov ax,dades
mov ds,ax
mov es,ax
inici:
print missatge ;Imprimim el missatge
print linia_blanc ;Imprimim linia en blanc
read maxcad ;Cridem la macro 'read'
mov bh, 0 ;posem 0 a bh
mov bl, 0 ;posem 0 a bl
mov bl, lencad ;posem la longitud de la cadena a bl
afegir:
;Fer el pas de l'array a la pila
mov al, cadena[bx] ;Posem a al el valor de la posició de bx de cadena
push ax ;posem el valor d'ax a la pila
dec bl ;decrementem bx q es el nostre contador
cmp bl, -1 ;comparem si es 0
jne afegir ; si no es 0 continua el bucle
mov bh, 0 ;posem 0 a bh
mov bl, 0 ;posem 0 a bl
mov bl, lencad ;posem la longitud de la cadena a bl
mov girat[bx+1],'$'
treure:
;Fer el pas de la pila a l'array
pop ax ;Treiem de la pila un valor i el guardem a ax
mov girat[bx], al ;Posem a girat el valor tret de la pila
dec bl ;decrementem bx q es el nostre contador
cmp bl, -1 ;comparem si es 0
jne treure ;si no es 0 continua el bucle
;---------------------------------------------------------------------------------------------------------------------
print linia_blanc ;Imprimim linia en blanc
print girat ;Imprimim la cadena girat
print linia_blanc ;Imprimim linia en blanc
print linia_blanc ;Imprimim linia en blanc
print missatge1 ;Imprimeix missatge1
read maxcad1 ;llegim per teclat
print linia_blanc ;Imprimeix linia_blanc
cmp cadena1,'s'
je final
;Comparem el contingut de cadena1 amb el caracter 's'
jmp inici
final:
mov ax,4c00h
int 21h
main ENDP
codi ENDS
pila SEGMENT PARA STACK 'stack'
DB 128 DUP(0)
pila ENDS
END main