Μετάβαση στο περιεχόμενο

Συστήματα Μικροϋπολογιστών — Ιούνιος 2020

Το μόνο αρχείο για αυτή τη συνεδρία είναι το PDF με τις προτεινόμενες λύσεις iounios_2020_proteinwmenes_lyseis.pdf. Μεταγράφονται μόνο τα τυπωμένα κείμενα των ερωτημάτων.

iounios_2020_proteinwmenes_lyseis.pdf

  1. Θεωρείστε ένα μικροϋπολογιστικό σύστημα, με χρήση του Z80. Για τα τέσσερα αριστερότερα ψηφία του αριθμού μητρώου σας: K3K2K1K0, γράψτε τον κώδικα της βέλτιστης λύσης για τη δημιουργία ενός αντιγράφου K1K0 (δεκαδικό σύστημα) θέσεων, ξεκινώντας από τη θέση K3K200 (δεκαεξαδικό σύστημα). Σημείωση: δεν θεωρείτε σωστή καμία άλλη λύση, εκτός από τη βέλτιστη.

[Λείπει από τη φωτογραφία: τα αριθμητικά δεδομένα του ερωτήματος (τιμές K3K2K1K0) δεν εμφανίζονται στα τυπωμένα κείμενα του αρχείου.]

Ποια λειτουργία επιτελούν, ποια μέθοδο διευθυνσιοδότησης ακολουθούν, πόσα byte(s) μνήμης προγράμματος και ποιους κύκλους μηχανής χρειάζεται οι παρακάτω εντολές: 1. RLC (IX+4) 2. OUT (C), B

Θεωρείστε ένα μικροϋπολογιστικό σύστημα, με χρήση του Atiny2313. Εάν τα τέσσερα δεξιότερα ψηφία του αριθμού μητρώου σας: K3K2K1K0 (ψηφία στο δεκαδικό σύστημα αρίθμησης), να βρείτε την τιμή του δείκτη στοίβας μετά το τέλος της εκτέλεσης του προγράμματος: α) LDI R1K0, K3K1h β) POP R2K0 γ) RCALL Exams δ) RET ε) PUSH R1K2 στ) RCALL Exams ζ) RET

Εξηγείστε αναλυτικά πως προέκυψε το αριθμητικό αποτέλεσμα που απαντήσατε στο Θέμα Γ.

Λύσεις (🟡 community)

Κατάσταση: 🟡 community Πηγή: προτεινόμενες λύσεις (αρχείο PDF, προέλευση δεν αναγράφεται)

Προσοχή

Δεν υπάρχει φωτογραφία ή εκφώνηση για αυτή τη συνεδρία· οι λύσεις δεν μπορούν να αντιστοιχηθούν με βεβαιότητα σε ερωτήσεις θέματος. Η λύση δίνει 2 bytes για RLC (IX+4), ενώ η εντολή κωδικοποιείται σε 4 bytes (DD CB d 06). Η λύση γράφει ότι το OUT (C),B γράφει σε θέση μνήμης· η εντολή γράφει σε θύρα εισόδου/εξόδου. Η λύση χρησιμοποιεί LD BC,0BFFh για αντιγραφή 43 θέσεων· για 43 θέσεις με LDIR το BC θα έπρεπε να είναι 2Bh.

Λύσεις — Ιούνιος 2020

iounios_2020_proteinwmenes_lyseis.pdf

Έστω ότι Κ3Κ2Κ1Κ0 = 1043

Τότε θέλουμε να δημιουργήσουμε αντίγραφο 43 θέσεων ξεκινώντας από τη θέση 1000h .

Στον Ζ8Ο συγκεκριμένα, λόγω της εντολής LDIR (επαναλαμβανόμενη φόρτωση και μείωση) είναι η παρακάτω:

LD BC, 0BFFh

LD HL, 1000h LD DE, 2000h

LDIR

  1. RLC (IX+4)

  2. Η εντολή εκτελεί αριστερή κυκλική ολίσθηση στα περιεχόμενα της θύρας που διευθυνσιοδοτείται από τα περιεχόμενα του ζεύγους καταχωρητών ΙΧ αυξημένα κατά τέσσερα. Το αποτέλεσμα αποθηκεύεται πίσω σε εκείνη τη θέση.

  3. Η διευθυνσιοδότηση είναι δεικτοδοτούμενη,

  4. Bytes: 2 (1 για opcode και 1 για το offset)

  5. Κύκλοι μηχανής: προσκόμισης εντολής, εγγραφής-ανάγνωσης μνήμης

  6. OUT (C), B

  7. Η εντολή γράφει την τιμή του καταχωρητή Β στη θέση μνήμης με τιμή το περιεχόμενο του C.

  8. Η διευθυνσιοδότηση είναι έμμεση με χρήση καταχωρητή.

  9. Bytes:2 (1 για opcode και 1 για το περιεχόμενο του 8bit καταχωρητή B)

  10. Κύκλοι μηχανής: προσκόμισης εντολής, εγγραφής-ανάγνωσης μνήμης

Έστω ότι Κ3Κ2Κ1Κ0 = 3849

Το πρόγραμμά μας θα είναι το:

LDI R19, 34h POP R29 RCALL Exams RET PUSH R18 RCALL Exams

RET

Ο δείκτης στοίβας θα έχει την τιμή στην οποία αρχικοποιήθηκε.

LDI R19, 34h ;R19<-34h POP R29 ;SPL<-SPL+1 RCALL Exams ;SPL<-SPL-2 RET ;SPL<-SPL+2 PUSH R18 ;SPL<-SPL-1 RCALL Exams ;SPL<-SPL-2 RET ;SPL<-SPL+2

Επομένως αρκεί ο SP να αρχικοποιηθεί σε τιμή η οποία σε κανένα κομμάτι της εκτέλεσης δε θα πέσει κάτω από 60h. Μια τέτοια τιμή είναι η 62h.

✔ Επιβεβαίωσε · ✖ Βρήκα λάθος


✖ Βρήκα λάθος στη μεταγραφή