Write an ASP to reverse a given string

DATA SEGMENT
        STR1 DB "ENTER YOUR STRING HERE ->$"
        STR2 DB "YOUR STRING IS ->$"
        STR3 DB "REVERSE STRING IS ->$"
        INPUTSTR DB 20 DUP('$')
        REVSTR DB 20 DUP('$')
        NEWLINE DB 10,13,'$'
        N DB ?
        S DB ?

DATA ENDS

CODE SEGMENT
        ASSUME DS:DATA,CS:CODE
START:

        MOV AX,DATA
        MOV DS,AX
        LEA SI,INPUTSTR
        ;OUTPUT OF A STRING DS:DX. STRING MUST BE TERMINATED BY '$' 
        MOV AH,09H
        LEA DX,STR1
        INT 21H
        ;INPUT OF A STRING TO DS:DX,
        ;FIRST BYTE IS BUFFER SIZE,
        ;SECOND BYTE IS A NUMBER OF CHARS ACTUALLY READ
        ;THIS FUNCTION DOES NOT ADD '$' IN THE END OF THE STRING 
        MOV AH,0AH
        MOV DX,SI
        INT 21H
        ;OUTPUT OF A STRING
        MOV AH,09H
        LEA DX,NEWLINE
        INT 21H

;PRINT THE STRING

        MOV AH,09H
        LEA DX,STR2
        INT 21H
        ;TO PRINT USING INT 21H/AH=9 YOU MUST SET DOLLAR CHARACTER
        ;AT THE END OF IT AND START PRINTING FROM ADDRESS DS:DX+2
        MOV AH,09H
        LEA DX,INPUTSTR+2
        INT 21H

        MOV AH,09H
        LEA DX,NEWLINE
        INT 21H

;PRINT THE REVERSE OF THE STRING

        MOV AH,09H
        LEA DX,STR3
        INT 21H

        MOV CL,INPUTSTR+1
        ADD CL,1
        ADD SI,2

     L1:
        INC SI

        CMP BYTE PTR[SI],"$"
        JNE L1

        DEC SI

        LEA DI,REVSTR  ;MOV DI,OFFSET REVSTR

     L2:MOV AL,BYTE PTR[SI]

        MOV BYTE PTR[DI],AL

        DEC SI
        INC DI
        LOOP L2

        MOV AH,09H
        LEA DX,NEWLINE
        INT 21H

        MOV AH,09H
        LEA DX,REVSTR
        INT 21H


        MOV AH,09H
        LEA DX,NEWLINE
        INT 21H


        MOV AH,4CH
        INT 21H


CODE ENDS
END START

No comments: