8086 program to reverse a string
Last Updated :
06 Jun, 2022
Problem: Given a string we have to reverse the string and print the reversed string.
Examples:
Input: String : "This is a sample string"
Output: gnirts elpmas a si sihT
Input: String : "Geeks for Geeks"
Output: skeeG rof skeeG
Explanation:
- Create a string
- Traverse through the string
- Push the characters in the stack
- Count the number of characters
- Load the starting address of the string
- POP the top character of the stack until count is not equal to zero
- Put the character and reduce the count and increase the address
- Continue until the count is greater than zero
- Load the effective address of the string in dx using LEA command
- Print the string by calling the interrupt with 9H in AH
- The string must be terminated by ‘$’ sign
Program:
CPP
.MODEL SMALL
.STACK 100H
.DATA
; The string to be printed
STRING DB 'This is a sample string' , '$'
.CODE
MAIN PROC FAR
MOV AX,@DATA
MOV DS,AX
; call reverse function
CALL REVERSE
; load address of the string
LEA DX,STRING
; output the string
; loaded in dx
MOV AH, 09H
INT 21H
; interrupt to exit
MOV AH, 4CH
INT 21H
MAIN ENDP
REVERSE PROC
; load the offset of
; the string
MOV SI, OFFSET STRING
; count of characters of the;
;string
MOV CX, 0H
LOOP1:
; compare if this is;
;the last character
MOV AX, [SI]
CMP AL, '$'
JE LABEL1
; else push it in the;
;stack
PUSH [SI]
; increment the pointer;
;and count
INC SI
INC CX
JMP LOOP1
LABEL1:
; again load the starting;
;address of the string
MOV SI, OFFSET STRING
LOOP2:
; if count not equal to zero
CMP CX,0
JE EXIT
; pop the top of stack
POP DX
; make dh, 0
XOR DH, DH
; put the character of the;
;reversed string
MOV [SI], DX
; increment si and;
;decrement count
INC SI
DEC CX
JMP LOOP2
EXIT:
; add $ to the end of string
MOV [SI], '$ '
RET
REVERSE ENDP
END MAIN
|
Output:
gnirts elpmas a si sihT
Note: The program cannot be run on an online editor, please use MASM to run the program and use dos box to run MASM, you might use any 8086 emulator to run the program.
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...