Τοσύνολο εντολών (instruction set) ή αρχιτεκτονική συνόλου εντολών (instruction set architecture, ISA), είναι το τμήμα της αρχιτεκτονικής υπολογιστώνπου συνδέεται μετονπρογραμματισμόκαι περιλαμβάνει τους τύπους δεδομένων της μηχανής, τις εντολές, τους καταχωρητές, τους τρόπους διευθυνσιοδότησης (addressing modes), τηναρχιτεκτονική μνήμης, τον χειρισμό διακοπώνκαιεξαιρέσεων, καθώς καιτην εξωτερική είσοδο/έξοδο (Input/output, I/O). Μια αρχιτεκτονική συνόλου εντολών περιλαμβάνει το σύνολο των μνημονικών εντολών (opcodes) της γλώσσας μηχανής, και τις εντολές που υλοποιούνται από τον ίδιο τον επεξεργαστή. [1]
Η αρχιτεκτονική συνόλου εντολών διαφέρει από τημικροαρχιτεκτονική, η οποία είναι το σύνολο των τεχνικών σχεδίασης επεξεργαστών, που χρησιμοποιείται γιατην υλοποίηση του συνόλου εντολών. Υπολογιστές με διαφορετικές μικροαρχιτεκτονικές μπορούν να έχουν το ίδιο σύνολο εντολών. Για παράδειγμα, οPentium της IntelκαιοAthlon της AMD υλοποιούν σχεδόν ίδιες εκδόσεις του συνόλου εντολών x86, αλλά έχουν σημαντικά διαφορετικές εσωτερικές σχεδιάσεις. Η αρχιτεκτονική συνόλου εντολών IA32 σχεδιάστηκε από την εταιρία Intel γιατου επεξεργαστές της ίδιας εταιρίας. Η ανταγωνιστική εταιρία AMD υλοποίησε επεξεργαστές διαφορετικής αρχιτεκτονικής από αυτούς της Intel αλλά χρησιμοποίησε το ίδιο ακριβώς σύνολο εντολών IA32 (αρχικά σχεδιασμένο μόνο για Intel). Το 2002 περίπου η AMD επέκτεινε το σύνολο εντολών Intel-IA32 στο νέο σύνολο x86-64 για να υποστηρίζονται συστήματα 64 bit τα οποία μπορούν να χρησιμοποιηθούν χώρους διεύθυνσης μνήμης μέχρι 256 terrabytes (bytes). Η Intel μετο IA32 απευθυνόταν σε μηχανήματα 32bit όπου μπορούσαν να χρησιμοποιούν χώρο διεύθυνσης μνήμης μέχρι 4 gbytes (bytes).Η AMD εκτός από το σύνολο εντολών x86-64 την εποχή εκεί κατάφερε και έβγαλε στην αγορά επεξεργαστή γρηγορότερο από 1 GHz. [2]Η επέκταση της AMD στο νέο σύνολο x86-64 επέτρεψε να μπορούν να χρησιμοποιηθούν χώροι διεύθυνσης μνήμης μέχρι 256 terrabytes (bytes). Το σύνολο εντολών x86-64 στην συνέχεια υιοθετήθηκε και από την Intel γιατην κατασκευή επεξεργαστών. Το σύνολο εντολών x86-64 ενσωματώνει λειτουργίες για δημιουργία βελτιωμένου κώδικα μηχανής. [3]
Κάποιες εικονικές μηχανής (virtual machines) που υποστηρίζουν κώδικα byte (bytecode), όπως αυτές της Smalltalkκαι της Java, καθώς καιη εικονική μηχανή Common Language Runtime της Microsoft σαν αρχιτεκτονική συνόλου εντολών, την υλοποιούν μεταφράζοντας τον κώδικα byte από συχνά χρησιμοποιούμενα μονοπάτια κώδικα σε κώδικα μηχανής, και εκτελούν τα λιγότερο συχνά χρησιμοποιούμενα μονοπάτια μεδιερμηνεία. Για παράδειγμα, με αυτόν τον τρόπο, ηTransmeta υλοποίησε το σύνολο εντολών x86 σε επεξεργαστές VLIW.
Η TIMI (Technology-Independent Machine Interface) ήταν μια ιδιαίτερη αρχιτεκτονική συνόλου εντολών που εμφανίστηκε στους IBM System/38καιIBM AS/400. Υλοποιήθηκε από λογισμικό χαμηλού επιπέδου που μετέφραζε τον κώδικα TIMI σε κώδικα μηχανής, παρέχοντας λειτουργίες που σήμερα θα αποδίδονταν σεμια «εικονική μηχανή» (virtual machine). Σχεδιάστηκε γιανα αυξήσει τον χρόνο ζωής της πλατφόρμας καιτων εφαρμογών της, επιτρέποντας τη μεταφορά ολόκληρης της πλατφόρμας σε πολύ διαφορετικό υλικό χωρίς να χρειάζεται μετατροπή στο λογισμικό εκτός από τον μεταφραστή από TIMI σε γλώσα μηχανής, και από τον κώδικα που υλοποιεί τις υπηρεσίες που χρησιμοποιούνται από τον κώδικα μηχανής που προκύπτει. Αυτό επέτρεψε στην IBM να μεταφέρει την πλατφόρμα AS/400 από μια παλιά αρχιτεκτονική CISCστην νεότερη αρχιτεκτονική POWER χωρίς να πρέπει να γράψει πάλι ή να μεταγλωττίσει μέρη τουλειτουργικού συστήματος ή του λογισμικού, εκτός από τον κώδικα χαμηλού επιπέδου που αναφέρθηκε πριν.
Ηγλώσσα μηχανής κατασκευάζεται από διακριτές εντολές (statements, instructions). Στην αρχιτεκτονική που εκτελείται, μια εντολή μπορεί να ορίζει:
Συγκεκριμένους καταχωρητέςγια αριθμητικές πράξεις, σχηματισμό διευθύνσεων μνήμης ή λειτουργίες ελέγχου
Συγκεκριμένες θέσεις μνήμης ή μετατοπίσεις (offsets)
Συγκεκριμένους τρόπους σχηματισμού διευθύνσεων (addressing modes) που χρησιμοποιούνται γιατην ερμηνεία των τελεστών
Συνδυάζοντας αυτές τις απλές εντολές μπορούν να προκύψουν πιο σύνθετες εντολές, οι οποίες (σεμιααρχιτεκτονική φον Νόιμαν) εκτελούνται ακολουθιακά ή όπως ορίζουν οι εντολές ροής ελέγχου (control flow).
Κάποιες εντολές που υπάρχουν στα περισσότερα σύνολα εντολών είναι οι εξής:
Χειρισμός δεδομένων και λειτουργίες μνήμης
θέσε (set) έναν καταχωρητή (που είναι μια προσωρινή μικρή μνήμη στον επεξεργαστή) σεμια σταθερή τιμή
μετακίνησε (move) δεδομένα από μια θέση μνήμης σε έναν καταχωρητή (ή αντίστροφα). Αυτό γίνεται γιανα ληφθούν τα δεδομένα που χρειάζεται ένας υπολογισμός που ακολουθεί, ή γιανα αποθηκευτεί το αποτέλεσμα ενός υπολογισμού.
διάβασμα (read) καιγράψιμο (write) δεδομένων σε συσκευές υλικού
πρόσθεσε (add), αφαίρεσε (subtract), πολλαπλασίασε (multiply), ή διαίρεσε (divide) τις τιμές δύο καταχωρητών, τοποθετώντας το αποτέλεσμα σε έναν καταχωρητή, ίσως θέτωντας έναν ή περισσότερους κωδικούς κατάστασης (flags, condition codes) σε έναν καταχωρητή κατάστασης (status register)
λειτουργίες μεταξύ bit (bitwise operations), όπως ησύζευξηκαιηδιάζευξητων αντίστοιχων bit σε δύο καταχωρητές, ή ηάρνηση κάθε bit σε έναν καταχωρητή
σύγκρινε (compare) τις τιμές δύο καταχωρητών (για παράδειγμα, γιανα βρεθεί ανη μία είναι μεγαλύτερη ή αν είναι ίσες)
Κάποιοι υπολογιστές περιλαμβάνουν "σύνθετες" εντολές στο σύνολο εντολών τους. Μια "σύνθετη" εντολή κάνει κάτι που μπορεί να χρειάζεται περισσότερες από μια εντολές σε άλλους υπολογιστές. Τέτοιες εντολές είναι αυτές που χρειάζονται παραπάνω από ένα βήματα, ελέγχουν πολλαπλές λειτουργικές μονάδες ή κάνουν κάποια λειτουργία σε μεγαλύτερη κλίμακα από τις περισσότερες απλές εντολές που υλοποιεί ένας επεξεργαστής. Παραδείγματα "σύνθετων" εντολών είναι:
η ταυτόχρονη αποθήκευση πολλών καταχωρητών στη στοίβα
η εκτέλεση μιας εντολής δοκιμή-και-ανάθεση (test-and-set)
οι εντολές που χρησιμοποιούν την ALU με δεδομένα από τη μνήμη αντί από κάποιον καταχωρητή
Ένας τύπος σύνθετων εντολών που έχει γίνει πολύ δημοφιλής πρόσφατα είναι η λειτουργία SIMD (Single-Instruction-Multiple-Data, μια-εντολή-πολλά-δεδομένα) ή διανυσματική εντολή (vector instruction), μια λειτουργία που εκτελεί την ίδια αριθμητική πράξη σε πολλά δεδομένα ταυτόχρονα. Η SIMD μπορεί να χειρίζεται μεγάλα διανύσματα και πίνακες πολύ γρήγορα. Οι εντολές SIMD επιτρέπουν τον εύκολο παραλληλισμότων αλγορίθμων που συναντώνται συχνά στηνεπεξεργασία ήχου, εικόναςκαιβίντεο. Πολλές υλοποιήσεις SIMD έχουν κυκλοφορήσει στην αγορά με ονόματα όπως τοMMX, το3DNow!καιτοAltiVec.
Στις παραδοσιακές αρχιτεκτονικές, μια εντολή περιλαμβάνει έναν κωδικό (opcode) που ορίζει τη λειτουργία πουθα εκτελεστεί, όπως για παράδειγμα "πρόσθεσε περιεχόμενα της μνήμης στον καταχωρητή" και μηδέν ή παραπάνω τελεστέους (operand), που μπορεί να ορίζουν κάποιον καταχωρητή, θέσεις μνήμης, ή σταθερές. Οι τελεστέοι μπορεί να περιλαμβάνουν τρόπους σχηματισμού διευθύνσεων (addressing modes), οι οποίοι να καθορίζουν τη σημασία τους, ή να βρίσκονται σε σταθερά πεδία.
Στις αρχιτεκτονικές πολύ μεγάλης λέξης εντολής (very long instruction word, VLIW), στις οποίες ανήκουν πολλές αρχιτεκτονικές μικροκώδικα, πολλοί ταυτόχρονοι κωδικοί και τελεστέοι ορίζονται μεμια μόνο εντολή.
Κάποια σπάνια σύνολα εντολών δεν έχουν πεδίο κωδικού (όπως οιTransport Triggered Architectures (TTA) ή η εικονική μηχανή της Forth), μόνο τελεστέους. Άλλα ασυνήθιστα σύνολα εντολών χωρίς τελεστέους ("0-operand") δεν έχουν πεδία γιατον ορισμό των τελεστέων, όπως κάποιες μηχανές στοίβας, για παράδειγμα ηNOSC[1].
Το μέγεθος ή μήκος μιας εντολής διαφέρει σημαντικά, από τέσσερα μπιτσε κάποιους μικροελεγκτέςσε εκατοντάδες μπιτσε κάποια συστήματα VLIW. Οι επεξεργαστές που χρησιμοποιούνται στους προσωπικούς υπολογιστές, στους μεγάλους υπολογιστές (mainframes), και στους υπερυπολογιστές έχουν μεγέθη εντολής που κυμαίνονται από τα 8 μέχρι τα 64 bit (ηπιο μεγάλη εντολή του x86 είναι 15 byte, δηλαδή 120 bit). Σε ένα σύνολο εντολών, διαφορετικές εντολές μπορεί να έχουν διαφορετικά μεγέθη. Σε κάποιες αρχιτεκτονικές, ειδικά στις RISC, οι εντολές έχουν σταθερό μήκος, συνήθως ίσο μετο μέγεθος λέξης της αρχιτεκτονικής. Σε άλλες αρχιτεκτονικές, οι εντολές έχουν μεταβαλλόμενο μήκος, συνήθως ακέραια πολλαπλάσια τουbyte ή μισής λέξης (halfword).
Οι εντολές που αποτελούν ένα πρόγραμμα σπάνια γράφονται μετην εσωτερική, αριθμητική τους μορφή. Ο προγραμματιστής συνήθως τις γράφει χρησιμοποιώντας συμβολική γλώσσα (assembly) ή, συχνότερα, παράγονται αυτόματα από έναν μεταγλωττιστή.
Η σχεδίαση ενός συνόλου εντολών είναι πολύπλοκο θέμα. Στην ιστορία των μικροεπεξεργαστών συναντώνται δύο προσεγγίσεις. Η πρώτη ήταν ηCISC (Complex Instruction Set Computer), η οποία είχε πολλές διαφορετικές εντολές. Κατά τη δεκαετία του 1970 όμως, εταιρείες όπως η IBM βρήκαν μετά από έρευνα ότι πολλές εντολές του συνόλου εντολών μπορούσαν να παραλειφθούν. Το αποτέλεσμα ήταν η αρχιτεκτονική RISC (Reduced Instruction Set Computer), η οποία χρησιμοποιεί μικρότερο σύνολο εντολών. Ένα απλούστερο σύνολο εντολών μπορεί να προσφέρει υψηλότερες ταχύτητες, μικρότερο μέγεθος μικροεπεξεργαστή και μειωμένη κατανάλωση ενέργειας. Ένα πιο πολύπλοκο σύνολο εντολών όμως μπορεί να εκτελεί αποδοτικά συχνές λειτουργίες, να εκμεταλλεύεται καλύτερα την μνήμη καιτην κρυφή μνήμη (cache) ή να απλοποιεί τον προγραμματισμό.
Οι εικονικές μηχανές μπορούν να υλοποιηθούν γρήγορα και εύκολα αν ένα σύνολο εντολών ικανοποιεί τις απαιτήσεις εικονικοποίησηςτων Πόπεκ και Γκόλντμπεργκ (Popek and Goldberg virtualization requirements).
Σε συστήματα με πολλούς επεξεργαστές οι αλγόριθμοι συγχρονισμού χωρίς αναμονή (non-blocking synchronization) είναι πιο εύκολο νε υλοποιηθούν αντο σύνολο εντολών υποστηρίζει κάποια λειτουργία του τύπου «φόρτωσε και αύξησε κατά ένα» ("fetch-and-increment") ή «φόρτωσε συνδεδεμένο/αποθήκευσε συνθήκη» ("load linked/store conditional", "LL/SC") ή «σύγκρινε και αντάλλαξε ατομικά» ("atomic compare and swap").
Κάθε σύνολο εντολών μπορεί να υλοποιηθεί με πολλούς τρόπους. Όλοι αυτοί οι τρόποι θα δώσουν το ίδιο προγραμματιστικό μοντέλο καιθα μπορούν να εκτελούν τα ίδια εκτελέσιμα δυαδικά προγράμματα. Οι διαφορετικοί τρόποι υλοποίησης όμως επηρεάζουν άλλες παραμέτρους όπως για παράδειγμα το κόστος, η ταχύτητα, η κατανάλωση ενέργειας ή το μέγεθος του μικροεπεξεργαστή.
Όταν σχεδιάζει τηνμικροαρχιτεκτονική ενός επεξεργαστή, ένας μηχανικός χρησιμοποιεί «μπλοκ» από έτοιμα κυκλώματα όπως οι αθροιστές, οι πολυπλέκτες, οι μετρητές, οι καταχωρητές, οι αριθμητικές και λογικές μονάδες, κ.α. Στη συνέχεια χρησιμοποιείται μιαγλώσσα μεταφοράς καταχωρητών (register transfer language) πουνα περιγράφει την αποκωδικοποίηση καιτην διάταξη για εκτέλεση κάθε εντολής του συνόλου εντολών, σε αυτήν την συγκεκριμένη μικροαρχιτεκτονική.
Υπάρχουν δύο βασικοί τρόποι να κατασκευαστεί μια μονάδα ελέγχου (control unit) πουνα υλοποιεί αυτήν την περιγραφή (ανκαι πολλές σχεδιάσεις δανείζονται στοιχεία και από τους δύο):
Οι πρώτες σχεδιάσεις υπολογιστών και κάποιοι από τους απλότερους υπολογιστές RISC υλοποιούσαν κατευθείαν με κυκλώματα την αποκωδικοποίηση καιτην διάταξη των εντολών (όπως υλοποιουσαν καιτην υπόλοιπη μικροαρχιτεκτονική).
Άλλες σχεδιάσεις χρησιμοπιούν ρουτίνες μικροκώδικα ή πίνακες για αυτόν τον σκοπό—συνήθως σαν ROM μέσα στοτσιπ ή σαν προγραμματιζόμενες λογικές συστοιχίες (Programmable Logic Arrays, PLA) ενώ στο παρελθόν είχαν χρησιμοποιηθεί και ξεχωριστές μνήμες RAM.
Υπάρχουν κάποιες νέες σχεδιάσεις επεξεργαστών που μεταγλωττίζουν τον σύνολο εντολών σεμια εγγράψιμη RAM ή μνήμη φλας μέσα στην κεντρική μονάδα επεξεργασίας (όπως ο επεξεργαστής Rekursiv καιο Imsys Cjip),[5] ή σε ένα FPGA (reconfigurable computing). Ένα παλαιότερο παράδειγμα είναι οMCP-1600 της Western Digital, ο οποίος χρησιμοποιεί μια ξεχωριστή ROM αποκλειστικά γιατον μικροκώδικα.
Μια αρχιτεκτονική συνόλου εντολών μπορεί να προσομοιωθεί σε λογισμικό από έναν διερμηνέα. Αυτό είναι πιο αργό σε σχέση μετην απευθείας εκτέλεση προγραμμάτων σε υλικό, λόγω της επιβάρυνσης της διερμηνείας, εκτός αντο υλικό που εκτελεί τον προσομοιωτή είναι πολύ γρηγορότερο. Σήμερα συχνά οι κατασκευαστές νέων αρχιτεκτονικών συνόλου εντολών παρέχουν προσομοιωτές λογισμικού στους προγραμματιστές πριννα είναι έτοιμη η υλοποίηση του υλικού.
Συχνά οι λεπτομέρειες της υλοποίησης επηρεάζουν την επιλογή των εντολών του συνόλου εντολών. Για παράδειγμα, πολλές υλοποιήσεις της σωλήνωσης εντολών (instruction pipeline) επιτρέπουν μόνο μια φόρτωση ή μια εγγραφή στη μνήμη ανά εντολή, με αποτέλεσμα να προκύπτει μια αρχιτεκτονική RISC τύπου φόρτωσης-αποθήκευσης (load-store architecture). Ένα άλλο παράδειγμα είναι οι πρώτοι τρόποι με τους οποίους υλοποιήθηκε η σωλήνωση εντολών με χρήση σχισμής καθυστέρησης (delay slot).
Οι απαιτήσεις της ψηφιακής επεξεργασίας σήματος υψηλής ταχύτητας αντίθετα πιέζουν γιατην υλοποίηση εντολών με συγκεκριμένο τρόπο. Για παράδειγμα, γιατην υλοποίηση γρήγορων ψηφιακών φίλτρων, η εντολή MAC σε έναν κλασικό ψηφιακό επεξεργαστή σήματος (DSP) πρέπει να υλοποιηθεί με χρήση κάποιου τύπου αρχιτεκτονικής Χάρβαρντπουνα μπορεί να φέρνει μια εντολή και δύο λέξεις δεδομένων ταυτόχρονα, καινα χρειάζεται έναν πολλαπλασιαστή πουνα πολλαπλασιάζει-αθροίζει σε έναν κύκλο.
Η μνήμη ήταν ακριβή στις πρώτους υπολογιστές με αποτέλεσμα τα προγράμματα να έπρεπε να είναι όσο πιο μικρά γινόταν ώστε να χωρούν στην περιορισμένη μνήμη καιτο συνολικό μέγεθος των εντολών που χρειάζονταν γιαμια λειτουργία, ηπυκνότητα κώδικα (code density), ήταν βασικό χαρακτηριστικό κάθε συνόλου εντολών. Οι υπολογιστές με υψηλή πυκνότητα κώδικα είχαν (και ακόμα έχουν) εντολές γιατην είσοδο σε διαδικασία (procedure entry), επιστροφή με παραμέτρους (parameterized return), δομές επανάληψης (loops) κλπ. (καιγια αυτό ονομάστηκαν εκτων υστέρων υπολογιστές σύνθετου συνόλου εντολών ή CISC). Συνήθως όμως οι εντολές "CISC" απλά συνδύαζαν μια βασική αριθμητική ή λογική λειτουργία μετην προσπέλαση ενός ή περισσότερων τελεστέων στη μνήμη (χρησιμοποιώντας διάφορους τρόπους σχηματισμού διευθύνσεων: άμεσο, έμμεσο, με δείκτη, κλπ.). Κάποιες αρχιτεκτονικές μπορεί να επιτρέπουν δύο ή τρεις τελεστέους (μαζί μετο αποτέλεσμα) από τη μνήμη ή μπορούν να εκτελούν λειτουργίες όπως η αυτόματη αύξηση δεικτών στη μνήμη κατά ένα. Τα σύνολα εντολών που υλοποιούνται σε λογισμικό μπορεί να έχουν ακόμα πιο σύνθετες και ισχυρές εντολές.
Οιυπολογιστές περιορισμένου συνόλου εντολών (RISC), αρχικά υλοποιήθηκαν σε μεγάλη κλίμακα στη διάρκεια μιας περιόδου πουτα υποσυστήματα μνήμης μεγάλωναν με γρήγορους ρυθμούς και θυσιάζουν την πυκνότητα κώδικα με σκοπό την απλοποίηση των κυκλωμάτων τους, ώστε να μπορούν να έχουν μεγαλύτερη συχνότητα και περισσότερους καταχωρητές και άρα να είναι πιο γρήγοροι. Οι εντολές RISC συχνά εκτελούν μόνο μια λειτουργία, όπως η πρόσθεση καταχωρητών ή η φόρτωση δεδομένων από μια θέση μνήμης σε έναν καταχωρητή ενώ συνήθως χρησιμοποιούν σταθερό μέγεθος εντολής, σε αντίθεση με ένα τυπικό σύνολο εντολών CISC που μπορεί να έχει εντολές μικρότερες από αυτό το σταθερό μήκος. Ο χειρισμός εντολών σταθερού μήκους είναι πιο εύκολος σε σχέση με τις εντολές μεταβλητού μήκους για διάφορους λόγους (για παράδειγμα δεν χρειάζεται να ελεγχθεί ανη εντολή χωράει σεμια γραμμή της κρυφής μνήμης ή αν ευθυγραμμίζεται μετο όριο μια σελίδας εικονικής μνήμης[6]), με αποτέλεσμα να είναι πιο εύκολο να βελτιστοποιηθεί για μεγαλύτερη ταχύτητα εκτέλεσης. Όμως, επειδή οι υπολογιστές RISC συνήθως χρειάζονται περισσότερες και μεγαλύτερες εντολές γιανα υλοποιήσουν μια λειτουργία, κάνουν λιγότερο καλή χρήση της διαμεταγωγής του διαύλου καιτων κρυφών μνημών.
Οιυπολογιστές μικρού συνόλου εντολών (MISC) είναι μηχανές στοίβας (stack machines), όπου υπάρχουν λίγες εντολές (16-64), με αποτέλεσμα πολλές εντολές να μπορούν να χωρέσουν σεμια λέξη μηχανής. Αυτοί οι επεξεργαστές χρειάζονται λιγότερο πυρίτιο γιατην υλοποίησή τους καιγια αυτό μπορούν να υλοποιηθούν σε μορφή FPGA ή πολυπύρηνων (multi-core) επεξεργαστών. Η πυκνότητα κώδικα μοιάζει με αυτήν των RISC καιη αυξημένη πυκνότητα εντολών εξισορροπείται από το γεγονός ότι χρειάζονται περισσότερες εντολές γιαμια λειτουργία.
Έχει γίνει επίσης έρευνα πάνω στην συμπίεση εκτελέσιμων (executable compression) γιατη βελτίωση της πυκνότητας κώδικας. Η μαθηματική θεωρία της πολυπλοκότητα Κολμογκόροβ (Kolmogorov complexity) περιγράφει τα ανοιχτά προβλήματα και τους περιορισμούς αυτής της προσέγγισης.
Τα σύνολα εντολών κατηγοριοποιούνται με βάση τον μέγιστο αριθμό τελεστέων που δηλώνονται ρητά στις εντολές τους.
(Στα παραδείγματα που ακολουθούν, ταa, b, καιc είναι (άμεσες ή υπολογισμένες) διευθύνσεις θέσεων μνήμης, ενώ ονόματα της μορφής reg1 αναφέρονται σε καταχωρητές του υπολογιστή.)
0 τελεστέων (υπολογιστές μηδέν διευθύνσεων, zero-address machines) ή μηχανές στοίβας (stack machines): Όλες οι αριθμητικές λειτουργίες χρησιμοποιούν το τελευταίο ή τα δύο τελευταία στοιχεία της στοίβας, και χρησιμοποιούνται εντολές ενός τελεστέου γιατην τοποθέτηση (push) καιτην αφαίρεση (pop) από τη στοίβα: push a, push b, add, pop c.
1 τελεστέου (υπολογιστές μιας διεύθυνσης, one-address machines) ή μηχανές συσσώρευσης (accumulator machines), που περιλαμβάνουν τις πρώτους υπολογιστές και πολλούς μικρούς μικροελεγκτές: οι περισσότερες εντολές έχουν μόνο έναν τελεστέο στα δεξιά (μια σταθερά, έναν καταχωρητή ή μια θέση μνήμης), θεωρώντας έμμεσα ότι ο συσσωρευτής (accumulator) είναι ο τελεστέος στα αριστερά (καθώς και επίσης ο προορισμός του αποτελέσματος, αν χρειάζεται κάποιος τέτοιος): loada, addb, storec. Με αυτήν την κατηγορία σχετίζονται καιοι μηχανές στοίβας που συχνά επιτρέπουν ρητά έναν τελεστέο σε αριθμητικές εντολές: push a, add b, pop c.
2 τελεστέων — πολλοί υπολογιστές CISC και RISC εντάσσονται σε αυτήν την κατηγορία:
CISC — όταν οι εντολές μπορούν να έχουν μόνο έναν τελεστέο μνήμης ανά εντολή, λειτουργούν με ακολουθίες εντολών της μορφής loada,reg1; addreg1,b; storereg1,c, ακόμα καιαν φορτώνουν και αποθηκεύουν στην ίδια θέση μνήμης
CISC — movea->c; addc+=b.
RISC — επειδή χρειάζεται ρητή φόρτωση από τη μνήμη, οι εντολές θα είναι: loada,reg1; loadb,reg2; addreg1,reg2; storereg2,c
3 τελεστέων, που επιτρέπουν την καλύτερη επαναχρησιμοποίηση των δεδομένων:[6]
CISC — είτε γίνεται η μοναδική εντολή adda,b,c, είτε (συνηθέστερα): movea,reg1; addreg1,b,c επειδή οι περισσότεροι υπολογιστές περιορίζονται σε δύο τελεστέους μνήμης.
RISC — οι αριθμητικές εντολές χρησιμοποιούν μόνο καταχωρητές επομένως χρειάζονται ρητές εντολές φόρτωσης/αποθήκευσης δύο τελεστέων: loada,reg1; loadb,reg2; addreg1+reg2->reg3; storereg3,c - σε αντίθεση με τις περιπτώσεις 2 και 1 τελεστέου, αυτό αφήνει σε καταχωρητές και τις τρεις τιμές a, b, και c[6].
περισσότερων τελεστέων—κάποιοι υπολογιστές CISC επιτρέπουν τη χρήση διάφορων τρόπων σχηματισμού διευθύνσεων, επιτρέποντας περισσότερους από 3 τελεστέους (καταχωρητές ή πρόσβαση στη μνήμη), όπως η εντολής πολυωνυμικής αποτίμησης "POLY" τουVAX.
Λόγω του μεγάλου αριθμού bit που χρειάζονται γιατην κωδικοποίηση των τριών καταχωρητών μιας εντολής 3 τελεστέων, οι επεξεργαστές RISC που χρησιμοποιούν εντολές 16-bit είναι μηχανές 2 τελεστέων, όπως ο Atmel AVR, οTI MSP430και κάποιες εκδόσεις τουARM Thumb.
Οι επεξεργαστές RISC που χρησιμοποιούν εντολές 32-bit είναι συνήθως μηχανές 3 τελεστέων, όπως οι επεξεργαστές που υλοποιούν την αρχιτεκτονική Power, την αρχιτεκτονική SPARC, την αρχιτεκτονική MIPS, τηναρχιτεκτονική ARMκαιτην αρχιτεκτονική AVR32.
Κάθε εντολή ορίζει ρητά έναν αριθμό τελεστέων (καταχωρητών, θέσεων μνήμης ή άμμεσων τιμών). Κάποιες εντολές δίνουν έναν ή και τους δύο τελεστέους έμμεσα, τοποθετώντας τους για παράδειγμα την κορυφή της στοίβας ή σε κάποιον καταχωρητή που εννοείται. Όταν κάποιοι τελεστέοι δίνονται έμμεσα, ο αριθμός των τελεστέων που ορίζονται σεμια εντολή είναι μικρότερος από τον αριθμό (arity) των ορισμάτων της λειτουργίας. Όταν δίνεται κάποιος «τελεστέος προορισμού», ο αριθμός των ορισμάτων σεμια εντολή είναι μεγαλύτερος από τον αριθμό των ορισμάτων της λειτουργίας. Κάποια σύνολα εντολών έχουν διαφορετικούς αριθμούς ορισμάτων για διαφορετικές εντολές.
Ο κατάλογος που ακολουθεί δεν είναι πλήρης, καθώς εξακολουθεί η ανάπτυξη των παλιών αρχιτεκτονικών και δημιουργούνται νέες αρχιτεκτονικές. Πολλοί μικροεπεξεργαστέςκαιμικροελεγκτέςπου είναι διαθέσιμοι στην αγορά υλοποιούν αρχιτεκτονικές συνόλου εντολών. Σε κάποιες εφαρμογές είναι συχνές καιοι εξειδικευμένες αρχιτεκτονικές συνόλου εντολών, όπως σταASIC, σταFPGAκαιστο πεδίο τουreconfigurable computing.
↑Randal E. Bryant and David R. O'Hallaron, (2010). Computer Systems: A Programmer's Perspective. Carnegie Mellon University. σελ. 160. ISBN978-0136108047.
↑Randal E. Bryant and David R. O'Hallaron, (2010). Computer Systems: A Programmer's Perspective. Carnegie Mellon University. σελ. 160. ISBN978-0136108047.
↑Randal E. Bryant and David R. O'Hallaron, (2010). Computer Systems: A Programmer's Perspective. Carnegie Mellon University. σελίδες 155–156. ISBN978-0136108047.