Stampa di una stringa in ordine inverso

Acquisisci una stringa da tastiera, massimo 8 caratteri, e restituiscila a video invertita.

Ad esempio: 123456 (INPUT) -> 654321 (OUTPUT)

 

#make_com#  ;direttive
org  100h       ; set location counter to 100h


JMP start

inseriscistringa MACRO stringa ;macro per l'inserimento della stringa

MOV dx, OFFSET stringa
MOV ah, 0Ah
INT 21h

ENDM 

visualizza MACRO stringar   ;macro per la visualizzazione delle stringhe
    
    LEA dx, stringar
    MOV ah, 09h
    INT 21h
    
ENDM 


start:  ;inizio del programma
visualizza msginserire
inseriscistringa stringaLetta
mov CL, stringaLetta[1]     ;copia in cl il numero effettivo di caretteri digitati
mov SI, CX    
add SI, 1
mov AX, 0
mov BX, 0
ciclo:
mov AH, stringaLetta[SI]       ;copia in ax i caratteri della stringa letta a partire dall'ultimo
mov stringaInversa[BX], AH     ;copia in stringaInversa i caratteri di stringaLetta
dec SI                         ;decrementa l'indice di controllo della variabile stringaLetta
inc BX                         ;incrementa l'indice di controllo della variabile stringaInversa
loop ciclo    

mov stringaInversa[BX], "$"    ;inserisci il "tappo" alla stringa

visualizza acapo  
visualizza msginvertita 
visualizza msge                ;visualizzare il carattere "e" con l'accento
visualizza msgduepunti
visualizza acapo 
visualizza stringaInversa      ;visualizza la variabile stringaInversa


RET

;dichiarazione delle variabili
stringaLetta db 9,?, 9 DUP("$")
stringaInversa db 9 DUP ("$")
msginserire db "Digitare una stringa di massimo 8 caretteri $"
msginvertita db "La stringa invertita $" 
msgduepunti db ": $"
acapo db 10, 13, "$" 
msge db 138, "$"