Συστήματα Μικροϋπολογιστών Παραδείγματα προγραμματισμού του με Intel 8085 Υπεύθυνος Μαθήματος: K. ΠΕΚΜΕΣΤΖΗ
Άδεια Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άδεια χρήσης άλλου τύπου, αυτή πρέπει να αναφέρεται ρητώς.
Παράδειγμα 1 ίνεται αριθμός των 8 bit στη θέση μνήμης 0040H. Να βρεθούν τα δεκαεξαδικά ψηφία υψηλότερης και χαμηλότερης τάξης (σε δυαδική παράσταση) και να αποθηκευτούν στις θέσεις 0041H και 0042H αντίστοιχα. 0040: X Y 0041: 0 X 0042: 0 Y
Παράδειγμα 1 Λύση LXI H,0040 MOV A, M MOV B, A RRC RRC RRC RRC ; Κρατώ αντίγραφο ; 4 περιστροφές δεξιά ; Το υψηλότερης αξίας Hex ψηφίο ; πάει στη χαμηλότερη θέση ANI 0F ; Απομόνωση X, 0F 16 = 00001111 2 ΙΝΧ H MOV M, A ; Αποθηκεύω το X στη θέση 0041H MOV A, B ; Επαναφέρω ANI 0F ; Απομονώνω το χαμηλότερης ; Hex αξίας ψηφίο Y INX H MOV M, A HLT ; Αποθηκεύω το Y στη θέση 0042H ; Τέλος 0040: X Y 0041: 0 X 0042: 0 Y
Παράδειγμα 2 Αριθμός των 16 bits που βρίσκεται στις θέσεις 40 και 41 της μνήμης να προστεθεί στον αριθμό των 16 bits που βρίσκεται στις θέσεις 42 και 43 της μνήμης. Το αποτέλεσμα να τοποθετηθεί στις θέσεις 44 και 45. Τα περισσότερο σημαντικά bytes βρίσκονται στις θέσεις 41, 43 και 45. Να βρεθεί και δεύτερος τρόπος. 0040: X1 0041: X2 0042: Y1 0043: Y2 0044: S1 0045: S2 + input1 X2 X1 41 40 input2 Y2 Y1 43 42 output S2 S1 45 44 =
Παράδειγμα 2 Λύση Α LXI H,0040H INX H MOV A,M ; INX H INX H ; (A) = X1 (HL) = 42H INX H ; ADC M ; (HL) = 43H Προσθ. τα περισσότερο σημαντικά bytes X2+Y2+CY ADD M ; Προσθέτουμε τα λιγότερο σημαντικά bytes X1+Y1=S1 INX H ; MOV M,B ; (HL) = 44H Αποθήκευση S2 MOV B,A ; DCX H ; MOV A,M ; (B) = S1 (HL) = 41H (A) = X2 INX H ; MOV M,A ; HLT ; (HL) = 45H Αποθήκευση αποτελέσματος S2 Τέλος προγράμματος
Παράδειγμα 2 Λύση Β LHLD 0040H XCHG LHLD 0042H DAD D SHLD 0044H HLT Φορτώνουμε στο ζεύγος HL τα περιεχόμενα των θέσεων 40H, 41Η Φορτώνουμε στον DE τα περιεχόμενα του ζεύγους HL HL M(43)M(42) Πρόσθεση των 2 αριθμών Αποθήκευση αποτελέσματος στις θέσεις 44, 45 Τέλος προγράμματος
Παράδειγμα 3 Εδώ υπολογίζεται το τετράγωνο ενός αριθμού που περιέχεται στη θέση 0040Η της μνήμης με τη βοήθεια ενός πίνακα. Ο αριθμός υποθέτουμε ότι ανήκει στο διάστημα [0,15]. Ο πίνακας τοποθετείται στις θέσεις 0100Η έως 010FH της μνήμης. Το αποτέλεσμα τοποθετείται στη θέση 0041Η. Πίνακας τετραγώνων 0100Η: 00Η 0101Η: 01Η 0102Η: 04H 0103H: 09H 0104H: 10H 0105H: 19H 0106H: 24H 0107H: 31H 0108Η: 40Η 0109Η: 51Η 010AΗ: 64H 010BH: 79H 010CH: 90H 010DH: A9H 010EH: C4H 010FH: E1H
Παράδειγμα 3 Λύση LDA 0040H MOV L,A MVI H,0 LXI D,0100H DAD D MOV A,M STA 0041H HLT ημιουργία της κατάλληλης διεύθυνσης του πίνακα τετραγώνων Μεταφέρεται στον Α το αντίστοιχο τετράγωνο Αποθήκευση του αποτελέσματος στη θέση 41Η
Παράδειγμα 3 Απλούστερη Λύση LDA 0040H MOV L, A MVI H, 01 MOV A, M STA 0041H HLT ημιουργία στο HL της κατάλληλης διεύθυνσης του πίνακα τετραγώνων Μεταφέρεται στον Α το αντίστοιχο τετράγωνο Αποθήκευση του αποτελέσματος στη θέση 41Η
Παράδειγμα 4 Ένας διψήφιος αριθμός είναι αποθηκευμένος στις θέσεις 40 και 41 της μνήμης, με το περισσότερο σημαντικό ψηφίο (MSD) στη θέση 40. Ο αριθμός αυτός να μετατραπεί σε δυαδικό και να αποθηκευτεί στη θέση 42.
Παράδειγμα 4 Λύση LXI H, 0040H MOV A,M ADD A MOV B,A ADD A ADD A ADD B INX H ADD M INX H MOV M,A HLT ; (A) MSD ; (A) 2 MSD ; (B) 2 MSD ; (A) 2 (A) = 4 MSD ; (A) 2 (A) = 8 MSD ; (A) (A)+(B) = 8 MSD + 2 MSD ; =10 MSD ; (A) 10 MSD + LSD ; Αποθήκευση αποτελέσματος
Παράδειγμα 5 Τα περιεχόμενα των θέσεων 0040Η και 0041Η της μνήμης είναι απλοί δυαδικοί αριθμοί (χωρίς πρόσημο). Να προσδιοριστεί ο μεγαλύτερος από τους δύο αριθμούς και να αποθηκευτεί στη θέση 0042 Η. N1 N2 max (N1, N2) 40 41 42
Παράδειγμα 5 Λύση DONE: LXI H, 0040H MOV A,M INX H CMP M JNC DONE MOV A,M INX H MOV M,A HLT ; Συγκρίνονται οι 2 αριθμοί ; Άλμα αν ο 1ος είναι μεγαλύτερος ; N1(A)>N2(M) => CY=0 ; διαφορετικά (N1< N2) προετοιμάζεται ο 2ος ; (H)(L) 0042H ; Αποθήκευση μεγαλύτερου στη 0042Η
Παράδειγμα 6 Στο πρόγραμμα αυτό προσδιορίζεται το μεγαλύτερο ενός συνόλου αριθμών. Το πλήθος των αριθμών βρίσκεται στη θέση 0041H της μνήμης και οι αριθμοί αρχίζουν από τη θέση 0042H. Το αποτέλεσμα καταχωρείται στη θέση 40H.
Παράδειγμα 6 - Λύση FOR: NEXT: LXI H, 0041H MOV B,M SUB A INX H CMP M JNC NEXT MOV A,M DCR B JNZ FOR STA 0040H HLT ; (B) πλήθος αριθμών ; Μηδενίζεται ο Α ; Είναι ο επόμενος αριθμός > Α ; δηλ. του τοπικού μεγίστου; ; Ναι, αντικαθίσταται ο μέγιστος. ; Αλλιώς προχωράμε στον έλεγχο του ; επόμενου αριθμού
Παράδειγμα 7 Στο πρόγραμμα αυτό προσδιορίζεται το μήκος ενός συνόλου χαρακτήρων (ASCII string) όπου κάθε χαρακτήρας αντιστοιχεί σε έναν κωδικό του ενός byte. Το string είναι αποθηκευμένο στη μνήμη, από τη θέση 0041Η και μετά. Το τέλος του προσδιορίζεται από ένα χαρακτήρα CR (0DH). Αφού βρεθεί το ζητούμενο μήκος (χωρίς το CR) τοποθετείται στη θέση 0040Η.
Παράδειγμα 7 Λύση FOR: DONE: LXI H,0041H MVI B,0 ; (Β)=αρχικό μήκος 0 MVI A,0Dh ; (A) Κωδικός CR CMP M JZ DONE INR B INX H JMP FOR MOV Α,Β STA 0040H HLT ; Είναι ο χαρακτήρας CR; ; Αν ναι τέλος ; ιαφορετικά το μήκος αυξάνεται ; Κατά ένα ; Έλεγχος επόμενου χαρακτήρα ; Αποθήκευση μήκους
Παράδειγμα 8 ίνεται ένα block Ν δεδομένων στη μνήμη. Η πρώτη διεύθυνση βρίσκεται στον καταχωρητή D-E και το πλήθος Ν στον καταχωρητή Β. Ζητείται ένα πρόγραμμα που να συγκρίνει το περιεχόμενο του καταχωρητή Α με το block των δεδομένων και αν δεν περιλαμβάνεται αυτό να προστίθεται στο τέλος του block με αντίστοιχη ενημέρωση του πλήθους Ν.
Παράδειγμα 8 Λογικό ιάγραμμα Αρχή (C) (H)(L) (Β) (D)(E) M((H)(L))=A? Nαί Όχι (H)(L) (C) (Η)(L)+1 (C)-1 Όχι (C)=0? Nαί M((H)(L)) (A) (B) (B)+1 Τέλος
Παράδειγμα 8 Λύση ADR1: ADR2: MOV C,B MOV H,D MOV L,E CMP M JZ ADR2 INX H DCR C JNZ ADR1 MOV M,A INR B HLT ; (Β) Πλήθος δεδομένων ; (D)(E) (H)(L) ; Συγκρίνεται ο Α με τις τιμές του πίνακα ; Αν περιλαμβάνεται, η διαδικασία ; περατώνεται ; Αλλιώς σαρώνουμε όλο τον πίνακα ; εν βρέθηκε, άρα θα προστεθεί στο τέλος ; Ενημέρωση πλήθους Ν
Παράδειγμα 9 ίνονται 256 μη αρνητικοί αριθμοί στην περιοχή 2000-20FF της μνήμης. Υπολογίζεται ο μέσος όρος των αριθμών με ακρίβεια 8 bits και καταχωρείται στη θέση 3000.
Παράδειγμα 9 Λογικό ιάγραμμα
Παράδειγμα 9 - Λύση ADR1: ADR2: LXI H, 2000H MVI B, 00H MVI A, 00H ADD M JNC ADR2 INR B INR L JNZ ADR1 LXI H, 3000H MOV M,B HLT ; Αρχικοποιήσεις ; Άθροιση στον συσσωρευτή Α ; Υπερχειλίσεις στον καταχωρητή Β ; Επόμενος αριθμός ; Αν συμπληρωθούν 256 αθροίσεις, τέλος ; και αποθήκευση αποτελέσματος
Παράδειγμα 10 Μετατροπή υαδικού αριθμού σε BCD Θέση Μνήμης 4 bit 4 bit 40H 41H 42H 0 BCD 0 BCD Binary Μονάδες εκάδες
Παράδειγμα 10 Λύση DECA: END: LDA 0042H CPI 64H ; Είναι μεγαλύτερος του 99? (A-99) JNC END ; Αν ναι τέλος (A>99) MVI B,FFH ; Αλλιώς Α 99 INR B SUI 0AH ; Αλλεπάλληλες αφαιρέσεις του 10 JNC DECA ; Αν είναι θετικός συνέχισε ADI 0AH ; ιόρθωση του αρνητικού υπολοίπου STA 0040H ; Αποθήκευση μονάδων MOV A,B STA 0041H ; Αποθήκευση δεκάδων HLT
Παράδειγμα 11 Η χρήση της εντολής δεκαδικής ρύθμισης DAA Αν Α L >9 ή AC=1 τότε A A+6 (ή A L A L +6) Αν A H >9 ή CY=1 τότε A A+60 (ή A H A H +6) MVI A,27 ADI 36 ;A 5DH=6310 MVI A,9 INR A ;A 0AH=1010 DAA ;A 63 MVI A,29 DAA ;A 1010 ADI 18 ;A 41H (AC=1) DAA ;A 47
Παράδειγμα 12 Μετατροπή υαδικού Αριθμού σε εκαδική Μορφή Παράδειγμα Εδώ είναι το 4*6 4Ε=4*16+14=4*10 + Ε + 4*6=78 Σχηματίζω 4*6 σε δεκαδική μορφή 4 8 10 16 1Ε +6 DAA 24 +4Ε 72 +6 DAA 78
Παράδειγμα 12 Λύση MOV B,A ; B 16X+Y (αποθήκευση) ANI F0 ; A 16X RRC RRC RRC RRC ; A X ADD A ; A 2X (Hex) DAA ; A 2X (Dec) MOV C,A ; Αποθήκευση ADD A ; A 4X (Hex) DAA ; A 4X (Dec) ADD C ; A 6X (Hex) DAA ; A 6X (Dec) ADD B ; 10X+Y+6X = 16X+Y DAA ; Dec HLT Λόγω της DAA που ακολουθεί μπορούμε να θεωρήσουμε ότι ο Β περιέχει τον αρχικό αριθμό σε δεκαδική μορφή (10X+Y)
Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού έργου του διδάσκοντα. Το έργο «Ανοικτά Ακαδημαϊκά Μαθήματα» του ΕΜΠ έχει χρηματοδοτήσει μόνο την αναδιαμόρφωση του υλικού. Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους.