Home Hardware Networking Programmazione Software Domanda Sistemi
Conoscenza del computer >> Programmazione >> Computer Programming Languages >> .

Codice programma microprocessore 8085 per palindromo?

Ecco un possibile programma assembly 8085 per verificare se una determinata stringa è palindroma:

"assemblea".

ORG 100H

; Definire le costanti

STRLEN EQU 10

NULL_BYTE EQU 0

; Definire le posizioni di memoria

ORIGINE:equ 02H

STRING_LOCATION:equivalente 03H

STRING_LENGTH:equivalente a 04H

; Definire l'utilizzo del registro

A:eq 0; Accumulatore

B:eq 1; Memoria indiretta

C:eq 2; Portare il registro

D:equ 3; Registro dati

E:equ 4; Registro indice

H:equ 5; Registro alto con valore a 16 bit

L:equ 6; Registro basso con valore a 16 bit

M:equ 7; Puntatore dello stack

P:equ 8; Parola di stato del programma

; Definire i flag

ZERO:bit 0,P; Bandiera zero

SEGNO:bit 1,P; Bandiera del segno

PARITÀ:bit 2,P; Bandiera di parità

CARRY:bit 4,P; Porta la bandiera

; Il programma principale inizia qui

PRINCIPALE:

; Inizializza i dati

XCHG H,L; Scambiare i registri H e L

MVI E,STRING_LENGTH; Imposta E sulla lunghezza della corda

MOV H,E; Copia la lunghezza in H

MVIL,NULL_BYTE; Inizializza L con il byte null

ORIGINE SHLD; Memorizza la lunghezza all'indirizzo ORIGIN

MVI E,STRLEN; Imposta E sulla lunghezza massima della corda

MOV D,STRLEN; Copia la lunghezza massima in D

CICLO1:

XTHL; Scambia i registri H e L per caricare da un indirizzo di memoria

MVI M,0; Inizializza la posizione di memoria con un byte nullo

INCR M; Incrementa il puntatore della memoria

DCRE D; Diminuire la lunghezza della stringa

NZ LOOP1; Continua finché la lunghezza della stringa non raggiunge 0

MVI E,STRLEN; Imposta E sulla lunghezza massima della corda

MOV D,STRLEN; Copia la lunghezza massima in D

READ_STRING:

IN0,A; Leggere un carattere dalla tastiera

MOVH,A; Memorizza il carattere in H

XTHL; Scambia i registri H e L per caricare da un indirizzo di memoria

MVI M,0; Inizializza la posizione di memoria con un byte nullo

ORIGINE LHLD; Carica l'indirizzo di origine dalla memoria

INCR M; Incrementa il puntatore della memoria

MOV L,A; Memorizzare il carattere in L

ORIGINE SHLD; Memorizza in memoria l'indirizzo del carattere successivo

DCRE D; Diminuire la lunghezza della stringa

NZ READ_STRING; Continua finché la lunghezza della stringa non raggiunge 0

; Funzione per verificare se una stringa è palindroma

IS_PALINDROME:

; Salva registri

SPINGI H

SPINGERE D

; Passa attraverso metà della corda

ORIGINE LHLD; Carica l'indirizzo di origine dalla memoria

MOV H,L; Copia il byte basso dell'indirizzo in H

AGGIUNGI HL; Incrementa l'indirizzo

MOV L,H; Copia il byte alto dell'indirizzo in L

MOVD,L; Copia il byte alto dell'indirizzo in D

PAPÀ D; Raddoppia l'indirizzo

XCHG H,D; Scambia i registri H e D

MOVH,A; Memorizza l'ultimo carattere in H

DCRE E; Diminuire la lunghezza della stringa

LOOP_PAL:

ORIGINE LHLD; Carica l'indirizzo di origine dalla memoria

MOV L,H; Copia il byte basso dell'indirizzo in L

PAPÀ D; Raddoppia l'indirizzo

XTHL; Scambia i registri H e L per caricare da un indirizzo di memoria

CPI M; Confronta il carattere dell'indirizzo corrente con l'ultimo carattere

PREMERE PSW; Salva i flag di stato

ANI ZERO; Controlla se i caratteri sono uguali

POPPSW; Ripristinare i flag di stato

JZ NOT_PALINDROME; Se è uguale, continua

XCHG H,D; Scambia i registri H e D

MOVH,A; Memorizza il carattere successivo in H

DCRE E; Diminuire la lunghezza della stringa

NZ LOOP_PAL; Continua fino alla fine della corda

POP D

POPH

; Fine della funzione

RET

NOT_PALINDROME:

CMP E,0; Controlla se la lunghezza della stringa è 0

JZ PAL_FATTO; Se 0, la stringa è palindromo

POP D

POPH

; Funzione per stampare una stringa

STAMPA_STRING:

; Salva registri

SPINGERE D

LOOP_PRINT:

ORIGINE LHLD; Carica l'indirizzo di origine dalla memoria

FUORI 0,A; Stampa il carattere all'indirizzo corrente

XTHL; Scambia i registri H e L per caricare da un indirizzo di memoria

CPI NULL_BYTE; Controlla se il carattere è un byte nullo

POP D

RETNZ

; Funzione per stampare un messaggio che indica che la stringa è palindroma

STAMPA_PALINDROME:

MOV E,STR_PALINDROME; Sposta l'indirizzo del messaggio nel registro E

CHIAMA STAMPA_STRING; Chiama la funzione PRINT_STRING

; Funzione per stampare un messaggio che indica che la stringa non è palindroma

PRINT_NOT_PALINDROME:

MOV E,STR_NOT_PALINDROME; Sposta l'indirizzo del messaggio nel registro E

CHIAMA STAMPA_STRING; Chiama la funzione PRINT_STRING

; Stampa il risultato del controllo palindromo

MVI A,'$'; Stampa il simbolo del dollaro per separare il risultato

FUORI 0,A; Stampa il simbolo del dollaro

CMP E,0; Controlla se la stringa è palindromo

JZ STAMPA_PALINDROME; Se 0, stampa il messaggio palindromo

CHIAMA PRINT_NOT_PALINDROME; Altrimenti stampa il messaggio non palindromo

; Stampa un carattere di nuova riga

USCITA 0,CRLF

; Interrompere il programma

HLT

; Stringhe da stampare

STR_PALINDROME:DB '$La stringa è palindroma$'

STR_NOT_PALINDROME:DB '$La stringa non è palindroma$'

CRLF:DB ODH, OAH, 0; Ritorno a capo e avanzamento riga

; Fine del programma

```

 

Programmazione © www.354353.com