Συστήματα Μικροϋπολογιστών — Σεπτέμβριος 2020 (εξ αποστάσεως)¶
Μεταγραφή από τις φωτογραφίες
1.png,2.png,3.png,4.png(τέσσερα θέματα, με τη σειρά τους).
1.png¶
Ερώτηση 1 (Ελεύθερου Κειμένου — 0 βαθμοί)
Ποια λειτουργία επιτελούν, ποια μέθοδο διευθυνσιοδότησης ακολουθούν, πόσα byte(s) μνήμης προγράμματος και ποιους κύκλους μηχανής χρειάζεται οι παρακάτω εντολές: 1. RLC (IX+4) 2. BIT 3, (HL)
2.png¶
Θεωρείστε ένα μικροϋπολογιστικό σύστημα, με χρήση του Z80 . Για τα τέσσερα δεξιότερα ψηφία του αριθμού μητρώου σας: Κ3Κ2Κ1Κ0, 1) γράψτε τον κώδικα της βέλτιστης λύσης για τη δημιουργία ενός αντιγράφου K3K2 (δεκαδικό σύστημα) θέσεων, ξεκινώντας από τη θέση K1K000 (δεκαεξαδικό σύστημα) (50% της βαθμολογίας του θέματος), 2) εξηγείστε γιατί είναι αυτή η βέλτιστη λύση και όχι οποιαδήποτε άλλη: δώστε αντίστοιχο παράδειγμα κώδικα, μη βέλτιστης λύσης, (50% της βαθμολογίας του θέματος). Σημείωση: δεν θεωρείτε σωστή καμία άλλη απάντηση, εκτός από τη βέλτιστη λύση.
3.png¶
Θεωρείστε ένα μικρουπολογιστικό σύστημα, με χρήση του Atiny2313 . Εάν τα τέσσερα αριστερότερα ψηφία του αριθμού μητρώου σας: K3K2K1K0 (ψηφία στο δεκαδικό σύστημα αρίθμησης), να βρείτε την τιμή του δείκτη στοίβας μετά το τέλος της εκτέλεσης του προγράμματος: α) LDI R2K2, K1K0h β) POP R1K3 γ) RCALL Success δ) RET ε) PUSH R3K2 στ) RCALL Success ζ) RET η) STS SPL, K3K2#. Να εξηγήσετε αναλυτικά, βήμα προς βήμα, τον τρόπο εργασίας σας.
4.png¶
Να αναπτυχθεί ρουτίνα που να μετράει λάθη στο κανάλι 1, υπό μορφή παλμών, στη γραμμή CLK/TRG1, κατ' επιλογή με ή χωρίς διακοπές, για μέγιστο πλήθος K0, όπου K0 το αριστερότερο ψηφίο του αριθμού μητρώου σας. Να εξηγήσετε αναλυτικά, βήμα προς βήμα, τον τρόπο εργασίας σας.
Επιπλέον πηγές χωρίς μεταγραφή εδώ (λύσεις →
2020-09.solutions.md, ή διπλότυπες φωτογραφίες της ίδιας σελίδας):septembrhs_2020_lyseis.pdf,20210129_020942.jpg
Λύσεις (🟡 community)
Κατάσταση: 🟡 community Πηγή: προτεινόμενες λύσεις (αρχείο PDF) και φωτογραφία λύσης, χωρίς επιβεβαιωμένη πηγή
Προσοχή
Οι σελίδες 2–4 της λύσης δίνουν παραδείγματα από τη θεωρία (αντιγραφή θέσεων 3000h–300Fh, παράδειγμα 4.3, παράδειγμα 2.10) με άλλες τιμές· δεν είναι λύση των ερωτημάτων 2–4 με τα ψηφία του αριθμού μητρώου. Στο παράδειγμα 2.10 η γραφή «OUT (41h), 57h» δεν είναι έγκυρη σύνταξη Z80· η έξοδος με άμεση διεύθυνση γίνεται μόνο από τον A (OUT (n),A).
Λύσεις — Σεπτέμβριος 2020¶
septembrhs_2020_lyseis.pdf¶
Ποια λειτουργία επιτελούν, ποια μέθοδο διευθυνσιοδότησης ακολουθούν, πόσα byte(s) μνήμης προγράμματος και ποιους κύκλους μηχανής χρειάζεται οι παρακάτω εντολές: 1. RLC (IX+4) 2. BIT 3, (HL)
RLC (IX+4) - Περιγραφή: Τα περιεχόμενα της θέσης μνήμης που διευθυνσιοδοτείται από τα περιεχόμενα του ζεύγους καταχωρητών ΙΧ αυξημένα κατά τέσσερα, υφίστανται αριστερή κυκλική ολίσθηση κατά ένα bit και το αποτέλεσμα αποθηκεύεται πίσω σε εκείνη τη θέση. - Διευθυνσιοδότηση: Δεικτοδοτούμενη (indexed). - Bytes: 4 (3 για OP code + 1 για offset)
[Σχήμα: Διάγραμμα κωδικοποίησης εντολής σε 4 bytes: byte 1: DD (11011101), byte 2: CB (11001011), byte 3: offset value d, byte 4: 06 (00000110)]
- Κύκλοι μηχανής: προσκόμισης εντολής, εγγραφής-ανάγνωσης μνήμης
BIT 3, (HL) - Περιγραφή: Ελέγχεται το τρίτο bit της θέσης μνήμης που διευθυνσιοδοτείται από τα περιεχόμενα του ζεύγους καταχωρητών HL και ορίζεται το Z flag σύμφωνα με το αποτέλεσμα. - Διευθυνσιοδότηση: Έμμεση με καταχωρητή (register indirect). - Bytes: 2 (1 OP code + 1 για 3)
[Σχήμα: Διάγραμμα κωδικοποίησης εντολής σε 2 bytes: byte 1: CB (11001011), byte 2: (01 b 110)]
- Κύκλοι μηχανής: προσκόμισης εντολής, ανάγνωσης μνήμης
Θεωρείστε ένα μικρουπολογιστικό σύστημα, με χρήση του Z80 . Για τα τέσσερα δεξιότερα ψηφία του αριθμού μητρώου σας: K3K2K1K0, 1) γράψτε τον κώδικα της βέλτιστης λύσης για τη δημιουργία ενός αντιγράφου K3K2 (δεκαδικό σύστημα) θέσεων, ξεκινώντας από τη θέση K1K000 (δεκαεξαδικό σύστημα) (50% της βαθμολογίας του θέματος), 2) εξηγείστε γιατί είναι αυτή η βέλτιστη λύση και όχι οποιαδήποτε άλλη: δώστε αντίστοιχο παράδειγμα κώδικα, μη βέλτιστης λύσης, (50% της βαθμολογίας του θέματος). Σημείωση: δεν θεωρείτε σωστή καμία άλλη απάντηση, εκτός από τη βέλτιστη λύση.
[Εικόνα: Παράδειγμα 2.5: «Στο παράδειγμα αυτό θα αντιγράψουμε τα περιεχόμενα των θέσεων 3000h-300Fh στις θέσεις 4000h-400Fh, αντίστοιχα. Όπως παρατηρούμε, το πλήθος των στοιχείων είναι 15. Για να περιγράψουμε τον κώδικα μπορούμε να χρησιμοποιήσουμε ένα διάγραμμα ροής...» Περιλαμβάνει διάγραμμα ροής αντιγραφής δεδομένων και κώδικα Assembly Z80: Μη βέλτιστη λύση:
Βέλτιστη λύση με LDIR:LD BC,000Fh ; το ζεύγος BC είναι ο μετρητής LD HL,3000h ; το ζεύγος HL περιέχει τη διεύθυνση αφετηρίας LD DE,4000h ; το ζεύγος DE περιέχει τη διεύθυνση προορισμού LOOP: LD A, (HL) ; (ΠΡΟΟΡΙΣΜΟΣ) <- (ΑΦΕΤΗΡΙΑ) LD (DE), A INC HL ; ΑΦΕΤΗΡΙΑ <- ΑΦΕΤΗΡΙΑ + 1 INC DE ; ΠΡΟΟΡΙΣΜΟΣ <- ΠΡΟΟΡΙΣΜΟΣ + 1 DEC BC ; ΜΕΤΡΗΤΗΣ <- ΜΕΤΡΗΤΗΣ - 1 JR NZ, Loop ; ΑΝ ΜΕΤΡΗΤΗΣ != 0 ΠΗΓΑΙΝΕ ΣΤΟ LOOP]LD BC,000Fh LD HL,3000h LD DE,4000h LDIR
Θεωρείστε ένα μικρουπολογιστικό σύστημα, με χρήση του Atiny2313 . Εάν τα τέσσερα αριστερότερα ψηφία του αριθμού μητρώου σας: K3K2K1K0 (ψηφία στο δεκαδικό σύστημα αρίθμησης), να βρείτε την τιμή του δείκτη στοίβας μετά το τέλος της εκτέλεσης του προγράμματος: α) LDI R2K2, K1K0h β) POP R1K3 γ) RCALL Success δ) RET ε) PUSH R3K2 στ) RCALL Success ζ) RET η) STS SPL, K3K2#. Να εξηγήσετε αναλυτικά, βήμα προς βήμα, τον τρόπο εργασίας σας.
[Εικόνα: Παράδειγμα 4.3: «Ας εξετάσουμε πώς μεταβάλλεται η τιμή του δείκτη στοίβας με την διαδοχική εκτέλεση των παρακάτω εντολών:
Από την τελευταία εντολή γίνεται εμφανές ότι η οριοθέτηση της περιοχής της στοίβας πρέπει να γίνει με ευθύνη του σχεδιαστή του λογισμικού του συστήματος ώστε να μην προσπελάζονται περιοχές που δεν ανήκουν στη στοίβα. Αυτό θα προκαλούσε προσπέλαση θέσεων μνήμης που χρησιμοποιούνται για άλλο σκοπό (όπως περιφερειακά κυκλώματα ή περιοχές αποθήκευσης μεταβλητών)»]LDI R20, 62h ; R20 <- 62h STS SPL, R20 ; Να αποθηκευτεί η τιμή του R20 στο λιγότερο σημαντικό τμήμα του δείκτη στοίβας (Stack Pointer Low-SPL) RCALL Test ; SPL <- SPL-2 = 60h. Αποθηκεύεται στη στοίβα η διεύθυνση επιστροφής από την καλούμενη υπορουτίνα Test RET ; SPL <- SPL+2 = 62h. Ανακτάται από τη στοίβα η διεύθυνση επιστροφής από υπορουτίνα PUSH R5 ; SPL <- SPL-1 = 61h. Αποθηκεύεται στη στοίβα η τιμή του R5 RCALL Test ; SPL <- SPL-2 = 5Fh. ΣΦΑΛΜΑ!!! Κάτω από τη διεύθυνση 60h ο χώρος μνήμης χρησιμοποιείται από καταχωρητές περιφερειακών και δεν μπορεί να αξιοποιηθεί από τη στοίβα κατά συνέπεια δεν θα έπρεπε να κληθεί η Test μετά από την παραπάνω αρχικοποίηση του SPL
Να αναπτυχθεί ρουτίνα που να μετράει λάθη στο κανάλι 1, υπό μορφή παλμών, στη γραμμή CLK/TRG1, κατ' επιλογή με ή χωρίς διακοπές, για μέγιστο πλήθος K0, όπου K0 το αριστερότερο ψηφίο του αριθμού μητρώου σας. Να εξηγήσετε αναλυτικά, βήμα προς βήμα, τον τρόπο εργασίας σας.
[Εικόνα: Παράδειγμα 2.10: «Ας υποθέσουμε ότι το κανάλι 1 θα χρησιμοποιηθεί για να μετράει «λάθη» υπό μορφή παλμών στη γραμμή CLK/TRG1. Δεν θα χρησιμοποιηθούν διακοπές (polled mode), δηλαδή ο Z80 θα διαβάζει την τιμή του μετρητή του καναλιού 1 και όταν το πλήθος των παλμών που έχει μετρηθεί είναι μικρότερο από ένα πλήθος όπως, για παράδειγμα, 46, θα συνεχίζει να ελέγχει τον μετρητή μέσα από έναν βρόχο αλλιώς αν το πλήθος παλμών ξεπεράσει την τιμή 46, ο βρόχος θα τερματιστεί. Αρχικά πρέπει να γίνει εγγραφή στον καταχωρητή ελέγχου (control register) του καναλιού. Άρα τα CS1, CS0 πρέπει να οδηγηθούν στις τιμές 0 και 1 αντίστοιχα. Ας υποθέσουμε ότι η διεύθυνση του καναλιού για μια τέτοια περίπτωση είναι η 41h. Ο καταχωρητής ελέγχου μπορεί να πάρει την τιμή 57h. Οι εντολές για την εγγραφή αυτή είναι
Κατόπιν πρέπει να ακολουθήσει η εγγραφή της χρονικής σταθεράς στη διεύθυνση 41h. Αυτή η σταθερά μπορεί να είναι το όριο του πλήθους σφαλμάτων που ορίσαμε δηλαδή το 46=2Eh:LD A, 57h OUT (41h), 57hΤο πλήρες πρόγραμμα θα έχει ως εξής:LD A, 2Eh OUT (41h), A»]LD A, 57h OUT (41h), A LD A, 2Eh OUT (41h), A LOOP: IN A, (41h) ; Ανάγνωση τρέχουσας τιμής μετρητή CP 00h ; Έχει φτάσει στο 0; JP NZ, LOOP ; Αν όχι, μετάβαση στο LOOP
20210129_020942.jpg¶
Ποια λειτουργία επιτελούν, ποια μέθοδο διευθυνσιοδότησης ακολουθούν, πόσα byte(s) μνήμης προγράμματος [και] ποιους κύκλους μηχανής χρειάζεται οι παρακάτω εντολές: 1. RLC (IX+4) 2. BIT 3, (HL)
RLC (IX+4)
- Περιγραφή: Τα περιεχόμενα της θέσης μνήμης που διευθυνσιοδοτείται από τα περιεχόμενα του ζεύγους καταχωρητών ΙΧ αυξημένα κατά τέσσερα, υφίστανται αριστερή κυκλική ολίσθηση κατά ένα bit και το αποτέλεσμα αποθηκεύεται πίσω σε εκείνη τη θέση.
- Διευθυνσιοδότηση: Δεικτοδοτούμενη (indexed).
- Bytes: 4 (3 για OP code + 1 για offset)
| 1 | 1 | 0 | 1 | 1 | 1 | 0 | 1 | byte 1: DD |
|---|---|---|---|---|---|---|---|---|
| 1 | 1 | 0 | 0 | 1 | 0 | 1 | 1 | byte 2: CB |
| d | byte 3: offset value | |||||||
| 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | byte 4: 06 |
- Κύκλοι μηχανής: προσκόμισης εντολής, εγγραφής-ανάγνωσης μνήμης
BIT 3, (HL)
- Περιγραφή: Ελέγχεται το τρίτο bit της θέσης μνήμης που διευθυνσιοδοτείται από τα περιεχόμενα του ζεύγους καταχωρητών HL και ορίζεται το Z flag σύμφωνα με το αποτέλεσμα.
- Διευθυνσιοδότηση: Έμμεση με καταχωρητή (register indirect).
- Bytes: 2 (1 OP code + 1 ...)