|   Voici un programme assembleur 8085 possible pour vérifier si une chaîne donnée est un palindrome : 
 ```assemblage  
 BIO 100H  
  
; Définir des constantes  
 STRLEN ÉQU 10  
 NULL_BYTE ÉQU 0  
  
; Définir les emplacements mémoire  
 ORIGINE :équi 02H  
 STRING_LOCATION :équivalence 03H  
 STRING_LENGTH :équivalent à 04 H  
  
; Définir l'utilisation du registre  
 A :équivalence 0 ; Accumulateur  
 B :équation 1; Mémoire indirecte  
 C :équation 2; Registre de transport  
 D :équation 3; Registre de données  
 E :équation 4; Registre d'indexation  
 H :équation 5; Registre haut de valeur 16 bits  
 L :équation 6; Registre bas de valeur 16 bits  
 M :équation 7; Pointeur de pile  
 P :équation 8; Mot d'état du programme  
  
; Définir des drapeaux  
 ZÉRO :bit 0,P; Drapeau zéro  
 SIGNE :bit 1,P; Signer le drapeau  
 PARITÉ :bit 2,P; Drapeau de parité  
 CARRY :bit 4,P; Porter le drapeau  
  
; Le programme principal commence ici  
 PRINCIPAL: 
  
; Initialiser les données  
 XCHGH,L; Échanger les registres H et L  
 MVI E,STRING_LENGTH; Réglez E sur la longueur de la chaîne  
 MOUVEMENT H,E ; Copiez la longueur dans H  
 MVI L,NULL_BYTE; Initialisez L avec l'octet nul  
 ORIGINE SHLD; Stocker la longueur à l'adresse ORIGINE  
  
 MVI E, STRLEN; Réglez E sur la longueur maximale de la chaîne  
 MOUVEMENT D, STRLEN; Copiez la longueur maximale dans D  
 BOUCLE1 : 
 XTHL; Échangez les registres H et L pour charger à partir d'une adresse mémoire  
 MVI M,0; Initialiser l'emplacement mémoire avec un octet nul  
 INCRM ; Incrémenter le pointeur de mémoire  
 DCRE D; Décrémenter la longueur de la chaîne  
 BOUCLE NZ1 ; Continuez jusqu'à ce que la longueur de la chaîne atteigne 0  
  
 MVI E, STRLEN; Réglez E sur la longueur maximale de la chaîne  
 MOUVEMENT D, STRLEN; Copiez la longueur maximale dans D  
 READ_STRING : 
 EN 0,UNE; Lire un caractère au clavier  
 MOUVEMENT H,A ; Stocker le personnage en H  
 XTHL; Échangez les registres H et L pour charger à partir d'une adresse mémoire  
 MVI M,0; Initialiser l'emplacement mémoire avec un octet nul  
 ORIGINE LHLD; Charger l'adresse d'origine depuis la mémoire  
 INCRM ; Incrémenter le pointeur de mémoire  
 MOUVEMENT L,A ; Stocker le personnage dans L  
 ORIGINE SHLD; Stocker l'adresse du caractère suivant en mémoire  
 DCRE D; Décrémenter la longueur de la chaîne  
 Nouvelle-Zélande READ_STRING ; Continuez jusqu'à ce que la longueur de la chaîne atteigne 0  
  
; Fonction pour vérifier si une chaîne est un palindrome  
 IS_PALINDROME : 
  
; Enregistrer les registres  
 POUSSEZ H  
 APPUYEZ SUR D  
  
; Bouclez sur la moitié de la corde  
 ORIGINE LHLD; Charger l'adresse d'origine depuis la mémoire  
 MOUVEMENT H,L ; Copiez l'octet faible de l'adresse dans H  
 AJOUTER HL ; Incrémenter l'adresse  
 MOUVEMENT L,H ; Copiez l'octet de poids fort de l'adresse dans L  
 MOUVEMENT D,L ; Copiez l'octet de poids fort de l'adresse dans D  
 PAPA D; Doublez l'adresse  
 XCHG H,D; Échanger les registres H et D  
 MOUVEMENT H,A ; Stocker le dernier caractère de H  
 DCRE E; Décrémenter la longueur de la chaîne  
  
 LOOP_PAL : 
 ORIGINE LHLD; Charger l'adresse d'origine depuis la mémoire  
 MOUVEMENT L,H ; Copiez l'octet de poids faible de l'adresse dans L  
 PAPA D; Doublez l'adresse  
 XTHL; Échangez les registres H et L pour charger à partir d'une adresse mémoire  
 IPC M ; Comparez le caractère à l'adresse actuelle avec le dernier caractère  
 POUSSER PSW ; Enregistrez les indicateurs d'état  
 ANI ZÉRO ; Vérifiez si les caractères sont égaux  
 POP PSW ; Restaurer les indicateurs d'état  
 JZ NOT_PALINDROME; Si égal, continuez  
 XCHG H,D; Échanger les registres H et D  
 MOUVEMENT H,A ; Stocker le caractère suivant dans H  
 DCRE E; Décrémenter la longueur de la chaîne  
 NZ LOOP_PAL; Continuer jusqu'à la fin de la chaîne  
 POP D  
 POP H  
  
; Fin de fonction  
 RET  
  
 NOT_PALINDROME : 
 CMP E,0; Vérifiez si la longueur de la chaîne est 0  
 JZ PAL_DONE; Si 0, la chaîne est un palindrome  
 POP D  
 POP H  
  
; Fonction pour imprimer une chaîne  
 PRINT_STRING : 
  
; Enregistrer les registres  
 APPUYEZ SUR D  
  
 BOUCLE_PRINT : 
 ORIGINE LHLD; Charger l'adresse d'origine depuis la mémoire  
 SORTIE 0,A ; Imprimer le caractère à l'adresse actuelle  
 XTHL; Échangez les registres H et L pour charger à partir d'une adresse mémoire  
 IPC NULL_BYTE ; Vérifiez si le caractère est un octet nul  
 POP D  
 RETNZ  
  
; Fonction pour imprimer un message indiquant que la chaîne est un palindrome  
 PRINT_PALINDROME : 
 MOUVEMENT E,STR_PALINDROME; Déplacer l'adresse du message vers le registre E  
 APPEL PRINT_STRING ; Appelez la fonction PRINT_STRING  
  
; Fonction pour imprimer un message indiquant que la chaîne n'est pas un palindrome  
 PRINT_NOT_PALINDROME : 
 MOUVEMENT E,STR_NOT_PALINDROME; Déplacer l'adresse du message vers le registre E  
 APPEL PRINT_STRING ; Appelez la fonction PRINT_STRING  
  
; Imprimer le résultat du contrôle palindrome  
 MVI A,'$'; Imprimez un signe dollar pour séparer le résultat  
 SORTIE 0,A ; Imprimez le signe dollar  
 CMP E,0; Vérifiez si la chaîne est un palindrome  
 JZ PRINT_PALINDROME; Si 0, imprime le message palindrome  
 APPELER PRINT_NOT_PALINDROME ; Sinon, imprimez le message non palindrome  
  
; Imprimer un nouveau caractère de ligne  
 SORTIE 0,CRLF  
  
; Arrêter le programme  
 HLT  
  
; Chaînes à imprimer  
 STR_PALINDROME :DB '$La chaîne est un palindrome$'  
 STR_NOT_PALINDROME :DB '$La chaîne n'est pas un palindrome$'  
 CRLF :DB ODH,OAH,0 ; Retour chariot et saut de ligne  
  
; Fin du programme  
 ```
 |