Programa 8086 para comprobar si una string es palíndromo o no

Problema: escriba un programa 8086 para verificar si una string dada es palíndromo o no.
Ejemplos: 
 

Input String: "abba"
Output: String is palindrome

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

Explicación: 
 

  1. Crear una string
  2. Recorrer hasta el final de la cuerda
  3. Obtenga la dirección del final de la string, DI
  4. Cargue la dirección inicial de la string, SI
  5. Compare el valor almacenado en la dirección
  6. Incrementa el puntero, SI
  7. Disminuye el puntero, DI
  8. Compare nuevamente el valor almacenado en si y di
  9. Repetir los pasos hasta SI<=DI
  10. Si todos los caracteres coinciden, la string de impresión es palíndromo; de lo contrario, imprima no palíndromo

Programa:
 

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

Producción: 
 

String is palindrome

Nota: 
El programa no se puede ejecutar en un editor en línea, use MASM para ejecutar el programa y use dos box para ejecutar MASM, puede usar cualquier emulador 8086 para ejecutar el programa.
 

Publicación traducida automáticamente

Artículo escrito por andrew1234 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *