Her er et mulig 8085-monteringsprogram for å sjekke om en gitt streng er et palindrom:
```montering
ORG 100H
; Definer konstanter
STRLEN EQU 10
NULL_BYTE EQU 0
; Definer minneplasseringer
ORIGINAL:equ 02H
STRING_LOCATION:equ 03H
STRING_LENGTH:equ 04H
; Definer registerbruk
A:ekv 0; Akkumulator
B:ekv 1; Indirekte minne
C:ekv 2; Bær register
D:ekv 3; Dataregister
E:ekv 4; Indeksregister
H:ekv 5; Høyt register med 16-bits verdi
L:ekv 6; Lavt register med 16-bits verdi
M:ekv 7; Stabelpeker
P:ekv 8; Programstatusord
; Definer flagg
NULL:bit 0,P; Null flagg
SIGN:bit 1,P; Skilt flagg
PARITET:bit 2,P; Paritetsflagg
BÆRE:bit 4,P; Bær flagg
; Hovedprogrammet starter her
HOVED:
; Initialiser data
XCHG H,L; Bytt ut H- og L-registre
MVI E,STRING_LENGTH; Sett E til lengden på strengen
MOV H,E; Kopier lengden til H
MVI L,NULL_BYTE; Initialiser L med null-byten
SHLD ORIGIN; Lagre lengden på ORIGIN-adressen
MVI E,STRLEN; Sett E til maksimal lengde på strengen
MOV D,STRLEN; Kopier maksimal lengde til D
LOOP1:
XTHL; Bytt H- og L-registre for å laste fra en minneadresse
MVI M,0; Initialiser minneplassering med en nullbyte
INCR M; Øk minnepekeren
DCRE D; Reduser strenglengden
NZ LOOP1; Fortsett til strenglengden når 0
MVI E,STRLEN; Sett E til maksimal lengde på strengen
MOV D,STRLEN; Kopier maksimal lengde til D
READ_STRING:
IN 0,A; Les et tegn fra tastaturet
MOV H,A; Lagre karakteren i H
XTHL; Bytt H- og L-registre for å laste fra en minneadresse
MVI M,0; Initialiser minneplassering med en nullbyte
LHLD ORIGIN; Last opp opprinnelsesadressen fra minnet
INCR M; Øk minnepekeren
MOV L,A; Lagre karakteren i L
SHLD ORIGIN; Lagre adressen til neste tegn i minnet
DCRE D; Reduser strenglengden
NZ READ_STRING; Fortsett til strenglengden når 0
; Funksjon for å sjekke om en streng er et palindrom
IS_PALINDROME:
; Lagre registre
SKYV H
SKYV D
; Løkke gjennom halve strengen
LHLD ORIGIN; Last opp opprinnelsesadressen fra minnet
MOV H,L; Kopier den lave byten til adressen til H
ADD HL; Øk adressen
MOV L,H; Kopier den høye byten til adressen til L
MOV D,L; Kopier den høye byten til adressen til D
PAPPA D; Doble adressen
XCHG H,D; Bytt H- og D-registre
MOV H,A; Lagre det siste tegnet i H
DCRE E; Reduser strenglengden
LOOP_PAL:
LHLD ORIGIN; Last opp opprinnelsesadressen fra minnet
MOV L,H; Kopier den lave byten til adressen til L
PAPPA D; Doble adressen
XTHL; Bytt H- og L-registre for å laste fra en minneadresse
KPI M; Sammenlign tegnet på gjeldende adresse med det siste tegnet
PUSH PSW; Lagre statusflaggene
ANI NULL; Sjekk om tegnene er like
POP PSW; Gjenopprett statusflaggene
JZ NOT_PALINDROME; Hvis lik, fortsett
XCHG H,D; Bytt H- og D-registre
MOV H,A; Lagre neste karakter i H
DCRE E; Reduser strenglengden
NZ LOOP_PAL; Fortsett til slutten av strengen
POP D
POP H
; Slutt på funksjon
RET
NOT_PALINDROME:
CMP E,0; Sjekk om strenglengden er 0
JZ PAL_DONE; Hvis 0, er strengen et palindrom
POP D
POP H
; Funksjon for å skrive ut en streng
PRINT_STRING:
; Lagre registre
SKYV D
LOOP_PRINT:
LHLD ORIGIN; Last opp opprinnelsesadressen fra minnet
UT 0,A; Skriv ut tegnet på gjeldende adresse
XTHL; Bytt H- og L-registre for å laste fra en minneadresse
CPI NULL_BYTE; Sjekk om tegnet er en nullbyte
POP D
RETNZ
; Funksjon for å skrive ut en melding som indikerer at strengen er et palindrom
PRINT_PALINDROME:
MOV E,STR_PALINDROME; Flytt meldingsadressen til E-registeret
RING PRINT_STRING; Ring PRINT_STRING-funksjonen
; Funksjon for å skrive ut en melding som indikerer at strengen ikke er et palindrom
PRINT_NOT_PALINDROME:
MOV E,STR_NOT_PALINDROME; Flytt meldingsadressen til E-registeret
RING PRINT_STRING; Ring PRINT_STRING-funksjonen
; Skriv ut resultatet av palindromsjekken
MVI A,'$'; Skriv ut et dollartegn for å skille resultatet
UT 0,A; Skriv ut dollartegnet
CMP E,0; Sjekk om strengen er et palindrom
JZ PRINT_PALINDROME; Hvis 0, skriv ut palindrommeldingen
RING PRINT_NOT_PALINDROME; Ellers skriver du ut meldingen ikke palindrom
; Skriv ut et nytt linjetegn
UT 0,CRLF
; Stopp programmet
HLT
; Strenger som skal skrives ut
STR_PALINDROME:DB '$Strengen er et palindrom$'
STR_NOT_PALINDROME:DB '$Strengen er ikke et palindrom$'
CRLF:DB ODH,OAH,0; Vognretur og linjemating
; Slutt på programmet
```