Hier ist ein mögliches 8085-Assemblerprogramm, um zu überprüfen, ob eine bestimmte Zeichenfolge ein Palindrom ist:
„Montage
ORG 100H
; Konstanten definieren
STRLEN EQU 10
NULL_BYTE EQU 0
; Speicherorte definieren
URSPRUNG:Äquivalent 02H
STRING_LOCATION:gleich 03H
STRING_LENGTH:gleich 04H
; Registernutzung definieren
A:Gleichung 0; Akkumulator
B:Gleichung 1; Indirektes Gedächtnis
C:Gl. 2; Trageregister
D:Gl. 3; Datenregister
E:Gl. 4; Indexregister
H:Gl. 5; Hohes Register mit 16-Bit-Wert
L:Gl. 6; Niedriges Register mit 16-Bit-Wert
M:Gl. 7; Stapelzeiger
P:Gl. 8; Programmstatuswort
; Flags definieren
NULL:Bit 0,P; Null-Flagge
SIGN:Bit 1,P; Flagge unterzeichnen
PARITÄT:Bit 2,P; Paritätsflagge
CARRY:Bit 4,P; Flagge tragen
; Das Hauptprogramm beginnt hier
HAUPTSÄCHLICH:
; Daten initialisieren
XCHG H,L; Tauschen Sie H- und L-Register aus
MVI E,STRING_LENGTH; Setzen Sie E auf die Länge der Zeichenfolge
MOV H,E; Kopieren Sie die Länge nach H
MVI L,NULL_BYTE; Initialisieren Sie L mit dem Nullbyte
SHLD HERKUNFT; Speichern Sie die Länge unter der ORIGIN-Adresse
MVI E,STRLEN; Setzen Sie E auf die maximale Länge der Zeichenfolge
MOV D,STRLEN; Kopieren Sie die maximale Länge nach D
SCHLEIFE1:
XTHL; Tauschen Sie die H- und L-Register aus, um sie von einer Speicheradresse zu laden
MVI M,0; Speicherort mit einem Nullbyte initialisieren
INCR M; Speicherzeiger erhöhen
DCRE D; Verringern Sie die Zeichenfolgenlänge
NZ LOOP1; Fahren Sie fort, bis die Zeichenfolgenlänge 0 erreicht
MVI E,STRLEN; Setzen Sie E auf die maximale Länge der Zeichenfolge
MOV D,STRLEN; Kopieren Sie die maximale Länge nach D
READ_STRING:
IN 0,A; Lesen Sie ein Zeichen von der Tastatur
MOV H,A; Speichern Sie das Zeichen in H
XTHL; Tauschen Sie die H- und L-Register aus, um sie von einer Speicheradresse zu laden
MVI M,0; Speicherort mit einem Nullbyte initialisieren
LHLD HERKUNFT; Laden Sie die Ursprungsadresse aus dem Speicher
INCR M; Speicherzeiger erhöhen
MOV L,A; Speichern Sie das Zeichen in L
SHLD HERKUNFT; Speichern Sie die Adresse des nächsten Zeichens im Speicher
DCRE D; Verringern Sie die Zeichenfolgenlänge
NZ READ_STRING; Fahren Sie fort, bis die Zeichenfolgenlänge 0 erreicht
; Funktion zum Überprüfen, ob eine Zeichenfolge ein Palindrom ist
IS_PALINDROME:
; Register speichern
PUSH H
PUSH D
; Führen Sie eine Schleife durch die Hälfte der Saite
LHLD HERKUNFT; Laden Sie die Ursprungsadresse aus dem Speicher
MOV H,L; Kopieren Sie das Low-Byte der Adresse nach H
HL HINZUFÜGEN; Erhöhen Sie die Adresse
MOV L,H; Kopieren Sie das High-Byte der Adresse nach L
MOV D,L; Kopieren Sie das High-Byte der Adresse nach D
Papa D; Verdoppeln Sie die Adresse
XCHG H,D; Tauschen Sie H- und D-Register aus
MOV H,A; Speichern Sie das letzte Zeichen in H
DCRE E; Verringern Sie die Zeichenfolgenlänge
LOOP_PAL:
LHLD HERKUNFT; Laden Sie die Ursprungsadresse aus dem Speicher
MOV L,H; Kopieren Sie das Low-Byte der Adresse nach L
Papa D; Verdoppeln Sie die Adresse
XTHL; Tauschen Sie die H- und L-Register aus, um sie von einer Speicheradresse zu laden
CPI M; Vergleichen Sie das Zeichen an der aktuellen Adresse mit dem letzten Zeichen
PUSH PSW; Speichern Sie die Statusflags
ANI NULL; Überprüfen Sie, ob die Zeichen gleich sind
POP PSW; Stellen Sie die Statusflags wieder her
JZ NOT_PALINDROME; Wenn gleich, fahren Sie fort
XCHG H,D; Tauschen Sie H- und D-Register aus
MOV H,A; Speichern Sie das nächste Zeichen in H
DCRE E; Verringern Sie die Zeichenfolgenlänge
NZ LOOP_PAL; Fahren Sie bis zum Ende der Zeichenfolge fort
POP D
POP H
; Ende der Funktion
RET
NOT_PALINDROME:
CMP E,0; Überprüfen Sie, ob die Zeichenfolgenlänge 0 ist
JZ PAL_DONE; Wenn 0, ist die Zeichenfolge ein Palindrom
POP D
POP H
; Funktion zum Drucken einer Zeichenfolge
PRINT_STRING:
; Register speichern
PUSH D
LOOP_PRINT:
LHLD HERKUNFT; Laden Sie die Ursprungsadresse aus dem Speicher
OUT 0,A; Drucken Sie das Zeichen an der aktuellen Adresse
XTHL; Tauschen Sie die H- und L-Register aus, um sie von einer Speicheradresse zu laden
CPI NULL_BYTE; Überprüfen Sie, ob das Zeichen ein Nullbyte ist
POP D
RETNZ
; Funktion zum Drucken einer Meldung, die angibt, dass es sich bei der Zeichenfolge um ein Palindrom handelt
PRINT_PALINDROME:
MOV E,STR_PALINDROME; Verschieben Sie die Nachrichtenadresse in das E-Register
CALL PRINT_STRING; Rufen Sie die Funktion PRINT_STRING auf
; Funktion zum Drucken einer Meldung, die angibt, dass die Zeichenfolge kein Palindrom ist
PRINT_NOT_PALINDROME:
MOV E,STR_NOT_PALINDROME; Verschieben Sie die Nachrichtenadresse in das E-Register
CALL PRINT_STRING; Rufen Sie die Funktion PRINT_STRING auf
; Drucken Sie das Ergebnis der Palindromprüfung aus
MVI A,'$'; Drucken Sie ein Dollarzeichen, um das Ergebnis zu trennen
OUT 0,A; Drucken Sie das Dollarzeichen aus
CMP E,0; Überprüfen Sie, ob die Zeichenfolge ein Palindrom ist
JZ PRINT_PALINDROME; Wenn 0, wird die Palindrom-Nachricht gedruckt
CALL PRINT_NOT_PALINDROME; Andernfalls wird die Meldung „Kein Palindrom“ ausgegeben
; Gibt ein neues Zeilenzeichen aus
OUT 0,CRLF
; Stoppen Sie das Programm
HLT
; Zu druckende Zeichenfolgen
STR_PALINDROME:DB '$Der String ist ein Palindrom$'
STR_NOT_PALINDROME:DB '$Der String ist kein Palindrom$'
CRLF:DB ODH,OAH,0; Wagenrücklauf und Zeilenvorschub
; Ende des Programms
„