Open In App

8086 program to reverse a string

Last Updated : 06 Jun, 2022
Comments
Improve
Suggest changes
Like Article
Like
Report

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:

  1. Create a string
  2. Traverse through the string
  3. Push the characters in the stack
  4. Count the number of characters
  5. Load the starting address of the string
  6. POP the top character of the stack until count is not equal to zero
  7. Put the character and reduce the count and increase the address
  8. Continue until the count is greater than zero
  9. Load the effective address of the string in dx using LEA command
  10. Print the string by calling the interrupt with 9H in AH
  11. 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.


Next Article

Similar Reads

  翻译: