Her er et muligt 8085 monteringsprogram til at kontrollere, om en given streng er et palindrom:
``` samling
ORG 100H
; Definer konstanter
STRLEN EQU 10
NULL_BYTE EQU 0
; Definer hukommelsesplaceringer
OPRINDELSE:equ 02H
STRING_LOCATION:lign. 03H
STRING_LENGTH:lig 04H
; Definer registerbrug
A:lig 0; Akkumulator
B:lign. 1; Indirekte hukommelse
C:ækv2; Medbring register
D:ækv 3; Dataregister
E:ækv 4; Indeksregister
H:ækv 5; Højt register med 16-bit værdi
L:lig 6; Lavt register med 16-bit værdi
M:ækv 7; Stack pointer
P:lig 8; Programstatusord
; Definer flag
NUL:bit 0,P; Nul flag
SIGN:bit 1,P; Tegn flag
PARITET:bit 2,P; Paritetsflag
BÆRE:bit 4,P; Bær flag
; Hovedprogrammet starter her
HOVED:
; Initialiser data
XCHG H,L; Byt H- og L-registre
MVI E,STRING_LENGTH; Indstil E til længden af strengen
MOV H,E; Kopier længden til H
MVI L,NULL_BYTE; Initialiser L med null-byten
SHLD OPRINDELSE; Gem længden på ORIGIN-adressen
MVI E,STRLEN; Indstil E til den maksimale længde af strengen
MOV D,STRLEN; Kopier den maksimale længde til D
LOOP1:
XTHL; Skift H- og L-registre for at indlæse fra en hukommelsesadresse
MVI M,0; Initialiser hukommelsesplacering med en null-byte
INCR M; Øg hukommelsesmarkøren
DCRE D; Formindsk strenglængden
NZ LOOP1; Fortsæt indtil strenglængden når 0
MVI E,STRLEN; Indstil E til den maksimale længde af strengen
MOV D,STRLEN; Kopier den maksimale længde til D
READ_STRING:
IN 0,A; Læs et tegn fra tastaturet
MOV H,A; Gem karakteren i H
XTHL; Skift H- og L-registre for at indlæse fra en hukommelsesadresse
MVI M,0; Initialiser hukommelsesplacering med en null-byte
LHLD OPRINDELSE; Indlæs oprindelsesadressen fra hukommelsen
INCR M; Øg hukommelsesmarkøren
MOV L,A; Gem karakteren i L
SHLD OPRINDELSE; Gem adressen på det næste tegn i hukommelsen
DCRE D; Formindsk strenglængden
NZ READ_STRING; Fortsæt indtil strenglængden når 0
; Funktion til at kontrollere, om en streng er et palindrom
IS_PALINDROME:
; Gem registre
SKUB H
SKUB D
; Løkke gennem halvdelen af strengen
LHLD OPRINDELSE; Indlæs oprindelsesadressen fra hukommelsen
MOV H,L; Kopiér den lave byte af adressen til H
TILFØJ HL; Forøg adressen
MOV L,H; Kopiér den høje byte af adressen til L
MOV D,L; Kopiér den høje byte af adressen til D
FAR D; Dobbelt adresse
XCHG H,D; Skift H- og D-registre
MOV H,A; Gem det sidste tegn i H
DCRE E; Formindsk strenglængden
LOOP_PAL:
LHLD OPRINDELSE; Indlæs oprindelsesadressen fra hukommelsen
MOV L,H; Kopiér den lave byte af adressen til L
FAR D; Dobbelt adresse
XTHL; Skift H- og L-registre for at indlæse fra en hukommelsesadresse
CPI M; Sammenlign tegnet på den aktuelle adresse med det sidste tegn
PUSH PSW; Gem statusflag
ANI NUL; Tjek om tegnene er ens
POP PSW; Gendan statusflag
JZ NOT_PALINDROME; Hvis lige, fortsæt
XCHG H,D; Skift H- og D-registre
MOV H,A; Gem det næste tegn i H
DCRE E; Formindsk strenglængden
NZ LOOP_PAL; Fortsæt indtil slutningen af strengen
POP D
POP H
; Slut på funktion
RET
NOT_PALINDROME:
CMP E,0; Tjek om strengens længde er 0
JZ PAL_DONE; Hvis 0, er strengen et palindrom
POP D
POP H
; Funktion til at udskrive en streng
PRINT_STRING:
; Gem registre
SKUB D
LOOP_PRINT:
LHLD OPRINDELSE; Indlæs oprindelsesadressen fra hukommelsen
UD 0,A; Udskriv tegnet på den aktuelle adresse
XTHL; Skift H- og L-registre for at indlæse fra en hukommelsesadresse
CPI NULL_BYTE; Tjek, om tegnet er en nulbyte
POP D
RETNZ
; Funktion til at udskrive en meddelelse, der angiver, at strengen er et palindrom
PRINT_PALINDROME:
MOV E,STR_PALINDROME; Flyt meddelelsesadressen til E-registret
RING PRINT_STRING; Kald PRINT_STRING-funktionen
; Funktion til at udskrive en meddelelse, der angiver, at strengen ikke er et palindrom
PRINT_NOT_PALINDROME:
MOV E,STR_NOT_PALINDROME; Flyt meddelelsesadressen til E-registret
RING PRINT_STRING; Kald PRINT_STRING-funktionen
; Udskriv resultatet af palindromkontrollen
MVI A,'$'; Udskriv et dollartegn for at adskille resultatet
UD 0,A; Udskriv dollartegnet
CMP E,0; Tjek om strengen er et palindrom
JZ PRINT_PALINDROME; Hvis 0, udskriv palindrommeddelelsen
RING PRINT_NOT_PALINDROME; Ellers udskriv ikke palindrom-meddelelsen
; Udskriv et nyt linjetegn
UD 0,CRLF
; Stop programmet
HLT
; Strenge til udskrivning
STR_PALINDROME:DB '$Strengen er et palindrom$'
STR_NOT_PALINDROME:DB '$Strengen er ikke et palindrom$'
CRLF:DB ODH,OAH,0; Vognretur og linjetilførsel
; Slut på programmet
```