Πίνακας περιεχομένων:

Κωδικοποιήστε και δοκιμάστε έναν υπολογιστή στη γλώσσα μηχανής: 6 βήματα
Κωδικοποιήστε και δοκιμάστε έναν υπολογιστή στη γλώσσα μηχανής: 6 βήματα

Βίντεο: Κωδικοποιήστε και δοκιμάστε έναν υπολογιστή στη γλώσσα μηχανής: 6 βήματα

Βίντεο: Κωδικοποιήστε και δοκιμάστε έναν υπολογιστή στη γλώσσα μηχανής: 6 βήματα
Βίντεο: 15 Factor Apps - build release run and processes | PT 3 2024, Νοέμβριος
Anonim
Image
Image

Σε αυτό το Instructable, θα σας δείξω πώς να κωδικοποιείτε και να δοκιμάζετε ένα πρόγραμμα υπολογιστή σε γλώσσα μηχανής. Η γλώσσα μηχανών είναι η μητρική γλώσσα των υπολογιστών. Επειδή αποτελείται από συμβολοσειρές 1s και 0s, δεν γίνεται εύκολα κατανοητό από τους ανθρώπους. Για να επιλύσουμε αυτό, κωδικοποιούμε προγράμματα πρώτα σε γλώσσα υψηλού επιπέδου όπως η C ++ ή η Java και στη συνέχεια χρησιμοποιούμε ειδικά προγράμματα υπολογιστών για να τα μεταφράσουμε σε υπολογιστές 1s και 0s που καταλαβαίνουν. Η εκμάθηση κωδικοποίησης σε γλώσσα υψηλού επιπέδου είναι σίγουρα μια μη εγκεφαλική, αλλά μια σύντομη εισαγωγή στη γλώσσα των μηχανών μπορεί να προσφέρει πολύτιμη εικόνα για τον τρόπο λειτουργίας των υπολογιστών και να αυξήσει την εκτίμηση αυτής της πολύ σημαντικής τεχνολογίας.

Για να κωδικοποιήσουμε και να δοκιμάσουμε ένα πρόγραμμα γλώσσας μηχανής, χρειαζόμαστε πρόσβαση σε έναν υπολογιστή χωρίς λεπτομέρειες του οποίου η γλώσσα του μηχανήματος γίνεται εύκολα κατανοητή. Οι προσωπικοί υπολογιστές είναι πολύ περίπλοκοι για καν να ληφθούν υπόψη. Η λύση είναι να χρησιμοποιήσετε το Logisim, έναν προσομοιωτή λογικής, που λειτουργεί σε προσωπικό υπολογιστή. Με το Logisim μπορούμε να προσομοιώσουμε έναν υπολογιστή που καλύπτει τις ανάγκες μας. Το παραπάνω βίντεο σας δίνει μια ιδέα για το τι μπορούμε να επιτύχουμε με το Logisim.

Για τον σχεδιασμό του υπολογιστή, προσάρμοσα ένα από το ηλεκτρονικό μου βιβλίο Kindle Build Your Own Computer - From Scratch. Ξεκίνησα με τον υπολογιστή BYOC που περιγράφεται εκεί και τον περιόρισα στο ποικίλο βασικό BYOC-I (I for Instructable) που θα χρησιμοποιήσουμε σε αυτό το Instructable.

Η γλώσσα μηχανής του BYOC-I είναι απλή και κατανοητή. Δεν θα χρειαστείτε καμία ειδική γνώση υπολογιστών ή προγραμματισμού. Το μόνο που χρειάζεται είναι ένα ερευνητικό μυαλό και η επιθυμία για μάθηση

Περαιτέρω ανάγνωση

Wonderσως αναρωτιέστε γιατί χρησιμοποιούμε το "μηχάνημα" για να περιγράψουμε έναν υπολογιστή όταν δεν είναι μηχανική συσκευή. Ο λόγος είναι ιστορικός. οι πρώτες υπολογιστικές συσκευές ήταν μηχανικές που αποτελούνταν από γρανάζια και τροχούς. Το στίχο του Άλαν Σέρμαν, "wasταν όλα τα γρανάζια που έκαναν κλικ …" ήταν μόλις έναν ή δύο αιώνες. Διαβάστε περισσότερα για την πρώιμη πληροφορική εδώ.

Βήμα 1: Λίστα μερών

Ιεραρχία και Κώδικες Γλώσσας Μηχανής
Ιεραρχία και Κώδικες Γλώσσας Μηχανής

Η λίστα με τα μέρη είναι σύντομη. Απαιτούνται μόνο αυτά τα δύο στοιχεία, και τα δύο δωρεάν για λήψη:

  1. "Logisim-win-2.7.1.exe"-Το Logisim είναι ένας δημοφιλής και εύχρηστος προσομοιωτής λογικής. Κατεβάστε το εκτελέσιμο αρχείο Logisim από εδώ και, στη συνέχεια, δημιουργήστε μια σύντομη περικοπή σε ένα βολικό μέρος όπως η επιφάνεια εργασίας σας. Κάντε διπλό κλικ στο εικονίδιο Logisim για εκκίνηση. Σημείωση: Η Logisim χρησιμοποιεί το πακέτο Java Runtime που βρίσκεται εδώ. Μπορεί να σας ζητηθεί να το κατεβάσετε.
  2. BYOC-I-Full.cir "-Κατεβάστε το αρχείο κυκλώματος Logisim παρακάτω.

Εκκινήστε το Logisim και κάντε κλικ στο "Αρχείο-Άνοιγμα" και φορτώστε το αρχείο BYOC-I-Full.cir. Η παραπάνω εικόνα δείχνει το περιβάλλον εργασίας Logisim. Το BYOC-I αντιπροσωπεύεται από το μπλοκ υποκυκλωμάτων. Εξωτερικά συνδέονται δύο είσοδοι, Επαναφορά και Εκτέλεση και δεκαεξαδικές οθόνες για τους καταχωρητές και τη μνήμη προγράμματος του BYOC-I.

Η μνήμη προγράμματος του BYOC-I είναι προ-φορτωμένη με ένα απλό πρόγραμμα που μετράει από 1 έως 5 στον καταχωρητή Α. Για να εκτελέσετε (Εκτέλεση) το πρόγραμμα, ακολουθήστε αυτά τα βήματα.

Βήμα 1 - Κάντε κλικ στο Poke Tool. Ο δρομέας πρέπει να αλλάξει στο "δάχτυλο" που σπρώχνει. Βήμα 2 - Πιέστε την είσοδο Επαναφορά δύο φορές, μία φορά αλλάζοντάς την σε "1" και ξανά για να την αλλάξετε ξανά σε "0". Αυτό επαναφέρει το BYOC -I για να ξεκινήσει το πρόγραμμα στη διεύθυνση 0. Βήμα 3 - Πιέστε την είσοδο εκτέλεσης μία φορά για να το αλλάξετε σε "1". Ο καταχωρητής Α πρέπει να δείχνει τον αριθμό που αλλάζει από 1 σε 5 και στη συνέχεια επαναλαμβάνεται. Βήμα 4 - Εάν το πρόγραμμα δεν εκτελεστεί, πατήστε το πλήκτρο ελέγχου -Κ και θα πρέπει να ξεκινήσει.

Εάν θέλετε να διερευνήσετε τις δυνατότητες της Logisim, κάντε κλικ στο σύνδεσμο Βοήθεια στη γραμμή μενού. Από εκεί, μπορείτε να εξερευνήσετε το Logisim "Tutorial", "User Guide" και "Library Reference". Μια εξαιρετική εισαγωγή βίντεο βρίσκεται εδώ.

Βήμα 2: Ιεραρχία και κώδικες γλώσσας μηχανής

Ιεραρχία και Κώδικες Γλώσσας Μηχανής
Ιεραρχία και Κώδικες Γλώσσας Μηχανής

Ο υπολογιστής BYOC-I εκτελεί εργασίες που βασίζονται σε προγράμματα γραμμένα σε γλώσσα μηχανής. Τα προγράμματα BYOC-I, με τη σειρά τους, αποτελούνται από οδηγίες που εκτελούνται σε μια καλά καθορισμένη σειρά. Κάθε οδηγία αποτελείται από κωδικούς σταθερού μήκους που αντιπροσωπεύουν διάφορα λειτουργικά στοιχεία του BYOC-I. Τέλος, αυτοί οι κωδικοί αποτελούνται από συμβολοσειρές 1s και 0s που αποτελούν τη γλώσσα του μηχανήματος που στην πραγματικότητα εκτελεί το BYOC-I.

Ως επεξήγηση, θα ξεκινήσουμε με κωδικούς και θα φτάσουμε στο επίπεδο του προγράμματος. Στη συνέχεια, θα κωδικοποιήσουμε ένα απλό πρόγραμμα, θα το φορτώσουμε στη μνήμη του BYOC-I και θα το εκτελέσουμε.

Οι κωδικοί αποτελούνται από έναν σταθερό αριθμό δυαδικών (1 και 0) ψηφίων ή δυαδικών ψηφίων, για συντομία. Για παράδειγμα, ο παρακάτω πίνακας δείχνει όλους τους πιθανούς κωδικούς (16 συνολικά) για έναν κωδικό πλάτους 4 bit. Στο πλάι, ο κωδικός είναι το δεκαεξαδικό (βάση 16) και το δεκαδικό ισοδύναμο. Το δεκαεξαδικό χρησιμοποιείται στην αναφορά δυαδικών τιμών καθώς είναι πιο συμπαγές από το δυαδικό και ευκολότερο να μετατραπεί από δυαδικό σε δεκαδικό. Το πρόθεμα "0x" σάς ενημερώνει ότι ο αριθμός που ακολουθεί είναι δεκαεξαδικός ή "hex" για συντομία.

Δυαδικό - Δεκαδικό - Δεκαδικό0000 0x0000 00001 0x0001 10010 0x0002 20011 0x0003 30100 0x0004 40101 0x0005 50111 0x0007 71000 0x0008 81001 0x0009 91010 0x000A 101011 0x000B 111100 0x000C 121101 0x000C 121101 0x000C 121101 0x000C

Το πλάτος ενός κώδικα καθορίζει πόσα στοιχεία μπορούν να αναπαρασταθούν. Όπως σημειώθηκε, ο παραπάνω κωδικός 4-bit μπορεί να αντιπροσωπεύει έως 16 στοιχεία (0 έως 15). δηλαδή, 2 φορές 2 που λαμβάνονται τέσσερις φορές ή 2 έως 4η ισχύς ισούται με 16. Γενικά, ο αριθμός των αντιπροσωπευτικών στοιχείων αυξάνεται 2 στην nη δύναμη. Ακολουθεί μια σύντομη λίστα χωρητικότητας κώδικα n-bit.

n - Αριθμός ειδών 1 22 43 84 165 326 647 1288 256

Τα πλάτη κώδικα του υπολογιστή BYOC-I επιλέγονται για να χωρέσουν τον αριθμό των στοιχείων που θα αντιπροσωπεύονται από τον κώδικα. Για παράδειγμα, υπάρχουν τέσσερις τύποι οδηγιών, επομένως είναι κατάλληλος ένας κωδικός πλάτους 2-bit. Ακολουθούν οι κωδικοί BYOC-I με μια σύντομη επεξήγηση του καθενός.

Κωδικός τύπου εντολής (tt) Υπάρχουν τέσσερις τύποι οδηγιών: (1) MVI - Μετακινήστε μια άμεση σταθερή τιμή 8 -bit σε έναν καταχωρητή μνήμης. Ο καταχωρητής μνήμης είναι μια συσκευή που περιέχει δεδομένα για υπολογισμό, (2) MOV - Μετακίνηση δεδομένων από έναν καταχωρητή σε άλλο, (3) RRC - Εκτέλεση υπολογισμού καταχωρητή σε καταχωρητή και (4) JMP - Μετάβαση σε διαφορετική οδηγία αντί να συνεχίσετε στην επόμενη. Οι κωδικοί τύπου οδηγίας BYOC-I που εγκρίθηκαν είναι οι εξής:

00 MVI01 MOV10 RRC11 JMP

Κωδικός καταχώρισης (dd και ss) Το BYOC-I διαθέτει τέσσερις καταχωρητές 8 bit που μπορούν να αποθηκεύσουν τιμές από 0 έως 255. Ένας κωδικός 2 bit είναι αρκετός για να ορίσει τους τέσσερις καταχωρητές:

00 F καταχωρητής01 E καταχωρητής10 D καταχωρητής11 Ένας καταχωρητής

Κωδικός υπολογισμού (ccc) Το BYOC-I υποστηρίζει τέσσερις αριθμητικές/λογικές πράξεις. Για να επιτραπεί η μελλοντική επέκταση σε οκτώ υπολογισμούς, χρησιμοποιείται ένας κωδικός 3-bit:

000 ΠΡΟΣΘΗΚΗ, προσθέστε δύο τιμές 8-bit σε καθορισμένους καταχωρητές και αποθηκεύστε το αποτέλεσμα σε έναν από τους καταχωρητές 001 SUB, αφαιρέστε δύο τιμές 8-bit σε καθορισμένους καταχωρητές και αποθηκεύστε το αποτέλεσμα σε έναν από τους καταχωρητές 010-011 Διατηρείται για μελλοντική χρήση100 ΚΑΙ, λογικά ΚΑΙ δύο τιμές 8-bit σε καθορισμένους καταχωρητές και αποθηκεύστε το αποτέλεσμα σε έναν από τους καταχωρητές101,, λογικά two δύο τιμές 8-bit σε καθορισμένους καταχωρητές και αποθηκεύστε το αποτέλεσμα σε έναν από τους καταχωρητές 110 έως 111, Διατηρείται για μελλοντική χρήση

Jump Code (j) Κωδικός 1-bit που υποδεικνύει εάν το άλμα είναι άνευ όρων (j = 1) ή εξαρτάται από μη μηδενικό αποτέλεσμα υπολογισμού (j = 0).

Δεδομένα/Κωδικός Διεύθυνσης (v… v)/(a… a) Τα δεδομένα 8 bit μπορούν να συμπεριληφθούν σε ορισμένες οδηγίες που αντιπροσωπεύουν τιμές από 00000000 έως 11111111 ή 0 έως 255 δεκαδικά. Αυτά τα δεδομένα έχουν πλάτος 8-bit για αποθήκευση σε καταχωρητές 8-bit του BYOC-I. Με δεκαδική αριθμητική, δεν εμφανίζουμε μηδενικά που οδηγούν. Με την αριθμητική υπολογιστών, δείχνουμε μηδενικά που οδηγούν αλλά δεν επηρεάζουν την τιμή. Το 00000101 είναι αριθμητικά το ίδιο με ένα δεκαδικό 101 ή 5.

Προτεινόμενες αναφορές

Δυαδική σημειογραφία - https://learn.sparkfun.com/tutorials/binaryHexadecimal Notation -

Περαιτέρω ανάγνωση

Η ιδέα της χρήσης κωδικών για την οδήγηση μιας διαδικασίας πηγαίνει πολύ πίσω. Ένα συναρπαστικό παράδειγμα είναι το Jacquard Loom. Ο αυτοματοποιημένος αργαλειός ελέγχονταν από μια αλυσίδα από ξύλινες κάρτες, στις οποίες ανοίγονταν τρύπες που αντιπροσωπεύουν κώδικες για διαφορετικά χρώματα νήματος για ύφανση. Είδα το πρώτο μου στη Σκωτία όπου το χρησιμοποιούσαν για να φτιάξουν πολύχρωμα ταρτάν. Διαβάστε περισσότερα για τον Jacquard Looms εδώ.

Βήμα 3: Ανατομία των οδηγιών BYOC-I

Ανατομία των οδηγιών BYOC-I
Ανατομία των οδηγιών BYOC-I

Δεδομένων των κωδικών του BYOC-I, ανεβαίνουμε στο επόμενο επίπεδο, οδηγίες. Για να δημιουργήσουμε μια οδηγία για το BYOC-I, τοποθετούμε τους κωδικούς μαζί με καθορισμένη σειρά και σε συγκεκριμένες θέσεις μέσα στην οδηγία. Δεν εμφανίζονται όλοι οι κωδικοί σε όλες τις οδηγίες αλλά, όταν εμφανίζονται, καταλαμβάνουν μια συγκεκριμένη τοποθεσία.

Ο τύπος εντολών MVI απαιτεί τα περισσότερα bits, 12 συνολικά. Κάνοντας τη λέξη οδηγιών 12 bit σε μήκος, προσαρμόζουμε όλες τις οδηγίες. Στα μη χρησιμοποιημένα (αποκαλούμενα "δεν με νοιάζει") bit δίνεται η τιμή 0. Εδώ είναι το σετ οδηγιών BYOC-I.

  1. Μετακίνηση Άμεσης (MVI) - 00 dd vvvvvvv Λειτουργία: Μετακινήστε μια τιμή δεδομένων 8 -bit V = vvvvvvvv στον καταχωρητή προορισμού dd. Μετά την εκτέλεση, ο καταχωρητής dd θα έχει την τιμή vvvvvvvv. Συντομογραφία: MVI R, V όπου R είναι A, D, E ή F. Παράδειγμα: 00 10 00000101 - MVI D, 5 - Μετακινήστε την τιμή 5 στον καταχωρητή D.
  2. Μετακίνηση Εγγραφής στο Μητρώο (MOV) - 01 dd ss 000000Λειτουργία: Μετακίνηση δεδομένων από τον καταχωρητή προέλευσης ss στον καταχωρητή desination dd. Μετά την εκτέλεση, και οι δύο καταχωρητές έχουν την ίδια τιμή με τον καταχωρητή προέλευσης. Συντομογραφία: MOV Rd, Rs όπου Rd είναι ο καταχωρητής προορισμού A, D, E, ή F και Rs είναι ο καταχωρητής πηγής A, D, E, ή F. Παράδειγμα: 01 11 01 000000 - MOV A, E - Μετακινήστε την τιμή στο μητρώο Ε για εγγραφή Α.
  3. Εγγραφή στην εγγραφή Υπολογισμός (RRC) - 10 dd ss ccc 000 Λειτουργία: Εκτελέστε τον καθορισμένο υπολογισμό ccc χρησιμοποιώντας τον καταχωρητή προέλευσης ss και τον καταχωρητή προορισμού dd και στη συνέχεια αποθηκεύοντας το αποτέλεσμα στο μητρώο προορισμού. Συντομογραφίες: ADD Rd, Rs (ccc = 000 Rd + Rs αποθηκευμένα σε Rd); SUB Rd, Rs (ccc = 001 Rd - Rs αποθηκευμένα σε Rd); AND Rd, Rs (ccc = 100 Rd AND Rs αποθηκευμένα σε Rd); OR Rd, Rs (ccc = 101 Rd OR Rs αποθηκευμένα σε Rd). Παράδειγμα: 10 00 11 001 000 - SUB F, A - Αφαιρέστε την τιμή στον καταχωρητή Α από τον καταχωρητή F με το αποτέλεσμα στον καταχωρητή F
  4. Μετάβαση σε διαφορετικές οδηγίες (JMP) - 11 j 0 aaaaaaa Λειτουργία: Αλλάξτε την εκτέλεση σε διαφορετική εντολή που βρίσκεται στη διεύθυνση aaaa aaaa (a) άνευ όρων (j = 1) -11 1 0 aaaaaaaa Συντομογραφία: JMP L όπου L είναι διεύθυνση aaaa aaaaΠαράδειγμα: 11 1 0 00001000 - JMP 8 - Αλλαγή εκτέλεσης στη διεύθυνση 8. (β) Υπό όρους (j = 0) όταν ο προηγούμενος υπολογισμός είχε ως αποτέλεσμα μη μηδενικό αποτέλεσμα - 11 0 0 ααααααα Συντομογραφία: JNZ L όπου L είναι διεύθυνση αααα αααα. Παράδειγμα: 11 0 0 00000100 JNZ 4 Εάν ο τελευταίος υπολογισμός απέδωσε μη μηδενική τιμή, αλλάξτε την εκτέλεση στη διεύθυνση 4.

Τα δυαδικά ψηφία λέξεων αριθμούνται αριστερά (το πιο σημαντικό bit MSB) προς τα δεξιά (το λιγότερο σημαντικό bit LSB) από 11 έως 0. Η σταθερή σειρά και οι θέσεις των κωδικών έχουν ως εξής:

Bits-Κωδικός 11-10 Τύπος Οδηγιών9-8 Μητρώο Προορισμών7-6 Μητρώο Πηγών5-3 Υπολογισμός: 000-add; 001 - αφαιρέστε 100 - λογικό ΚΑΙ? 101 - λογική OR7-0 Σταθερή τιμή v… v και a… a (0 έως 255)

Το σύνολο οδηγιών συνοψίζεται στο παραπάνω σχήμα. Σημειώστε τη δομημένη και τακτική εμφάνιση των κωδικών σε κάθε οδηγία. Το αποτέλεσμα είναι ένας απλούστερος σχεδιασμός για το BYOC-I και καθιστά τις οδηγίες ευκολότερες για τον άνθρωπο να κατανοήσουν.

Βήμα 4: Κωδικοποίηση οδηγιών υπολογιστή

Κωδικοποίηση οδηγιών υπολογιστή
Κωδικοποίηση οδηγιών υπολογιστή

Πριν μεταβείτε στο επίπεδο προγράμματος, ας κατασκευάσουμε ορισμένες παραδείγματα οδηγιών χρησιμοποιώντας το σετ οδηγιών BYOC-I παραπάνω.

1. Μετακινήστε την τιμή 1 στην εγγραφή Α. Οι καταχωρητές BYOC-I μπορούν να αποθηκεύσουν τιμές από 0 έως 255. Σε αυτήν την περίπτωση, ο καταχωρητής Α θα έχει την τιμή 1 (δυαδικό 00000001) μετά την εκτέλεση της εντολής.

Συντομογραφία: MVI A, 1 Απαιτούνται κωδικοί: Πληκτρολογήστε MVI - 00; Μητρώο προορισμού Α - 11; Τιμή - 00000001 Λέξη οδηγιών: 00 11 00000001

2. Μετακινήστε τα περιεχόμενα του καταχωρητή Α στον καταχωρητή Δ. Μετά την εκτέλεση, και οι δύο καταχωρητές θα έχουν την αρχική τιμή στον καταχωρητή Α.

Συντομογραφία: MOV D, A (Θυμηθείτε, ο προορισμός είναι πρώτος και η πηγή δεύτερη στη λίστα) Απαιτούνται κωδικοί: Πληκτρολογήστε MOV - 01; Μητρώο προορισμού D - 10; Πηγή Μητρώο A - 11Lurstruction Word: 01 10 11 000000

3. Προσθέστε το περιεχόμενο του μητρώου D στο μητρώο A και αποθηκεύστε το στο μητρώο A. Μετά την εκτέλεση, η τιμή του καταχωρητή A θα είναι το άθροισμα της αρχικής τιμής του καταχωρητή A και του καταχωρητή D.

Συντομογραφία: ADD A, D (Το αποτέλεσμα αποθηκεύεται στο μητρώο προορισμού) Απαιτούνται κωδικοί: Πληκτρολογήστε RRC - 10; Μητρώο προορισμού Α - 11; Μητρώο πηγής D - 10; Υπολογισμός Προσθήκη - 000 Οδηγίες Λέξης: 10 11 10 000 000 (ccc είναι το πρώτο 000 - προσθήκη)

4. Μετάβαση στο μηδέν στη διεύθυνση 3. Εάν το αποτέλεσμα του τελευταίου υπολογισμού δεν ήταν μηδέν, η εκτέλεση θα αλλάξει στην εντολή στη δεδομένη διεύθυνση. Εάν είναι μηδέν, η εκτέλεση συνεχίζεται με την ακόλουθη οδηγία.

Συντομογραφία: JNZ 3 Απαιτούνται κωδικοί: Πληκτρολογήστε JMP - 11; Τύπος άλματος - 0; Διεύθυνση - 00000003 Instruction Word: 11 0 0 00000003 (Ο τύπος μετάβασης είναι ο πρώτος 0)

5. Μετάβαση χωρίς όρους στη διεύθυνση 0. Μετά την εκτέλεση, η εκτέλεση αλλάζει στην εντολή στη δεδομένη διεύθυνση.

Συντομογραφία: JMP 0 Απαιτείται κωδικός: Πληκτρολογήστε JMP - 11; Τύπος άλματος - 1; Διεύθυνση - 00000000Instruction Word; 11 1 0 00000000

Ενώ η κωδικοποίηση μηχανών είναι κάπως κουραστική, μπορείτε να δείτε ότι δεν είναι απίστευτα δύσκολο. Εάν ήσασταν κωδικοποιητής μηχανής, θα χρησιμοποιούσατε ένα πρόγραμμα υπολογιστή που ονομάζεται assembler για να μεταφράσετε από τη συντομογραφία (που ονομάζεται κωδικός συναρμολόγησης) σε κώδικα μηχανής.

Βήμα 5: Ανατομία ενός προγράμματος υπολογιστή

Πρόγραμμα ανατομίας υπολογιστή
Πρόγραμμα ανατομίας υπολογιστή

Ένα πρόγραμμα υπολογιστή είναι μια λίστα οδηγιών που εκτελεί ο υπολογιστής ξεκινώντας στην αρχή της λίστας συνεχίζοντας προς τα κάτω τη λίστα έως το τέλος. Οδηγίες όπως JNZ και JMP μπορούν να αλλάξουν ποια εντολή εκτελείται στη συνέχεια. Κάθε εντολή στη λίστα καταλαμβάνει μία μόνο διεύθυνση στη μνήμη του υπολογιστή ξεκινώντας από το 0. Η μνήμη BYOC-I μπορεί να περιέχει μια λίστα με 256 οδηγίες, περισσότερες από αρκετές για τους σκοπούς μας.

Τα προγράμματα υπολογιστών έχουν σχεδιαστεί για να εκτελούν μια δεδομένη εργασία. Για το πρόγραμμά μας, θα επιλέξουμε μια απλή εργασία, μετρώντας από το 1 έως το 5. Προφανώς, δεν υπάρχει εντολή "μέτρησης", οπότε το πρώτο βήμα είναι να χωρίσουμε την εργασία σε βήματα που μπορούν να χειριστούν οι BYOC-I's περιορισμένο σύνολο οδηγιών.

Βήμα 1 Μετακίνηση 1 για καταχώριση Βήμα 2 Μετακίνηση καταχωρητή Α για εγγραφή D Βήμα 3 Προσθήκη καταχωρητή D για καταχώριση Α και αποθήκευση του αποτελέσματος στον καταχωρητή Βήμα 4 Μετακίνηση 5 για καταχώριση EStep 5 Αφαίρεση καταχωρητή Α από τον καταχωρητή Ε και αποθήκευση του αποτελέσματος στον καταχωρητή ES βήμα 6 Αν το αποτέλεσμα της αφαίρεσης δεν ήταν μηδέν, επιστρέψτε στο Βήμα 4 και συνεχίστε να μετράτε Βήμα 7 Εάν το αποτέλεσμα της αφαίρεσης ήταν μηδέν, επιστρέψτε και ξεκινήστε από την αρχή

Το επόμενο βήμα είναι να μεταφράσετε αυτά τα βήματα σε οδηγίες BYOC-I. Τα προγράμματα BYOC-I ξεκινούν στη διεύθυνση 0 και τον αριθμό διαδοχικά. Οι διευθύνσεις στόχου μετάβασης προστίθενται τελευταία μετά την εφαρμογή όλων των οδηγιών.

Διεύθυνση: Οδηγίες - Συντομογραφία. Περιγραφή 0: 00 11 00000001 - MVI A, 1; Μετακίνηση 1 για εγγραφή A1: 01 10 11 000000 - MOV D, A. Μετακίνηση του καταχωρητή A για καταχώριση D2: 10 11 10 000 000 - ADD A, D Προσθέστε τον καταχωρητή D στο μητρώο A και αποθηκεύστε το αποτέλεσμα στον καταχωρητή A3: 00 01 00 00000101 - MVI E, 5; Μετακινήστε τον καταχωρητή E4: 10 01 11 001 000 - SUB E, A; Αφαιρέστε τον καταχωρητή A από το μητρώο E και αποθηκεύστε το αποτέλεσμα στον καταχωρητή E5: 11 0 0 00000010 - JNZ 2; Εάν το αποτέλεσμα της αφαίρεσης δεν ήταν μηδέν, επιστρέψτε στη διεύθυνση 3 και συνεχίστε να μετράτε 6: 11 1 0 00000000 - JMP 0; Εάν το αποτέλεσμα της αφαίρεσης ήταν μηδέν, επιστρέψτε και ξεκινήστε από την αρχή

Πριν από τη μεταφορά του προγράμματος στη μνήμη, ο δυαδικός κώδικας οδηγιών πρέπει να αλλάξει σε δεκαεξαδικό για χρήση με το Logisim Hex Editor. Αρχικά, χωρίστε την οδηγία σε τρεις ομάδες των 4 bits η κάθε μία. Στη συνέχεια, μεταφράστε τις ομάδες σε δεκαεξαδικά χρησιμοποιώντας τον πίνακα στο Βήμα 2. Μόνο τα τρία τελευταία δεκαδικά ψηφία (με έντονη γραφή παρακάτω) θα χρησιμοποιηθούν.

Διεύθυνση - Instruction Δυαδική - Instruction Δυαδική Split - Instruction (Hex) 0 001100000001 0011 0000 0001 - 0x03011 011011000000 0110 1100 0000 - 0x06C02 101110000000 1011 1000 0000 - 0x0B803 000100000101 0001 0000 0101 - 0x01054 100111001000 1001 1100 1000 - 0x09C85 110000000100 1100 0000 0010 - 0x0C026 111000000010 1110 0000 0000 - 0x0E00

It'sρθε η ώρα να μεταφέρετε το πρόγραμμα στη μνήμη του BYOC-I για δοκιμή.

Βήμα 6: Μεταφορά του προγράμματος στη μνήμη και τον έλεγχο

Μεταφορά του προγράμματος στη μνήμη και τον έλεγχο
Μεταφορά του προγράμματος στη μνήμη και τον έλεγχο
Μεταφορά του προγράμματος στη μνήμη και τον έλεγχο
Μεταφορά του προγράμματος στη μνήμη και τον έλεγχο

Κοιτάζοντας το κύκλωμα Logisim "κύριο", το μπλοκ BYOC-I που εμφανίζεται είναι το σύμβολο για το πραγματικό κύκλωμα υπολογιστή με την ένδειξη "BYOC-I" στο παράθυρο Explorer. Για να εισαγάγετε ένα πρόγραμμα στη μνήμη BYOC-I:

  1. Κάντε δεξί κλικ στο μπλοκ BYOC-I (που ονομάζεται "υποκύκλωμα") και επιλέξτε (τοποθετήστε το δείκτη του ποντικιού πάνω και αριστερό κλικ) "Προβολή BYOC-I".
  2. Το κύκλωμα BYOC-I θα εμφανιστεί στην περιοχή εργασίας. Κάντε δεξί κλικ στο σύμβολο "Program Memory" και επιλέξτε "Edit Contents..".
  3. Χρησιμοποιώντας το Logisim Hex Editor, εισαγάγετε τον δεκαεξαδικό κωδικό (μόνο με έντονη γραφή) όπως φαίνεται παραπάνω.

Είστε τώρα έτοιμοι να εκτελέσετε το πρόγραμμα. Επιστρέψτε στο κύριο κύκλωμα κάνοντας διπλό κλικ στο "BYOC-I" στο παράθυρο Explorer. Οι είσοδοι Run και Reset πρέπει να είναι "0" για να ξεκινήσουν. Χρησιμοποιώντας το εργαλείο Poke, αλλάξτε πρώτα Reset σε "1" και μετά πίσω σε "0". Αυτό καθιστά την αρχική διεύθυνση 0x0000 και προετοιμάζει το κύκλωμα BYOC-I για εκτέλεση. Τώρα πατήστε την είσοδο Εκτέλεση στο "1" και το πρόγραμμα θα εκτελεστεί. (Σημείωση: Πρέπει να πατήσετε μία φορά το Control-K για να ξεκινήσετε το ρολόι Logisim. Αυτή είναι μια λειτουργία που σας επιτρέπει να σταματήσετε το ρολόι Logisim και να περάσετε από ένα πρόγραμμα πατώντας επανειλημμένα το Control-T. Δοκιμάστε το κάποτε!)

Το ρολόι Logisim μπορεί να ρυθμιστεί για ένα ευρύ φάσμα συχνοτήτων. Όπως κατέβηκε είναι 8 Hz (8 κύκλοι ανά δευτερόλεπτο). Με τον τρόπο που έχει σχεδιαστεί ο υπολογιστής BYOC-I, κάθε εντολή χρειάζεται τέσσερις κύκλους ρολογιού για να ολοκληρωθεί. Έτσι, για να υπολογίσετε την ταχύτητα BYOC-I, διαιρέστε τη συχνότητα του ρολογιού με 4. Στα 8 Hz, η ταχύτητά του είναι 2 οδηγίες ανά δευτερόλεπτο. Μπορείτε να αλλάξετε το ρολόι κάνοντας κλικ στην επιλογή "Προσομοίωση" στη γραμμή εργαλείων και επιλέγοντας "Συχνότητα τικ". Το πιθανό εύρος είναι 0,25 Hz έως 4100 Hz. Η αργή ταχύτητα στα 8 Hz επιλέχθηκε για να μπορείτε να παρακολουθείτε την καταμέτρηση στο μητρώο Α.

Η μέγιστη ταχύτητα της προσομοίωσης BYOC-I (instructions 1000 οδηγίες ανά δευτερόλεπτο) είναι πολύ αργή σε σύγκριση με τους σύγχρονους υπολογιστές. Η έκδοση υλικού του υπολογιστή BYOC που περιγράφεται στο βιβλίο μου εκτελεί πάνω από 12 εκατομμύρια οδηγίες ανά δευτερόλεπτο!

Ελπίζω ότι αυτό το Instructable έχει απομυθοποιήσει τον προγραμματισμό της γλώσσας μηχανών και σας έχει δώσει εικόνα για το πώς λειτουργούν οι υπολογιστές στο πιο βασικό τους επίπεδο. Για να αποκτήσετε την κατανόησή σας, προσπαθήστε να κωδικοποιήσετε τα δύο παρακάτω προγράμματα.

  1. Γράψτε ένα πρόγραμμα που ξεκινά στις 5 και μετρά αντίστροφα έως το 0. (ANS. Count5to0.txt παρακάτω)
  2. Ξεκινώντας από το 2, μετρήστε με 3 έως ότου ο αριθμός υπερβεί το 7. Θα μπορούσατε να κάνετε μια μικρή νοητική αριθμητική, ελέγξτε για 8 γνωρίζοντας ότι θα προσγειωθεί εκεί και στη συνέχεια επανεκκινήστε. Γράψτε το πρόγραμμά σας με έναν γενικότερο τρόπο που να ελέγχει πραγματικά αν ο αριθμός "υπερβαίνει" έναν συγκεκριμένο αριθμό. Υπόδειξη: Εξερευνήστε τι συμβαίνει όταν μια αφαίρεση δίνει μια αρνητική τιμή, ας πούμε 8 - 9 = -1 για παράδειγμα. Στη συνέχεια, πειραματιστείτε με το λογικό ΚΑΙ για να ελέγξετε εάν το MSB σε έναν αριθμό 8-bit είναι "1". (ANS. ExceedsCount.txt)

Μπορείτε να σκεφτείτε άλλα προκλητικά προβλήματα για τον υπολογιστή BYOC-I; Δεδομένων των περιορισμών του, τι άλλο μπορεί να κάνει; Μοιραστείτε τις εμπειρίες σας μαζί μου στη διεύθυνση [email protected]. Εάν ενδιαφέρεστε για την κωδικοποίηση μικροεπεξεργαστών, ανατρέξτε στον ιστότοπό μου www.whippleway.com. Εκεί μεταφέρω κωδικοποίηση μηχανών σε σύγχρονους επεξεργαστές όπως η σειρά ATMEL Mega που χρησιμοποιείται στο Arduinos.

Συνιστάται: