Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

Εργαστήριο Αρχιτεκτονικής Υπολογιστών 2003 - 2004.

Παρόμοιες παρουσιάσεις


Παρουσίαση με θέμα: "Εργαστήριο Αρχιτεκτονικής Υπολογιστών 2003 - 2004."— Μεταγράφημα παρουσίασης:

1 Εργαστήριο Αρχιτεκτονικής Υπολογιστών

2 Διαδικαστικά Ομάδες 2 ατόμων Πριν την εκτέλεση της άσκησης θα πρέπει να έχετε έτοιμη την αναφορά Δεν υπάρχει επαναληπτικό εργαστήριο Στον τελικό βαθμό δε θα ληφθεί υπόψη ο χειρότερος βαθμός εργαστηριακής άσκησης Μπορείτε να λείψετε σε ένα εργαστήριο, όμως τότε αναγκαστικά θα συνυπολογιστούν στον τελικό βαθμό όλοι οι βαθμοί των εργαστηρίων που εκτελέσατε Αν χάσετε δύο εργαστηριακές ασκήσεις, χάνετε το εργαστήριο Βαθμός εργαστηριακής άσκησης : 50% αναφορά, 50% εκτέλεση

3 Διαδικαστικά Πρώτο εργαστήριο : Παρουσίαση πλακέτας, εκτέλεση πρώτης άσκησης Η πρώτη άσκηση θα εκτελεστεί στον μικροπρογραμματιζόμενο εκπαιδευτικό υπολογιστή του εργαστηρίου (πλακέτα) Οι υπόλοιπες στον εξομοιωτή. Σημειώσεις : Θα βγει ανακοίνωση (Λογικά από Τρίτη) Τελική εξέταση : Δε θα έχετε σημειώσεις μαζί σας. Οτιδήποτε χρειαστεί (πίνακες, datasheets κλπ.) θα σας δοθεί στο εργαστήριο.

4 Βασικές Έννοιες

5 Register File (Καταχωρητές) Port A Port B A B Data In write x8bit Register File : 16 καταχωρητές των 8 bit. Δύο Ports Ανάγνωσης ( PortA και PortB ) Ένα Port Εγγραφής ( PortB ) Σε κάθε κύκλο, η έξοδος Α (B), δίνει τα περιεχόμενα του καταχωρητή που διευθυνσιοδοτείται από την είδοδο PortA (PortB) Αν επιπλέον, είναι ενεργοποιημένο το σήμα write, τα δεδομένα εισόδου Data In, εγγράφονται στον καταχωρητή που διευθυνσιοδοτείται από το PortB Καταχωρητής : Βασική μονάδα αποθήκευσης για την εκτέλεση πράξεων

6 Αριθμητική και Λογική Μονάδα (ALU) R S F 8 8 Εκτελεί αριθμητικές και λογικές πράξεις, ανάλογα με την τιμή της εισόδου op. Το αποτέλεσμα της πράξης δίνεται ως έξοδος από το F Π.χ., αν op = 000, τότε θα γίνει η πράξη F = S + R Η αντιστοίχιση κωδικών της εισόδου op σε πράξεις υπάρχει σε μορφή πίνακα. H καρδιά του data-path ALU 3 op

7 Κύρια Μνήμη Data Out 8 8 MAR : Memory Address Register (8 bit Καταχωρητής) Διευθυνσιοδοτεί τη μνήμη. Κάθε φορά που θέλουμε να αλλάξουμε διεύθυνση, ενεργοποιούμε το σήμα MARCLK. Με τον τρόπο αυτό η νέα διεύθυνση κλειδώνεται στον MAR. MDR : Memory Data Register (8 bit Καταχωρητής) Περιέχει τα δεδομένα της θέσης που διευθυνσιοδοτείται από τον MAR. write Address Data In 8 MDR MAR MARCLK write : Η τιμή του σήματος αυτού καθορίζει αν θα γίνει εγγραφή ή ανάγνωση στη μνήμη

8 Ένα στοιχειώδες Σύστημα (Υπεραπλουστευμένο) RF ALU Memory MAR MDR R S F Port A Port B A Data In B write op data address write APort BPort RF_wr ALU_op MARCLK MEM_wr ΜΟΝΑΔΑ ΕΠΕΞΕΡΓΑΣΙΑΣ Υπενθύμιση : Οι δύο βασικές υπομονάδες ενός συστήματος είναι η μονάδα επεξεργασίας και η μονάδα ελέγχου. Στο σχήμα δίνουμε μόνο τη μονάδα επεξεργασίας

9 Ένα στοιχειώδες Σύστημα (Υπεραπλουστευμένο) RF ALU Main Memory MAR MDR R S F Port A Port B A Data In B write op data address write APort BPort RF_wr ALU_op MARCLK MEM_wr Για να καθορίσουμε τη λειτουργία του συστήματος σε μία χρονική στιγμή, θα πρέπει να θέσουμε τιμές σε όλα τα control σήματα ένα προς ένα.

10 Παράδειγμα 1 RF ALU Main Memory MAR MDR R S F Port A Port B A Data In B write op data address write Πρόσθεσε τα περιεχόμενα των καταχωρητών 0001 και 0010 και γράψε το αποτέλεσμα στον καταχωρητή Δεν επηρεάζεται καθόλου η διεύθυνση της κύριας μνήμης και τα περιεχόμενά της (0001) (0010) (0001)+(0010)

11 Παράδειγμα 2 RF ALU Main Memory MAR MDR R S F Port A Port B A Data In B write op data address write Πρόσθεσε τα περιεχόμενα των καταχωρητών 0001 και Μην επηρεάσεις το Register File Διευθυνσιοδότησε την κύρια μνήμη με το αποτέλεσμα της πράξης Μην επηρεάσεις το περιεχόμενο της κύριας μνήμης (0001) (0010) (0001)+(0010)

12 Σύνθετες Πράξεις Για να μπορέσουμε να εκτελέσουμε μία σύνθετη πράξη, ‘σπάμε’ την πράξη αυτή σε στοιχειώδεις υποπράξεις. Για κάθε μία από τις στοιχειώδεις πράξεις θα πρέπει να προσδιορίσουμε όλα τα control σήματα. Για να εκτελέσουμε τη σύνθετη πράξη, απλώς εισάγουμε τα control σήματα κάθε υποπράξης διαδοχικά.

13 Παράδειγμα 3 Ζητούμενο : Διευθυνσιοδότησε την Κύρια μνήμη με την τιμή (0000)+(0001)+(0010) (όπου (Χ)=περιεχόμενο καταχωρητή Χ) Βήμα 1 : (0000)+(0001) -> (0001) Βήμα 2 : (0001)+(0010) -> MAR RF ALU Main Memory MAR MDR R S F Port A Port B A Data In B write op address write (0000) (0001) (0000)+(0001) (0001) (0010) (0001)+(0010) 0

14 Μικροεντολές και Μακροεντολές Μικροεντολή : Η ακολουθία μηδενικών και άσσων που καθορίζει πλήρως τη λειτουργία του συστήματος σε μία χρονική στιγμή. Η μικροεντολή περιέχει τις τιμές για όλα τα control σήματα του συστήματος RF ALU Main Memory MAR MDR R S F Port A Port B A Data In B write op address write (0001) (0010) (0001)+(0010) 1 Μικροεντολή : Μήκος Μικροεντολής για το απλοϊκό σύστημα : 14 bit

15 Μικροεντολές και Μακροεντολές Μακροεντολή : Μία σύνθετη πράξη Μια μακροεντολή αποτελείται από μία αλληλουχία μικροεντολών οι οποίες προσδιορίζουν τις στοιχειώδεις πράξεις που θα πρέπει να εκτελεστούν Παράδειγμα Μακροεντολή : Διευθυνσιοδότησε την Κύρια μνήμη με την τιμή (0000)+(0001) +(0010) (όπου (Χ)=περιεχόμενο καταχωρητή Χ) Υλοποίηση Μικροεντολή 1 : [ (0000)+(0001) -> (0001) ] Μικροεντολή 2 : [ (0001)+(0010) -> MAR ] Μικροπρόγραμμα

16 Αρχιτεκτονική Συνόλου Εντολών Σύνολο εντολών : Το σύνολο των μακροεντολών που έχουμε υλοποιήσει Βρίσκουμε ένα σύνολο λειτουργιών τις οποίες θεωρούμε θεμελιώδεις για την υλοποίηση οποιουδήποτε προγράμματος. Υλοποιούμε τις λειτουργίες αυτές ως μακροεντολές (μέσω μικροεντολών) Ο προγραμματιστής του συστήματος χρησιμοποιεί μόνο τις μακροεντολές που ορίσαμε για να υλοποιεί τα προγράμματά του. Ο προγραμματιστής σε καμία περίπτωση δεν γράφει μικροεντολές (αν και θα μπορούσε) : Δεν ασχολείται καθόλου με τη χαμηλού επιπέδου αρχιτεκτονική και το συγχρονισμό των control σημάτων Προφανώς : Το σύνολο εντολών που ορίζουμε θα πρέπει να είναι αρκετά γενικό ούτως ώστε ο προγραμματιστής να μπορεί να υλοποιήσει ό,τι πρόγραμμα θέλει.

17 Αρχιτεκτονική Συνόλου Εντολών Ορίζουμε Ν μακροεντολές (opcode, έντελα, τρόποι διευθυνσιοδότησης …) : Εντολή1, Εντολή2, …, ΕντολήΝ Κάθε Εντολή, υλοποιείται μέσω πολλών μικροεντολών Ο προγραμματιστής γράφει τα προγράμματά του χρησιμοποιώντας το ρεπερτόριο εντολών που ορίσαμε. Π.χ. Πρόγραμμα : Εντολή5 Εντολή10 Εντολή4 Εντολή5 Εντολή4 Μακροπρόγραμμα Το μακροπρόγραμμα βρίσκεται αποθηκευμένο στην Κύρια Μνήμη

18 Μικρομνήμη Πρόβλημα : Με κάποιον τρόπο θα πρέπει να είμαστε σε θέση ανά πάσα στιγμή να τροφοδοτούμε τις control εισόδους του συστήματος με τις τιμές που υπαγορεύει η κάθε μικροεντολή Λύση : Αποθηκεύουμε όλες τις μικροεντολές σε μία μνήμη. Η μνήμη αυτή καλείται μικρομνήμη. Η έξοδος της μικρομνήμης δίνεται ως είσοδος στις control εισόδους των υπομονάδων που βρίσκονται στο σύστημα. Όπως κάθε μνήμη, έτσι και η μικρομνήμη θα πρέπει να διευθυνσιοδοτείται με κάποιον τρόπο. Για το λόγο αυτό υπάρχει στο hardware ένας μετρητής ο οποίος ανά πάσα στιγμή δείχνει σε κάποια θέση της μικρομνήμης Ο μετρητής αυτός καλείται μετρητής μικροπρογράμματος (microPC ή μPC)

19 Μικρομνήμη Βήμα 1 : (0000)+(0001) -> (0001) Βήμα 2 : (0001)+(0010) -> MAR RF ALU Main Memory MAR MDR R S F Port A Port B A Data In B write op address write (0000) (0001) (0000)+(0001) 1 μPC (0001) (0010) (0001)+(0010) 0 μPC Μικρομνήμη

20 Μικροπρόγραμμα 1 Μικροπρόγραμμα 2 Μικροπρόγραμμα 3 Μπορούμε να αποθηκεύουμε μικροπρογράμματα σε οποιεσδήποτε συνεχόμενες θέσεις της μικρομνήμης θέλουμε. Υπενθύμιση : Κάθε μικροπρόγραμμα αντιστοιχεί σε μία μάκροεντολή

21 Μνήμη Αντιστοίχισης (Mapper) Πρόβλημα : Το μακροπρόγραμμα περιέχει μία ακολουθία μακροεντολών. Το μικροπρόγραμμα για κάθε μακροεντολή μπορεί να βρίσκεται οπουδήποτε μέσα στη μικρομνήμη (βλ. προηγούμενη διαφάνεια). Θα πρέπει να υπάρχει κάποιος τρόπος ούτως ώστε κάθε φορά που συναντάμε μία μακροεντολή, ο μPC να διευθυνσιοδοτεί τη σωστή θέση της μικρομνήμης Υπενθύμιση : Το μακροπρόγραμμα βρίσκεται αποθηκευμένο στην κύρια μνήμη. Τα μικροπρογράμματα βρίσκονται αποθηκευμένα στην μικρομνήμη. Λύση : Κάθε μακροεντολή έχει ένα μοναδικό Opcode (κωδικός εντολής). Χρησιμοποιούμε μία μνήμη αντιστοίχισης. Η μνήμη αυτή εκτελεί την αντιστοίχιση : Opcode Μακροεντολής  Αρχική διεύθυνση μικρομνήμης

22 Μνήμη Αντιστοίχισης (Mapper) Μικροπρόγραμμα 1 Μικροπρόγραμμα 2 Μικροπρόγραμμα 3 μPC MDR Εντολή 3 Εντολή 2 Εντολή 3 Εντολή 2 Εντολή 1 MAR MAPPER LOAD_DIR_SEQ~ MAR Κύρια ΜνήμηΜνήμη ΑντιστοίχισηςΜικρομνήμη Opcode Εντολής Αρχική Διεύθυνση ΜΟΝΑΔΑ ΕΛΕΓΧΟΥ

23 2 Βασικά Σημεία Μικροπρόγραμμα 1 Μικροπρόγραμμα 2 Μικροπρόγραμμα 3 μPC MDR Εντολή 3 Εντολή 2 Εντολή 3 Εντολή 2 Εντολή 1 MAR MAPPER LOAD_DIR_SEQ~ MAR 1. Ο MAR, ελέγχεται σε επίπεδο μικροπρογράμματος. Είναι δική σας μέριμνα η αύξησή του ώστε να δείχνει στην επόμενη εντολή ! Πρακτικά, αυτό επιτυγχάνεται ορίζοντας έναν από τους καταχωρητές του συστήματος ως PC (program counter). Ο PC αυτός δεν έχει καμία σχέση με τον μPC και ορίζεται κατόπιν δικής σας σύμβασης (το σύστημα δεν έχει ιδέα για το ποιος καταχωρητής είναι program counter για το μακροπρόγραμμα) Προσοχή !!! PC = μετρητής μάκροΠρογράμματος μPC = μετρητής μίκροΠρογράμματος

24 2 Βασικά Σημεία Μικροπρόγραμμα 1 Μικροπρόγραμμα 2 Μικροπρόγραμμα 3 μPC MDR Εντολή 3 Έντελο 3.1 Έντελο 3.2 MAPPER LOAD_DIR_SEQ~ 2. Γιατί χρειαζόμαστε το σήμα LOAD_DIR_SEQ~ ; Εκτός από opcodes η κύρια μνήμη μπορεί να περιέχει και άλλα δεδομένα (π.χ. operands, δεδομένα γενικής χρήσης). Το σήμα LOAD_DIR_SEQ~ χρησιμοποιείται για να μην κλειδώνονται δεδομένα στον μPC, όταν ο MAR δε δείχνει σε opcode. Υπενθύμιση : Το ~ στο όνομα ενός σήματος υποδηλώνει σήμα αρνητικής λογικής. Το σήμα είναι ενεργοποιημένο όταν έχει τιμή 0 MAR 0 1

25 Παράδειγμα Έστω ότι ορίζουμε το εξής σύνολο εντολών : LDA $K : Φόρτωσε τον Accumulator (ένας οποιοσδήποτε καταχωρητής τον οποίο βαπτίζουμε Accumulator) με το περιεχόμενο της διεύθυνσης Κ (της κύριας μνήμης) ADD $K : Πρόσθεσε στον Accumulator το περιεχόμενο της διεύθυνσης Κ STA $K : Αποθήκευσε το περιεχόμενο του Accumulator στη θέση μνήμης με διεύθυνση Κ

26 Παράδειγμα Εντελώς αυθαίρετα, ορίζουμε ένα μοναδικό opcode για κάθε μία από τις μακροεντολές : LDA $K : 00 H ADD $K : 01 H STA $K : 02 H Το μικροπρόγραμμα για κάθε μακροεντολή ξεκινάει από τη διεύθυνση (μικρομνήμης) : LDA $K : 10 H ADD $K : 16 H STA $K : 1C H Περιεχόμενα Mapper ΔΙΕΥΘΥΝΣΗΔΕΔΟΜΕΝΑ

27 Παράδειγμα O προγραμματιστής γράφει στην κύρια μνήμη το εξής μακροπρόγραμμα LDA 80 H ADD 81 H STA 82 H Περιεχόμενα Κύριας Μνήμης Διεύθυνση Κύριας Μνήμης ΠεριεχόμεναΕντολή (συμβολική γλώσσα) opcode LDA έντελο 80 Η opcode ADD έντελο 81 H opcode STA έντελο 82 H

28 Παράδειγμα Μικροπρόγραμμα LDA Μικροπρόγραμμα ADD Μικροπρόγραμμα STA μPC MDR LOAD_DIR_SEQ~ Κύρια ΜνήμηΜνήμη ΑντιστοίχισηςΜικρομνήμη H 01 H 02 H 10 H 16 H 1C H 00 H MAR 80 H ?? H 1 MAR 0 01 H 16 H MAR 02 H 1C H 0 MAR 82 H ?? H 1 MAR 00 H 10 H 0 MAR 81 H ?? H 1 Σημείωση : Όταν LOAD_DIR_SEQ~ είναι απενεργοποιημένο (δηλ. 1), ο μPC αυξάνεται κατά ένα (σαν κανονικός μετρητής). Όταν το σήμα αυτό είναι ενεργοποιημένο, τότε στον μPC ανατίθεται η έξοδος του MAPPER

29 Μικροπρογραμματιζόμενος Εκπαιδευτικός Υπολογιστής

30 Ίδια φιλοσοφία με το απλοϊκό σύστημα που περιγράψαμε Μονάδα ελέγχου και μονάδα επεξεργασίας Και οι δύο μονάδες έχουν πολύ περισσότερες δυνατότητες σε σχέση με το απλοϊκό σύστημα που περιγράψαμε Από την προηγούμενη παρατήρηση γίνεται προφανής και ο λόγος για τον οποίο τα σήματα ελέγχου είναι αρκετά περισσότερα Μήκος μικροεντολής 40 bit

31 Μικροπρογραμματιζόμενος Εκπαιδευτικός Υπολογιστής Μονάδα Επεξεργασίας Μονάδα Ελέγχου Μονάδα Εισόδου (DIP Switches – Διακόπτες Δύο Θέσεων) Μονάδα Εξόδου

32 Block Διάγραμμα

33 Μονάδα Επεξεργασίας

34 Μονάδα Επεξεργασίας : Απλουστευμένο Διάγραμμα RF ALU Main Memory MAR MDR R S F Port A Port B A Data In B write op data address write Aport(3:0) I(8:6) I(5:3) MARCLK MWE~ Selector FeedBack Register Bport(3:0) SELB D Q Z A B I(2:0) DDATAE~ MDE~ PCE~ D(1:0) Switches Q0 I(8:6)

35 Μονάδα Επεξεργασίας Για να καθορίσουμε τη λειτουργία του συστήματος σε μία χρονική στιγμή, θα πρέπει να θέσουμε τιμές σε όλα τα control σήματα ένα προς ένα. Ίδια φιλοσοφία με το απλοϊκό σύστημα που παρουσιάσαμε Η μόνη διαφορά είναι ότι τώρα τα σήματα αυτά είναι περισσότερα (προφανώς το σύστημα έχει περισσότερες δυνατότητες)

36 Μονάδα Επεξεργασίας : Απλουστευμένο Διάγραμμα RF ALU Main Memory MAR MDR R S F Port A Port B A Data In B write op data address write Aport(3:0) I(8:6) I(5:3) MARCLK MWE~ Selector FeedBack Register Bport(3:0) SELB D Q Z A B I(2:0) DDATAE~ MDE~ PCE~ D(1:0) Switches Q0 I(8:6)

37 Μονάδα Επεξεργασίας : Απλουστευμένο Διάγραμμα RF ALU Main Memory MAR MDR R S F Port A Port B A Data In B write op data address write Aport(3:0) I(8:6) I(5:3) MARCLK MWE~ Selector FeedBack Register Bport(3:0) SELB D Q Z A B I(2:0) DDATAE~ MDE~ PCE~ D(1:0) Switches Q0 I(8:6) Σήματα Aport(3:0) και Bport(3:0), για διευθυνσιοδότηση του Register File Τι ρόλο παίζει το σήμα SELB ; Αν SELB=1, τότε το Port B διευθυνσιοδοτείται με την τιμή του Bport(3:0). Αν SELB=0, τότε το Port B διευθυνσιοδοτείται με την τιμή του Feedback Register, ΔΗΛΑΔΗ με το αποτέλεσμα της προηγούμενης πράξης TIP : Για τις περισσότερες περιπτώσεις αρκεί SELB = 1 Η τιμή SELB=0, είναι πολύ χρήσιμη για την υλοποίηση μακροεντολών του τύπου ADD RX,$k

38 Μονάδα Επεξεργασίας : Απλουστευμένο Διάγραμμα RF ALU Main Memory MAR MDR R S F Port A Port B A Data In B write op data address write Aport(3:0) I(8:6) I(5:3) MARCLK MWE~ Selector FeedBack Register Bport(3:0) SELB D Q Z A B I(2:0) DDATAE~ MDE~ PCE~ D(1:0) Switches Q0 I(8:6) Αν DDATAE~ = 0, τότε απ’ τον selector περνάει μία σταθερά των 2bit D(1:0). Η τιμή D(1:0) καθορίζεται από εμάς (ξεχωριστό πεδίο στη μικροεντολή) Αν PCE~ = 0, τότε απ’ τον selector περνάει η τιμή που έχουν 8 DIP Switches της πλακέτας Αν MDE~ = 0, τότε απ’ τον selector περνάει η τιμή του MDR

39 Μονάδα Επεξεργασίας : Απλουστευμένο Διάγραμμα RF ALU Main Memory MAR MDR R S F Port A Port B A Data In B write op data address write Aport(3:0) I(8:6) I(5:3) MARCLK MWE~ Selector FeedBack Register Bport(3:0) SELB D Q Z A B I(2:0) DDATAE~ MDE~ PCE~ D(1:0) Switches Q0 I(8:6) I(2:0) : Επιλέγει 2 από τις 5 εισόδους του selector και τροφοδοτεί τις εισόδους R και S της ALU Βρίσκετε την τιμή που θέλετε από τον πίνακα 1.5 (σελ. 14 του manual) Προσοχή : Δεν υπάρχουν όλοι οι δυνατοί συνδυασμοί διαθέσιμοι !!! Π.χ. αν και υπάρχει επιλογή D και A, δεν υπάρχει επιλογή D και B TIP : Αρκετά συνηθισμένες τιμές : AB001 ZA100 DA101 DZ111

40 Μονάδα Επεξεργασίας : Απλουστευμένο Διάγραμμα RF ALU Main Memory MAR MDR R S F Port A Port B A Data In B write op data address write Aport(3:0) I(8:6) I(5:3) MARCLK MWE~ Selector FeedBack Register Bport(3:0) SELB D Q Z A B I(2:0) DDATAE~ MDE~ PCE~ D(1:0) Switches Q0 I(8:6) I(5:3) : 3 bit σήμα που καθορίζει την πράξη που θα εκτελέσει η ALU (8 επιλογές) Τιμές από πίνακα 1.6 (σελ. 14) TIP : Στις περισσότερες περιπτώσεις η ALU εκτελεί πρόσθεση Ι(5:3)=000

41 Μονάδα Επεξεργασίας : Απλουστευμένο Διάγραμμα RF ALU Main Memory MAR MDR R S F Port A Port B A Data In B write op data address write Aport(3:0) I(8:6) I(5:3) MARCLK MWE~ Selector FeedBack Register Bport(3:0) SELB D Q Z A B I(2:0) DDATAE~ MDE~ PCE~ D(1:0) Switches Q0 I(8:6) I(8:6) : 3 bit σήμα που καθορίζει (α.) Τι θα περάσει στο σημείο Υ (β.) Αν θα γίνει εγγραφή στο Register File (γ.) Αν θα γίνει εγγραφή στον Q register (δ.) Αν θα εφαρμοστεί shift πριν την αποθήκευση Τιμές από πίνακα 1.7 (σελ. 16) TIP : Για τις περισσότερες των περιπτώσεων επιλέγετε μία από τις NOP (001) : Καμία εγγραφή, κανένα shift, o selector επιλέγει το F για την έξοδο Y RAMF (011) : Γράψε το F στο register file, όχι εγγραφή στον Q, κανένα shift, το F περνάει στο Y YF Προσοχή : Στον πίνακα 1.7 (σελ. 16), όπου αναφέρεται RAM, υπονοείται το Register File και όχι η Κύρια Μνήμη. Ο συμβολισμός F->B, σημαίνει ότι το F γράφεται στη θέση του Register File που διευθυνσιοδοτείται από το Port B

42 Μονάδα Επεξεργασίας : Απλουστευμένο Διάγραμμα RF ALU Main Memory MAR MDR R S F Port A Port B A Data In B write op data address write Aport(3:0) I(8:6) I(5:3) MARCLK MWE~ Selector FeedBack Register Bport(3:0) SELB D Q Z A B I(2:0) DDATAE~ MDE~ PCE~ D(1:0) Switches Q0 I(8:6) MARCLK : Καθορίζει αν το Υ θα ‘κλειδωθεί’ στον MAR MWE~ : Καθορίζει αν θα γίνει εγγραφή στην Κύρια Μνήμη Y

43 Μονάδα Επεξεργασίας Άλλα σήματα ελέγχου που σχετίζονται με τη μονάδα επεξεργασίας SH~ : Σε συνδυασμό με το Ι(8:6), καθορίζει αν θα γίνει απλή ή κυκλική ολίσθηση στα αποτελέσματα (Πίνακας 1.9 σελ. 21, Σχήματα 1.7 και 1.8 σελ. 19) TIP : Στις περισσότερες περιπτώσεις δεν χρειάζεστε ολίσθηση οπότε SH~=1 CARRYE~ (carry enable): Καθορίζει αν η ALU θα εκτελέσει πράξη με κρατούμενο εισόδου (Πίνακας 1.8 – σελ. 20) TIP : Στις περισσότερες περιπτώσεις δεν χρειάζεται κρατούμενο εισόδου οπότε CARRYE~ = 1

44 Μονάδα Επεξεργασίας MSTATUSCLK : H ALU μετά από κάθε πράξη που εκτελεί, ενημερώνει και 4 flags : microC (microCarry), microO (microOverflow), microS (microSign) και microZ (microZ). Τα micro-flags, ενημερώνονται σε κάθε πράξη. Εκτός από τα micro-flags, το σύστημα διαθέτει και macro-flags (macroC, macroO, macroS και macroZ). Αν ενεργοποιήσετε το σήμα MSTATUSCLK, οι τιμές των micro-flags ‘κλειδώνονται’ στα macro-flags. Άρα : Τα micro-flags ενημερώνονται πάντα Τα macro-flags ενημερώνονται μόνο όταν θέλετε (και προφανώς σε κάποια χρονική στιγμή που έχει ιδιαίτερο νόημα για το μακροπρόγραμμα.) TIP : Στις περισσότερες περιπτώσεις δεν απαιτείται η καταγραφή των flags, οπότε MSTATUSCLK = 0.

45 Μονάδα Ελέγχου Σε σχέση με τη μονάδα ελέγχου του απλοϊκού συστήματος, υπάρχουν οι εξής βελτιώσεις : 1. Δυνατότητα διακλαδώσεων στο μικροπρόγραμμα με ή χωρίς συνθήκη 2. Δυνατότητα κλήσης / επιστροφής από ρουτίνα (με τη βοήθεια μίας hardware στοίβας) Κατά τα άλλα το σχήμα κύρια μνήμη  Mapper  μPC  μικρομνήμη, έχει διατηρηθεί. Τα control σήματα είναι : 1.LOAD_DIR_SEQ~ (το γνωστό) 2.BRA(4:0), BIN(2:0), CON(2:0)

46 Μονάδα Ελέγχου LOAD_DIR_SEQ~ = 1 LOAD_DIR_SEQ~ = 0 Για διακλαδώσεις Κλήση και επιστροφή από ρουτίνα

47 Σήματα ελέγχου Μονάδας Ελέγχου ! LOAD_DIR_SEQ~ : Με την ενεργοποίηση του σήματος αυτού η έξοδος του mapper περνάει στον μPC (και διευθυνσιοδοτεί τη μικρομνήμη). TIP: Ενεργοποιούμε το σήμα αυτό μόνο όταν ισχύουν τα δύο παρακάτω (και τα δύο) : α. όλες οι λειτουργίες του τρέχοντος μικροπρογράμματος έχουν ολοκληρωθεί β. ο MAR δείχνει στο opcode της επόμενης προς εκτέλεση μακροεντολής Μετά την ενεργοποίηση ο έλεγχος θα περάσει στο μικροπρόγραμμα που αντιστοιχεί στην επόμενη μακροεντολή (του μακροπρογράμματος) Πρακτικά : Στις περισσότερες περιπτώσεις η τελευταία εντολή κάθε μικροπρογράμματος, θα έχει ενεργοποιημένο το LOAD_DIR_SEQ~ και δεν θα εκτελεί καμία πράξη στη μονάδα επεξεργασίας.

48 Σήματα ελέγχου Μονάδας Ελέγχου ! ΒΙΝ(2:0) : (σελ.34. Πίνακας 2.2) Καθορίζει αν η μικροεντολή είναι α. Εντολή διακλάδωσης χωρίς συνθήκη (JMP - Jump) β. Εντολή διακλάδωσης με συνθήκη (BR – Branch conditional) γ. Κλήση υπορουτίνας με ή χωρίς συνθήκη δ. Επιστροφή από υπορουτίνα με ή χωρίς συνθήκη ε. Σειριακή μικροεντολή CON(2:0) : (σελ. 35, Πίνακας 2.3) Καθορίζει ποια είναι η συνθήκη για conditional εντολές (Π.χ Branch if macroCarry ή Branch if microCarry) BRA(4:0) : 5-bit πεδίο το οποίο προστίθεται (2’s complement, εύρος [-16,15) ) στη διεύθυνση της τρέχουσας μικροεντολής για την εύρεση της διεύθυνσης της επόμενης μικροεντολής (σημ: μόνο αν πρόκειται για εντολή που αλλάζει τη ροή π.χ. JMP, taken branch κλπ.) TIP : Συνήθως οι μικροεντολές που γράφετε θα είναι σειριακές οπότε οι τιμές των πεδίων αυτών είναι BRA(4:0) : XXXXX ΒΙΝ(2:0) : 000 CON(2:0): XXX

49 Οργάνωση Μικροεντολής Η μικροεντολή περιέχει όλα τα πεδία για τα οποία μιλήσαμε μέχρι τώρα Μονάδα Ελέγχου Μονάδα Επεξεργασίας

50 Πώς γράφουμε μικροπρογράμματα ;

51 Βήμα 1 : Σπάμε την πράξη σε στοιχειώδεις λειτουργίες που να μπορούν να υλοποιηθούν από τη μονάδα επεξεργασίας που διαθέτουμε. Βήμα 2 : Γράφουμε τη μικροεντολή για κάθε στοιχειώδη λειτουργία (δηλ. γράφουμε τη 40άδα) TIP : Καλό είναι να γράφετε τις στοιχειώδεις εντολές με μία συμβολική γλώσσα που να σας βολεύει. Π.χ. μερικές στοιχειώδεις λειτουργίες μπορεί να συμβολιστούν, (0001)+(0010)  (0010) (0001)+(0010)  NOP, MAR PC + 1  PC, MAR // σημ.: Θα πρέπει πρώτα να έχουμε πει ποιος είναι ο PC MDR + ACC  ACC // >> >> >> ACC ACC + 0  NOP, MWE

52 Παράδειγμα (LDA $K – Βήμα 1) LDA $K : Φόρτωσε τον Accumulator (ένας οποιοσδήποτε καταχωρητής τον οποίο βαπτίζουμε Accumulator) με το περιεχόμενο της διεύθυνσης Κ (της κύριας μνήμης) Ορίζουμε αυθαίρετα έναν καταχωρητή ως PC (τον PC τον χρειαζόμαστε πάντα) και έναν ως ACC (επειδή ζητείται από τη σημασιολογία της εντολής) Έστω λοιπόν : PC = 0100 και ACC = 1000

53 Παράδειγμα (LDA $K – Βήμα 1) LDA $K : Φόρτωσε τον Accumulator με το περιεχόμενο της διεύθυνσης Κ (της κύριας μνήμης) Με το που καλείται μία LDA $K από το μακροπρόγραμμα, η κατάσταση στην κύρια μνήμη θα έχει ως εξής : OPCODE LDA K MARMDRPC Έτσι όπως έχει η κατάσταση δεν μπορούμε με κανέναν τρόπο να ‘δούμε’ το έντελο K. Τι πρέπει να κάνουμε ;;;;; OPCODE XYZ

54 Παράδειγμα (LDA $K – Βήμα 1) LDA $K : Φόρτωσε τον Accumulator με το περιεχόμενο της διεύθυνσης Κ (της κύριας μνήμης) OPCODE LDA K MARMDRPC PC + 1  PC, MAR OK !!! Τώρα έχουμε την τιμή K στον MDR. Προφανώς, για να διευθυνσιοδοτή- σουμε τη θέση μνήμης K (όπως απαιτεί ο ορισμός της LDA), θα πρέπει η τιμή Κ με κάποιον τρόπο να έρθει στον MAR. Πώς ;;;; MARMDRPC OPCODE XYZ

55 Παράδειγμα (LDA $K – Βήμα 1) LDA $K : Φόρτωσε τον Accumulator με το περιεχόμενο της διεύθυνσης Κ (της κύριας μνήμης) OPCODE LDA K MDR + 0  ACC OK !!! Τώρα το K ήρθε στον accumulator. Εγώ όμως το θέλω στον MAR !!! MARMDRPC OPCODE XYZ ACC

56 Παράδειγμα (LDA $K – Βήμα 1) LDA $K : Φόρτωσε τον Accumulator με το περιεχόμενο της διεύθυνσης Κ (της κύριας μνήμης) OPCODE LDA K ACC + 0  NOP, MAR Τώρα η σωστή τιμή βρίσκεται στον MDR. Το μόνο που μένει είναι να την αποθηκεύσω στον accumulator. Πώς ;;; MARMDR PC OPCODE XYZ ACC K Περιεχόμενο Κ

57 Παράδειγμα (LDA $K – Βήμα 1) LDA $K : Φόρτωσε τον Accumulator με το περιεχόμενο της διεύθυνσης Κ (της κύριας μνήμης) OPCODE LDA K MDR + 0  ACC Τώρα η λειτουργία της LDA $K έχει ολοκληρωθεί. Το περιεχόμενο της K ήρθε στον accumulator. Τελειώσαμε ;;;;; MARMDR PC OPCODE XYZ ACC K Περιεχόμενο Κ

58 Παράδειγμα (LDA $K – Βήμα 1) LDA $K : Φόρτωσε τον Accumulator με το περιεχόμενο της διεύθυνσης Κ (της κύριας μνήμης) PC + 1  PC, MAR Θα πρέπει να δώσουμε τον έλεγχο στο μικροπρόγραμμα της επόμενης μακροεντολής (XYZ στην περίπτωσή μας). Ο PC δείχνει ακόμα στο έντελο K, οπότε κάνουμε : OPCODE LDA K MARMDR PC OPCODE XYZ ACC K Περιεχόμενο Κ PCMARMDR Τελειώσαμε;;;

59 Παράδειγμα (LDA $K – Βήμα 1) ΝΕΧΤ(PC) : Συμβολικό όνομα για μία εντολή που έχει LOAD_DIR_SEQ~ = 0 και δεν κάνει τίποτα άλλο Το μόνο που απομένει είναι να περάσουμε το opcode της XYZ στον mapper και από εκεί στον μPC. Με τον τρόπο αυτό θα συνεχίσουμε την εκτέλεση από το κατάλληλο μικροπρόγραμμα. Αυτό γίνεται μέσω του σήματος LOAD_DIR_SEQ~ : OPCODE LDA K OPCODE XYZ ACC Περιεχόμενο Κ PCMARMDR Mapper μPC Τώρα τελειώσαμε !!!

60 Παράδειγμα (LDA $K – Βήμα 1) Συνοψίζοντας, το μικροπρόγραμμα σε συμβολική γλώσσα θα είναι LDA $K : 1. PC + 1  PC, MAR // To K θα πάει στον MDR 2. MDR + 0  ACC // To K στον accumulator 3. ACC + 0  NOP, MAR // To Κ στον MAR, άρα το περιεχόμενο της // Κ στον MDR 4. MDR + 0  ACC // O MDR (δηλ. το περιεχ. της Κ) στον ACC 5. PC + 1  PC, MAR // O MAR θα δείξει στο opcode της επόμ. μακροεντολής 6. NEXT(PC) // LOAD_DIR_SEQ~ για να πάμε στο μικροπρόγραμμα της // επόμενης μακροεντολής του μακροπρογράμματος

61 Παράδειγμα (ADD $K – Βήμα 1) LDA $K : 1. PC + 1  PC, MAR 2. MDR + 0  ACC 3. ACC + 0  NOP,MAR 4. MDR + 0  ACC 5. PC + 1  PC, MAR 6. NEXT(PC) ADD $K : Πρόσθεσε στον Accumulator το περιεχόμενο της διεύθυνσης Κ ADD $K : 1. PC + 1  PC, MAR 2. MDR + 0  X 3. X + 0  NOP, MAR 4. MDR + ACC  ACC 5. PC + 1  PC, MAR 6. NEXT(PC) Σημ: Ο Χ είναι ένας έξτρα καταχωρητής τον οποίο χρειάζομαι. H μικροεντολή 2 της ADD δεν μπορεί να γίνει ως MDR + 0  ACC, γιατί θα καταστραφούν τα προηγούμενα δεδομένα του ACC

62 Παράδειγμα (STA $K – Βήμα 1) LDA $K : 1. PC + 1  PC, MAR 2. MDR + 0  ACC 3. ACC + 0  NOP, MAR 4. MDR + 0  ACC 5. PC + 1  PC, MAR 6. NEXT(PC) STA $K : Αποθήκευσε το περιεχόμενο του Accumulator στη θέση μνήμης με διεύθυνση Κ STA $K : 1. PC + 1  PC, MAR 2. MDR + 0  X 3. X + 0  NOP,MAR 4. ACC + 0  NOP, MWE~ 5. PC + 1  PC, MAR 6. NEXT(PC) Σημ: Ο Χ είναι ένας έξτρα καταχωρητής τον οποίο χρειάζομαι. H μικροεντολή 2 της ADD δεν μπορεί να γίνει ως MDR + 0  ACC, γιατί θα καταστραφούν τα προηγούμενα δεδομένα του ACC

63 Συγγραφή Μικροπρογραμμάτων - Tips Γενικά : Για μία εντολή που δέχεται K ορίσματα, θα πρέπει να κάνουμε PC + 1  PC, MAR, K φορές, μία για κάθε όρισμα. Με τον τρόπο αυτό ‘βλέπουμε’ κάθε όρισμα. Χρειαζόμαστε ακόμα μία PC+1  PC, MAR για να διευθυνσιοδοτήσουμε το opcode της επόμενης macroεντολής. Τελειώνουμε με μία NEXT(PC) Π.χ. ΚΑΤΙ Ε1, Ε2, Ε3 : PC +1  PC, MAR // To Ε1 στον MDR Κάνε κάτι με το E1 PC + 1  PC, MAR // Το Ε2 στον MDR Kάνε κάτι με το E2 PC + 1  PC, MAR // To Ε3 στον MDR Κάνε κάτι με το E3 PC + 1  PC, MAR // Το επόμενο opcode στον MDR ΝΕΧΤ(PC) Standard τρόπος διευθυνσιοδότησης μνήμης, με το περιεχόμενο του MDR : MDR + 0  X X + 0  NOP, MAR Μπορούμε να απαλείψουμε τον X ;;;;; ΝΑΙ : MDR + 0  NOP, MAR Η παραπάνω εντολή είναι αποδεκτή (γλιτώνουμε έναν καταχωρητή και μία μικροεντολή) ΠΡΟΣΟΧΗ : Δεν υποστηρίζεται εντολή του στυλ : MDR + 0  PC, MAR

64 Βήμα 2 : Συγγραφή Μικροεντολών LDA $K : 1. PC + 1  PC, MAR // To K θα πάει στον MDR 2. MDR + 0  ACC // To K στον accumulator 3. ACC + 0  NOP, MAR // To Κ στον MAR, άρα το περιεχόμενο της // Κ στον MDR 4. MDR + 0  ACC // O MDR (δηλ. το περιεχ. της Κ) στον ACC 5. PC + 1  PC, MAR // O MAR θα δείξει στο opcode της επόμ. μακροεντολής 6. NEXT(PC) // LOAD_DIR_SEQ~ για να πάμε στο μικροπρόγραμμα της // επόμενης μακροεντολής του μακροπρογράμματος PC = 0100 και ACC = 1000

65 PC + 1  PC, MAR RF ALU Main Memory MAR MDR R S F Port A Port B A Data In B write op data address write Aport(3:0) I(8:6) I(5:3) MARCLK MWE~ Selector FeedBack Register Bport(3:0) SELB D Q Z A B I(2:0) DDATAE~ MDE~ PCE~ D(1:0) Switches Q0 I(8:6) (0100) + 01  (0100), MAR (DA) SH~ = MSTATUSCLK = CARRYE~ = 1 0 1

66 PC + 1  PC, MAR Μονάδα Ελέγχου : Σειριακή Εντολή

67 Βήμα 2 : Συγγραφή Μικροεντολών LDA $K : 1. PC + 1  PC, MAR // To K θα πάει στον MDR 2. MDR + 0  ACC // To K στον accumulator 3. ACC + 0  MAR // To Κ στον MAR, άρα το περιεχόμενο της Κ στον MDR 4. MDR + 0  ACC // O MDR (δηλ. το περιεχ. της Κ) στον ACC 5. PC + 1  PC, MAR // O MAR θα δείξει στο opcode της επόμ. μακροεντολής 6. NEXT(PC) // LOAD_DIR_SEQ~ για να πάμε στο μικροπρόγραμμα της // επόμενης μακροεντολής του μακροπρογράμματος PC = 0100 και ACC = 1000

68 MDR + 0  ACC RF ALU Main Memory MAR MDR R S F Port A Port B A Data In B write op data address write Aport(3:0) I(8:6) I(5:3) MARCLK MWE~ Selector FeedBack Register Bport(3:0) SELB D Q Z A B I(2:0) DDATAE~ MDE~ PCE~ D(1:0) Switches Q0 I(8:6) MDR + 0  (1000) XXXX XX (DZ) SH~ = MSTATUSCLK = CARRYE~ = 1 0 1

69 MDR + 0  ACC Μονάδα Ελέγχου : Σειριακή Εντολή

70 Βήμα 2 : Συγγραφή Μικροεντολών LDA $K : 1. PC + 1  PC, MAR // To K θα πάει στον MDR 2. MDR + 0  ACC // To K στον accumulator 3. ACC + 0  MAR // To Κ στον MAR, άρα το περιεχόμενο της Κ στον MDR 4. MDR + 0  ACC // O MDR (δηλ. το περιεχ. της Κ) στον ACC 5. PC + 1  PC, MAR // O MAR θα δείξει στο opcode της επόμ. μακροεντολής 6. NEXT(PC) // LOAD_DIR_SEQ~ για να πάμε στο μικροπρόγραμμα της // επόμενης μακροεντολής του μακροπρογράμματος PC = 0100 και ACC = 1000

71 ACC+0  NOP, MAR RF ALU Main Memory MAR MDR R S F Port A Port B A Data In B write op data address write Aport(3:0) I(8:6) I(5:3) MARCLK MWE~ Selector FeedBack Register Bport(3:0) SELB D Q Z A B I(2:0) DDATAE~ MDE~ PCE~ D(1:0) Switches Q0 I(8:6) (1000) + 0  NOP, MAR 1000 XX (ZA) 001 XXXX SH~ = MSTATUSCLK = CARRYE~ = 1 0 1

72 ACC+0  NOP, MAR Μονάδα Ελέγχου : Σειριακή Εντολή

73 Βήμα 2 : Συγγραφή Μικροεντολών LDA $K : 1. PC + 1  PC, MAR // To K θα πάει στον MDR 2. MDR + 0  ACC // To K στον accumulator 3. ACC + 0  MAR // To Κ στον MAR, άρα το περιεχόμενο της Κ στον MDR 4. MDR + 0  ACC // O MDR (δηλ. το περιεχ. της Κ) στον ACC 5. PC + 1  PC, MAR // O MAR θα δείξει στο opcode της επόμ. μακροεντολής 6. NEXT(PC) // LOAD_DIR_SEQ~ για να πάμε στο μικροπρόγραμμα της // επόμενης μακροεντολής του μακροπρογράμματος PC = 0100 και ACC = 1000

74 NEXT(PC) : Η μονάδα επεξεργασίας δεν κάνει ‘τίποτα’ RF ALU Main Memory MAR MDR R S F Port A Port B A Data In B write op data address write Aport(3:0) I(8:6) I(5:3) MARCLK MWE~ Selector FeedBack Register Bport(3:0) SELB D Q Z A B I(2:0) DDATAE~ MDE~ PCE~ D(1:0) Switches Q0 I(8:6) ???? op ????  NOP XXXX XX XXX XXX 001 SH~ = Χ MSTATUSCLK = 0 CARRYE~ = 1 Το αφήνουμε στην τύχη αφού όμως πρώτα απενεργοποιήσουμε όλες τις εγγραφές

75 NEXT(PC) : Η μονάδα επεξεργασίας δεν κάνει ‘τίποτα’ Μονάδα Ελέγχου : LOAD_DIR_SEQ~

76 Βήμα 2 : ADD $K, STA $K ADD $K : STA $K : 1. PC + 1  PC, MAR 2. MDR + 0  X 3. X + 0  NOP, MAR 4. MDR + ACC  ACC 5. PC + 1  PC, MAR 6. NEXT(PC) 1. PC + 1  PC, MAR 2. MDR + 0  X 3. X + 0  NOP,MAR 4. ACC + 0  NOP, MWE~ 5. PC + 1  PC, MAR 6. NEXT(PC) Να τις έχετε έτοιμες για το πρώτο εργαστήριο. Παρατηρήστε ότι οι περισσότερες εντολές είναι ίδιες με αυτές που περιγράψαμε

77 Αναφορά Στην αναφορά του εργαστηρίου, δεν χρειάζονται πολλά λόγια Θα πρέπει όμως οπωσδήποτε : 1. Να παρουσιάζετε τα μικροπρογράμματα σε ‘συμβολική’ γλώσσα 2. Να διευκρινίζετε ποιους καταχωρητές χρησιμοποιείτε (π.χ. ο PC είναι ο 0100, ο ACC είναι ο 1000, o Χ είναι … ) 3. Να διευκρινίζετε ποια opcodes έχετε αναθέσει για κάθε μακροεντολή 4. Να παρουσιάζετε τα περιεχόμενα του mapper 5. Να παρουσιάζετε τα περιεχόμενα της κύριας μνήμης (π.χ. δοκιμαστικό μακροπρόγραμμα) 6. Να παρουσιάζετε τα μικροπρογράμματα (τις 40 άδες) και σε ποια θέση της μικρομνήμης αποθηκεύεται η κάθε μικροεντολή. (κατά προτίμηση σε πίνακα του excell ή του word)

78 Το Bootstrap μικροπρόγραμμα Με τον τρόπο που γράφουμε τα μικροπρογράμματα εξασφαλίζουμε ότι μετά το τέλος ενός μικροπρογράμματος, ο έλεγχος περνάει στο μικροπρόγραμμα της επόμενης μακροεντολής (PC+1  PC, MAR και NEXT(PC)) Πώς όμως θα ξεκινήσει το μικροπρόγραμμα της πρώτης μακροεντολής, αφού δεν υπάρχει κάποιο άλλο μικροπρόγραμμα που να του δώσει τον έλεγχο ;;;; Bootstrap μικροπρόγραμμα : Αρχικοποιεί τον PC με τη διεύθυνση της κύριας μνήμης όπου έχουμε αποθηκευμένη την πρώτη μακροεντολή του μακροπρογράμματος. Στη συνέχεια εκτελεί τη NEXT(PC)

79 Το Bootstrap μικροπρόγραμμα Bootstrap : switches + 0  PC, MAR NEXT(PC) Η αρχικοποίηση του PC, γίνεται ‘χειροκίνητα’ μέσω των DIP SWITCHES της πλακέτας !

80 Το bootstrap μικροπρόγραμμα : Switches + 0  PC, MAR RF ALU Main Memory MAR MDR R S F Port A Port B A Data In B write op data address write Aport(3:0) I(8:6) I(5:3) MARCLK MWE~ Selector FeedBack Register Bport(3:0) SELB D Q Z A B I(2:0) DDATAE~ MDE~ PCE~ D(1:0) Switches Q0 I(8:6) Sw + 0  (0100), MAR XXXX XX (DZ) SH~ = MSTATUSCLK = CARRYE~ = 1 0 1

81 Το Bootstrap μικροπρόγραμμα TIP : To bootstrap είναι standard μικροπρόγραμμα Προσοχή : Μην ξεχνάτε να βάζετε τον PC που έχετε ορίσει στο πεδίο BPORT της πρώτης μικροεντολής !!! Τελευταίο Πρόβλημα : Ξεκινώντας, το σύστημα έχει μη καθορισμένη τιμή στον μPC. Θα πρέπει με κάποιον τρόπο να αποθηκεύσουμε στον μPC τη διεύθυνση της πρώτης μικροεντολής του bootstrap (έτσι θα ξεκινήσει η εκτέλεση του μακροπρογράμματος). Θα δούμε τον τρόπο με τον οποίο γίνεται το παραπάνω στο εργαστήριο.

82 Τέλος (Επιτέλους) Παρουσίαση : Φύλο excel με sample μικροκώδικα :


Κατέβασμα ppt "Εργαστήριο Αρχιτεκτονικής Υπολογιστών 2003 - 2004."

Παρόμοιες παρουσιάσεις


Διαφημίσεις Google