Προγραμματισμός

Γνώση Υπολογιστών >> Προγραμματισμός >  >> Προγραμματισμός Υπολογιστών Γλώσσες

Κωδικός προγράμματος μικροεπεξεργαστή 8085 για παλίνδρομο;

Ακολουθεί ένα πιθανό πρόγραμμα συναρμολόγησης 8085 για να ελέγξετε εάν μια δεδομένη συμβολοσειρά είναι παλίνδρομο:

``` συναρμολόγηση

ORG 100H

; Ορίστε σταθερές

STRLEN EQU 10

NULL_BYTE EQU 0

; Καθορίστε τοποθεσίες μνήμης

ΠΡΟΕΛΕΥΣΗ:equ 02H

STRING_LOCATION:εξίσωση 03H

STRING_LENGTH:εξίσωση 04 Ω

; Ορίστε τη χρήση εγγραφής

Α:εξίσωση 0; Συσσωρευτής

Β:εξίσωση 1; Έμμεση μνήμη

C:εξίσωση 2; Μεταφορά μητρώου

D:εξίσωση 3; Μητρώο δεδομένων

Ε:εξίσωση 4; Μητρώο ευρετηρίου

Η:εξίσωση 5; Υψηλό καταχωρητή τιμής 16 bit

L:εξίσωση 6; Χαμηλό καταχωρητή τιμής 16 bit

Μ:εξίσωση 7; Δείκτης στοίβας

Ρ:εξίσωση 8; Λέξη κατάστασης προγράμματος

; Ορίστε σημαίες

ΜΗΔΕΝ:bit 0,P; Σημαία μηδέν

ΣΗΜΑ:bit 1,P; Σημαία σημαία

ΙΣΟΤΗΤΑ:bit 2,P; Σημαία ισοτιμίας

CARRY:bit 4,P; Φέρτε σημαία

; Το κύριο πρόγραμμα ξεκινά εδώ

ΚΥΡΙΟΣ:

; Αρχικοποίηση δεδομένων

XCHG H,L; Καταχωρητές H και L ανταλλαγής

MVI E,STRING_LENGTH; Ρυθμίστε το E στο μήκος της χορδής

MOV H,E; Αντιγράψτε το μήκος στο H

MVI L,NULL_BYTE; Αρχικοποιήστε το L με το null byte

SHLD ORIGIN; Αποθηκεύστε το μήκος στη διεύθυνση ORIGIN

MVI E,STRLEN; Ρυθμίστε το E στο μέγιστο μήκος της συμβολοσειράς

MOV D,STRLEN; Αντιγράψτε το μέγιστο μήκος στο D

LOOP1:

XTHL; Εναλλαγή καταχωρήσεων H και L για φόρτωση από μια διεύθυνση μνήμης

MVI M,0; Αρχικοποιήστε τη θέση μνήμης με ένα μηδενικό byte

INCR M; Αύξηση δείκτη μνήμης

DCRE D; Μειώστε το μήκος της χορδής

NZ LOOP1; Συνεχίστε μέχρι το μήκος της χορδής να φτάσει το 0

MVI E,STRLEN; Ρυθμίστε το E στο μέγιστο μήκος της συμβολοσειράς

MOV D,STRLEN; Αντιγράψτε το μέγιστο μήκος στο D

READ_STRING:

ΣΕ 0,Α; Διαβάστε έναν χαρακτήρα από το πληκτρολόγιο

MOV H,A; Αποθηκεύστε τον χαρακτήρα στο H

XTHL; Εναλλαγή καταχωρήσεων H και L για φόρτωση από μια διεύθυνση μνήμης

MVI M,0; Αρχικοποιήστε τη θέση μνήμης με ένα μηδενικό byte

LHLD ORIGIN; Φορτώστε τη διεύθυνση προέλευσης από τη μνήμη

INCR M; Αύξηση δείκτη μνήμης

MOV L,A; Αποθηκεύστε τον χαρακτήρα στο L

SHLD ORIGIN; Αποθηκεύστε τη διεύθυνση του επόμενου χαρακτήρα στη μνήμη

DCRE D; Μειώστε το μήκος της χορδής

NZ READ_STRING; Συνεχίστε μέχρι το μήκος της χορδής να φτάσει το 0

; Λειτουργία για έλεγχο εάν μια συμβολοσειρά είναι παλίνδρομο

IS_PALINDROME:

; Αποθήκευση μητρώων

ΩΘΗΣΗ Η

ΩΘΗΣΗ Δ

; Περάστε το μισό κορδόνι

LHLD ORIGIN; Φορτώστε τη διεύθυνση προέλευσης από τη μνήμη

MOV H,L; Αντιγράψτε το χαμηλό byte της διεύθυνσης στο H

ΠΡΟΣΘΗΚΗ HL; Αυξήστε τη διεύθυνση

MOV L,H; Αντιγράψτε το υψηλό byte της διεύθυνσης στο L

MOV D,L; Αντιγράψτε το υψηλό byte της διεύθυνσης στο D

DAD D; Διπλασιάστε τη διεύθυνση

XCHG H,D; Εναλλαγή καταχωρητών H και D

MOV H,A; Αποθηκεύστε τον τελευταίο χαρακτήρα στο H

DCRE E; Μειώστε το μήκος της χορδής

LOOP_PAL:

LHLD ORIGIN; Φορτώστε τη διεύθυνση προέλευσης από τη μνήμη

MOV L,H; Αντιγράψτε το χαμηλό byte της διεύθυνσης στο L

DAD D; Διπλασιάστε τη διεύθυνση

XTHL; Εναλλαγή καταχωρήσεων H και L για φόρτωση από μια διεύθυνση μνήμης

CPI M; Συγκρίνετε τον χαρακτήρα στην τρέχουσα διεύθυνση με τον τελευταίο χαρακτήρα

PUSH PSW; Αποθηκεύστε τις σημαίες κατάστασης

ANI ΜΗΔΕΝ; Ελέγξτε αν οι χαρακτήρες είναι ίσοι

POP PSW; Επαναφέρετε τις σημαίες κατάστασης

JZ NOT_PALINDROME; Αν είναι ίσο, συνεχίστε

XCHG H,D; Εναλλαγή καταχωρητών H και D

MOV H,A; Αποθηκεύστε τον επόμενο χαρακτήρα στο H

DCRE E; Μειώστε το μήκος της χορδής

NZ LOOP_PAL; Συνεχίστε μέχρι το τέλος της χορδής

ΠΟΠ Δ

POP H

; Τέλος λειτουργίας

ΜΟΥΣΚΕΥΩ

NOT_PALINDROME:

CMP E,0; Ελέγξτε εάν το μήκος της συμβολοσειράς είναι 0

JZ PAL_DONE; Αν 0, η συμβολοσειρά είναι παλίνδρομο

ΠΟΠ Δ

POP H

; Λειτουργία εκτύπωσης συμβολοσειράς

PRINT_STRING:

; Αποθήκευση μητρώων

ΩΘΗΣΗ Δ

LOOP_PRINT:

LHLD ORIGIN; Φορτώστε τη διεύθυνση προέλευσης από τη μνήμη

OUT 0,A; Εκτυπώστε τον χαρακτήρα στην τρέχουσα διεύθυνση

XTHL; Εναλλαγή καταχωρήσεων H και L για φόρτωση από μια διεύθυνση μνήμης

CPI NULL_BYTE; Ελέγξτε αν ο χαρακτήρας είναι μηδενικό byte

ΠΟΠ Δ

RETNZ

; Λειτουργία για την εκτύπωση ενός μηνύματος που υποδεικνύει ότι η συμβολοσειρά είναι παλίνδρομο

PRINT_PALINDROME:

MOV E,STR_PALINDROME; Μετακινήστε τη διεύθυνση του μηνύματος στον καταχωρητή E

ΚΛΗΣΗ PRINT_STRING; Καλέστε τη συνάρτηση PRINT_STRING

; Λειτουργία για την εκτύπωση ενός μηνύματος που υποδεικνύει ότι η συμβολοσειρά δεν είναι παλίνδρομο

PRINT_NOT_PALINDROME:

MOV E,STR_NOT_PALINDROME; Μετακινήστε τη διεύθυνση του μηνύματος στον καταχωρητή E

ΚΛΗΣΗ PRINT_STRING; Καλέστε τη συνάρτηση PRINT_STRING

; Εκτυπώστε το αποτέλεσμα του ελέγχου παλίνδρομου

MVI A,'$'; Εκτυπώστε ένα σύμβολο δολαρίου για να διαχωρίσετε το αποτέλεσμα

OUT 0,A; Εκτυπώστε το σύμβολο του δολαρίου

CMP E,0; Ελέγξτε αν η χορδή είναι παλίνδρομο

JZ PRINT_PALINDROME; Εάν είναι 0, εκτυπώστε το μήνυμα παλίνδρομου

ΚΛΗΣΗ PRINT_NOT_PALINDROME; Διαφορετικά, εκτυπώστε το μήνυμα not palindrome

; Εκτυπώστε έναν νέο χαρακτήρα γραμμής

OUT 0,CRLF

; Διακόψτε το πρόγραμμα

HLT

; Συμβολοσειρές για εκτύπωση

STR_PALINDROME:DB '$The string is a palindrome$'

STR_NOT_PALINDROME:DB '$Η συμβολοσειρά δεν είναι παλίνδρομο$'

CRLF:DB ODH,OAH,0; Επιστροφή μεταφοράς και τροφοδοσία γραμμής

; Τέλος προγράμματος

```

Συναφής σύστασή

Πνευματικά δικαιώματα © Γνώση Υπολογιστών Όλα τα δικαιώματα κατοχυρωμένα