8086 program to check whether a string is palindrome or not

Problem: Write an 8086 program to check whether a given string is palindrome or not.

Examples:

Input String: "abba"
Output: String is palindrome

Input String: "abbca"
Output: String is not palindrome 

Explanation:

  1. Create a string
  2. Traverse to the end of the string
  3. Get the address of the end of the string, DI
  4. Load the starting address of the string, SI
  5. Compare the value stored at the address
  6. Increment the pointer, SI
  7. Decrements the pointer, DI
  8. Compare again the value stored at si and di
  9. Repeat the steps until SI<=DI
  10. If all the characters match print string is palindrome else print not palindrome

Program:

filter_none

edit
close

play_arrow

link
brightness_4
code

.MODEL SMALL
.STACK 100H
.DATA
  
; The string to be printed
STRING DB 'abba', '$'
STRING1 DB 'String is palindrome', '$'
STRING2 DB 'String is not palindrome', '$'
  
.CODE
MAIN PROC FAR
 MOV AX, @DATA
 MOV DS, AX
  
 ; check if the string is;
 ;palindrome or not
 CALL Palindrome
  
 ;interrupt to exit
 MOV AH, 4CH
 INT 21H
 MAIN ENDP
 Palindrome PROC
  
 ; load the starting address
 ; of the string
 MOV SI,OFFSET STRING
  
 ; traverse to the end of;
 ;the string
 LOOP1 :
    MOV AX, [SI]
    CMP AL, '$'
    JE LABEL1
    INC SI
    JMP LOOP1
  
 ;load the starting address;
 ;of the string
 LABEL1 :
    MOV DI,OFFSET STRING
    DEC SI
  
    ; check if the string is plaindrome;
    ;or not
    LOOP2 :
     CMP SI, DI
     JL OUTPUT1
     MOV AX,[SI]
     MOV BX, [DI]
     CMP AL, BL
     JNE OUTPUT2
  
    DEC SI
    INC DI
    JMP LOOP2
  
 OUTPUT1:
    ;load address of the string
    LEA DX,STRING1
  
    ; output the string;
    ;loaded in dx
    MOV AH, 09H
    INT 21H
    RET
  
 OUTPUT2:
    ;load address of the string
    LEA DX,STRING2
  
    ; output the string
    ; loaded in dx
    MOV AH,09H
    INT 21H
    RET
  
Palindrome ENDP
END MAIN

chevron_right


Output:

String is palindrome

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.



My Personal Notes arrow_drop_up

Second year Department of Information Technology Jadavpur University

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.



Improved By : andrew1234