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:
- Create a string
- Traverse to the end of the string
- Get the address of the end of the string, DI
- Load the starting address of the string, SI
- Compare the value stored at the address
- Increment the pointer, SI
- Decrements the pointer, DI
- Compare again the value stored at si and di
- Repeat the steps until SI<=DI
- If all the characters match print string is palindrome else print not palindrome
Program:
CPP
.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 palindrome; ;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 |
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.
Please Login to comment...