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
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:
Post a Comment