Προγραμματισμός σε επίπεδο μηχανής
Διομήδης Σπινέλλης
Τμήμα Διοικητικής Επιστήμης και Τεχνολογίας
Οικονομικό Πανεπιστήμιο Αθηνών
dds@aueb.gr
Οικογένειες επεξεργαστών
Οικογένειες επεξεργαστών
- IBM 360
- CDC 6600
- Digital PDP-11, VAX, Alpha
- Intel 4004, 8008, 8080, 8086, ..., Pentium
- Intel Itanium
- Motorola 68000
- MIPS
- SPARC
- Power PC
- ARM
Η αρχιτεκτονική εντολών ενός επεξεργαστή σχεδιάζεται γύρω από τους
παρακάτω άξονες:
- Που φυλάσσονται στον επεξεργαστή οι τελεστέοι όταν δεν προέρχονται
από τη μνήμη;
- Αριθμός ρητών τελεστέων (explicit operands) ανά εντολή
(0-3)
- Πόσοι από τους τελεστέους μπορεί να βρίσκονται στη μνήμη;
- Τι εντολές παρέχονται;
- Είδος και μέγεθος τελεστέων
Η οικογένεια επεξεργαστών iAPX86
- 8080 (1974, 4.500 τρανζίστορ, 8 bit, 2 MHz, ο πρόγονος)
- 8086/8088 (1978, 29.000 τρανζίστορ, 5-8 MHz, 16 bit)
- 80286 (1982, 134.000 τρανζίστορ, 6-12 MHz, 24 bit, προστατευμένος ρυθμός)
- 80386 (1985, 275.000 τρανζίστορ, 32 bit, 16-33 MHzm ιδεατή μνήμη)
- 80486 (1989, 1.2 εκ. τρανζίστορ, 25-50 MHz, απόδοση, μαθηματικός επεξεργαστής)
- Pentium (1993, 3.1 εκ. τρανζίστορ, 60-233 MHz, παράλληλη εκτέλεση εντολών)
- Pentium II (1997, 7.5 εκ. τρανζίστορ, 233-450MHz, δυναμική εκτέλεση εντολών, διπλός δίαυλος, εκτέλεση πολλαπλών ακέραιων δεδομένων (ΜΜΧ))
- Pentium III (1999, 28 εκ. τρανζίστορ, 450-1000MHz, εκτέλεση πολλαπλών δεδομένων κινητής υποδιαστολής)
- Pentium 4 (2000, 55 εκ. τρανζίστορ, 1.4 - 2.8 GHz, κρυφή μνήμη αποκωδικοποιημένων μικροεντολών)
Φωτογραφίες
Οι παρακάτω φωτογραφίες προέρχονται από το
δικτυακό τόπο της Intel (http://www.intel.com/intel/intelis/museum/exhibit/hist_micro/hof/hof_main.htm>).
Προσοχή, δεν είναι στην ίδια κλίμακα!
8080
8086/8088
80286
80486
Pentium
Pentium II
Pentium III
Pentium 4
Καταχωρητές
- Το μοντέλο καταχωρητών ειδικής χρήσης
- Καταχωρητές δεδομένων
- EAX (AX (AH/AL)): Συσσωρευτής (Accumulator)
- EBX (BX (BH/BL)): Βάση μνήμης
- ECX (DX (CH/CL)): Μετρητής
- EDX (DX (DH/DL)): Πολλαπλασιασμός, διαίρεση
- Καταχωρητές διευθύνσεων
- SP: (stack pointer) Δείκτης στοίβας (Stack pointer)
- BP: (base pointer) Βάση μνήμης
- SI: (source index) Δείκτης προέλευσης
- DI: (desination index) Δείκτης προορισμού
- Καταχωρητές τμημάτων μνήμης
- CS: (code segment) Τμήμα εντολών
- DS: (data segment) Τμήμα δεδομένων
- SS: (stack segment) Τμήμα στοίβας
- ES: (extra segment) Πρόσθετο τμήμα
- FS: (extra segment) Πρόσθετο τμήμα
- GS: (extra segment) Πρόσθετο τμήμα
- Καταχωρητές ελέγχου
Προσδιορισμός τελεστέων
Συνδιασμοί τελεστών:
- καταχωρητής, καταχωρητής (π.χ. ADD AX, BX)
- καταχωρητής, άμεσος (π.χ. SUB CX, 3)
- καταχωρητής, μνήμη (π.χ. ADD DX, [54 + SI])
- μνήμη, καταχωρητής (π.χ. SUB [54 + SI], AL)
- μνήμη, άμεσος (π.χ. MOV [12 + BP + SI], 45)
Ενδείκτης διακλάδωσης
- CF:
- (Carry flag)
Κρατούμενο (Carry):
1 αν η πράξη δημιούργησε κρατούμενο.
- ZF:
- (Zero flag)
Μηδέν:
1 αν το αποτέλεσμα της πράξης είναι 0.
- SF:
- (Sign flag)
Πρόσημο (sign)
1 αν το αποτέλεσμα είναι αρνητικός αριθμός.
- PF:
- (Parity flag)
Ισοτιμία
1 αν το αποτέλεσμα έχει μονό αριθμό από bit που είναι 1.
- OF:
- (Overflow flag)
Υπερχείλιση:
1 αν το αποτέλεσμα δε μπορεί να παρασταθεί ως θετικός η αρνητικός αριθμός.
Εντολές μεταφοράς δεδομένων
- MOV προορισμός, πηγή
- (Move)
Μεταφορά
προορισμός <- πηγή
- PUSH πηγή
- Μεταφορά στη στοίβα
SP <- SP - 2
[SP] <- πηγή
- POP προορισμός
- Μεταφορά από τη στοίβα
προορισμός <- [SP]
SP <- SP + 2
- XCHG προορισμός, πηγή
- (Exchange)
Εναλλαγή
προορισμός <- πηγή
πηγή <- προορισμός
(ταυτόχρονα)
Αριθμητικές εντολές
- ADD προορισμός, πηγή
- (Add)
Πρόσθεση
προορισμός <- προορισμός + πηγή
- INC προορισμός
- (Increment)
Αύξηση κατά ένα
προορισμός <- προορισμός + 1
- SUB προορισμός, πηγή
- (Subtract)
Αφαίρεση
προορισμός <- προορισμός - πηγή
- DEC προορισμός
- (Decrement)
Μείωση κατά ένα
προορισμός <- προορισμός - 1
- NEG προορισμός
- (Negate)
Αλλαγή προσήμου
προορισμός <- - προορισμός
- CMP προορισμός, πηγή
- (Compare)
Σύγκριση
Εκτελείται η πράξη προορισμός - πηγή και ενημερώνονται οι ενδείκτες
διακλάδωσης.
- MUL πηγή
- (Multiply)
Πολλαπλασιασμός
DX:AX <- AX * πηγή
- DIV πηγή
- (Divide)
Διαίρεση
AX <- AX / πηγή
DX <- AX mod πηγή
Εντολές δυαδικών ψηφίων
- AND προορισμός, πηγή
- Σύζευξη
προορισμός <- προορισμός & πηγή
- OR προορισμός, πηγή
- Διάζευξη
προορισμός <- προορισμός | πηγή
- XOR προορισμός, πηγή
- Αποκλειστική διάζευξη
προορισμός <- προορισμός ^ πηγή
- NOT προορισμός
- Αντιστροφή
προορισμός <- ~ προορισμός
- TEST προορισμός, πηγή
- Έλεγχος
- SHL προορισμός, αριθμός
- (Shift left)
Ολίσθηση (Shift) αριστερά
προορισμός <- προορισμός << πηγή
- SHR προορισμός, αριθμός
- (Shift right)
Ολίσθηση δεξιά
προορισμός <- προορισμός >> πηγή
- SAR προορισμός, αριθμός
- (Shift arithmetic right)
Αριθμητική ολίσθηση δεξιά
προορισμός <- προορισμός >> πηγή
- ROL προορισμός, αριθμός
- (Rotate left)
Περιστροφή αριστερά
- ROR προορισμός, αριθμός
- (Rotate right)
Περιστροφή δεξιά
Εντολές άλματος
- JMP προορισμός
- 'Αλμα
- CALL προορισμός
- Κλήση
- RET
- (Return)
Επιστροφή
- JA/JNBE προορισμός
- (Jump above)
'Αλμα αν μεγαλύτερο (χωρίς πρόσημο)
- JAE/JNB προορισμός
- (Jump above or equal)
'Αλμα αν μεγαλύτερο ή ίσο (χωρίς πρόσημο)
- JB/JNAE προορισμός
- (Jump bellow)
'Αλμα αν μικρότερο (χωρίς πρόσημο)
- JBE/JNA προορισμός
- (Jump below or equal)
'Αλμα αν μικρότερο ή ίσο (χωρίς πρόσημο)
- JC προορισμός
- (Jump carry)
'Αλμα αν κρατούμενο
- JNC προορισμός
- (Jump no carry)
'Αλμα αν όχι κρατούμενο
- JE/JZ προορισμός
- (Jump equal)
'Αλμα αν ίσο
- JNE/JNZ προορισμός
- (Jump not equal)
'Αλμα αν όχι ίσο
- JG/JNLE προορισμός
- (Jump greater)
'Αλμα αν μεγαλύτερο (με πρόσημο)
- JGE/JNL προορισμός
- (Jump greater or equal)
'Αλμα αν μεγαλύτερο ή ίσο (με πρόσημο)
- JL/JNGE προορισμός
- (Jump less)
'Αλμα αν μικρότερο (με πρόσημο)
- JLE/JNG προορισμός
- (Jump less or equal)
'Αλμα αν μικρότερο ή ίσο (με πρόσημο)
- JO προορισμός
- (Jump overflow)
'Αλμα αν υπερχείλιση
- JNO προορισμός
- (Jump no overflow)
'Αλμα αν όχι υπερχείλιση
- JS προορισμός
- (Jump sign)
'Αλμα αν πρόσημο
- JNS προορισμός
- (Jump no sign)
'Αλμα αν όχι πρόσημο
Παράσταση εντολών
- Δυαδική παράσταση: 01000011
- Δεκαεξαδική παράσταση: 43
- Συμβολική παράσταση: INC BX
Κωδικοποίηση εντολών σε επεξεργαστές της Intel
Βασική κωδικοποίηση εντολών
Κωδικοποίηση εντολών ενός byte
Το byte ModR/M προσδιορίζει τις διευθύνσεις των
εντολών
Το byte SIB (scale, index, base) επιτρέπει
τον ορθόγωνο προσδιορισμό κλίμακας, δείκτη και βάσης.
Βιβλιογραφία
- Les Goldschlager και Andrew Lister
Εισαγωγή στη σύγχρονη επιστήμη των υπολογιστών. Ενότητα 4.5
Εκδόσεις Δίαυλος 1994.
- Andrew S. Tanenbaum
Η αρχιτεκτονική των υπολογιστών: μια δομημένη προσέγγιση.
Τρίτη αμερικάνικη έκδοση. σ. 273-368, 467-502. Κλειδάριθμος 1995.
- Εμμ. Σ. Σκορδαλάκης.
Εισαγωγή στους Μεταγλωττιστές σ. 172-180, 246.
Συμμετρία 1993.
- Alfred V. Aho, Ravi Sethi,
and Jeffrey D. Ullman.
Compilers, Principles, Techniques, and Tools, pages 519–520.
Addison-Wesley, 1985.
- J. Glenn Brookshear.
Computer Science, pages 85–107.
Addison-Wesley, sixth edition, 2000.
- Dawson R. Engler and
Wilson C. Hsieh.
DERIVE: A tool that automatically reverse-engineers instruction encodings.
In Proceedings of the ACM SIGPLAN Workshop on Dynamic and Adaptive
Compilation and Optimization (Dynamo '00), pages 12–22. ACM Press,
July 2000.
ACM SIGPLAN Notices 35(7).
- Free Software Foundation.
Using as, 1999.
http://www.gnu.org/manual/gas-2.9.1/.
- John L. Hennessy
and David A. Patterson.
Computer Architecture: A Quantitative Approach, pages 89–197.
Morgan Kaufmann Publishers, second edition, 1996.
- Intel Corporation.
The
Intel Architecture Software Developer's Manual, Volume 1: Basic
Architecture, 1999.
http://www.intel.com/design/PentiumII/manuals/243190.htm.
- Intel Corporation.
Intel
Architecture Software Developer's Manual, Volume 2: Instruction Set Reference
Manual, 1999.
http://www.intel.com/design/PentiumII/manuals/243190.htm.
Ασκήσεις
- Γράψτε σε συμβολική γλώσσα σειρά εντολών που να θέτουν τις διευθύνσεις
από 1000 - 2000 σε 0.
- Γράψτε σε συμβολική γλώσσα σειρά εντολών που να αποθηκεύουν στις
διευθύνσεις από 1000 - 1200 τους άρτιους αριθμούς από 0 - 400.
- Γράψτε σε συμβολική γλώσσα σειρά εντολών που να μεταφέρουν τα
περιεχόμενα των διευθύνσεων από 1000 - 2000 στην περιοχή 4000.
- Υπολογίστε πόσες εντολές θα εκτελεστούν για την παραπάνω διαδικασία.
- Αν ο υπολογιστής εργάζεται με ρολόι 1.5GHz και εκτελεί μια εντολή
κάθε δύο κύκλους του ρολογιού σε πόσο χρόνο θα εκτελεστεί η παραπάνω
διαδικασία;
- Περιγράψτε πως εκτελείται από την ΚΜΕ η εντολή SUB [1234+BX+SI], CX.
Εργαστηριακές ασκήσεις
1. Αθροίζοντας αριθμούς
- Ανοίξτε παράθυρο εντολών (run - command) ή φορτώστε το λειτουργικό σύστημα MS-DOS
- Δώστε την εντολή debug
C:>debug
- Δώστε την εντολή Α (assemble)
-a
- Γράψτε τις συμβολικές εντολές (mov ax, 0) κλπ.
Οι διευθύνσεις μνήμης εμφανίζονται μόνες τους.
Τα σχόλια που ακολουθούν το ; δε χρειάζεται να γραφούν.
0C20:0100 mov ax,0 ; Βάλε (move) στον καταχωρητή ΑΧ την τιμή 0
0C20:0103 mov bx,0 ; Βάλε (move) στον καταχωρητή ΒΧ την τιμή 0
0C20:0106 add bx, ax ; Πρόσθεσε στον ΒΧ τον ΑΧ
0C20:0108 inc ax ; Αύξησε (increment) τον ΑΧ κατά 1
0C20:0109 cmp ax, a ; Σύγκρινε (compare) τον ΑΧ με το 10
0C20:010C jbe 106 ; 'Αλμα αν το αποτέλεσμα είναι μικρότερο ή ίσο (jump below or equal) στη διεύθυνση 106
0C20:010E int 3 ; Διακοπή της λειτουργίας
0C20:010F ; Πατήστε ENTER εδώ
- Δείτε την κωδικοποίηση των εντολών με την εντολή U (unassemble):
-u100
Διεύθυνση Κωδικοποίηση Συμβολική εντολή
0C20:0100 B80000 MOV AX,0000
0C20:0103 BB0000 MOV BX,0000
0C20:0106 01C3 ADD BX,AX
0C20:0108 40 INC AX
0C20:0109 3D0A00 CMP AX,000A
0C20:010C 76F8 JBE 0106
0C20:010E CC INT 3
- Εκτελέστε το πρόγραμμά σας και εξετάστε το αποτέλεσμα στον καταχωρητή ΒΧ.
Είναι αυτό που περιμένατε;
-g=100
AX=000B BX=0037 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0C20 ES=0C20 SS=0C20 CS=0C20 IP=010E NV UP EI PL NZ NA PO NC
0C20:010E CC INT 3
- Εκτελέστε το πρόγραμμά σας βήμα βήμα με την εντολή T (trace):
-t=100
AX=0000 BX=0000 CX=0000 DX=0080 SP=FFEE BP=0000 SI=0000 DI=0000
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Καταχωρητές
DS=0C1C ES=0C1C SS=0C1C CS=0C1C IP=0103 NV UP EI PL ZR NA PE NC
^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^
| Ενδείκτες διακλάδωσης
Μετρητής προγράμματος
0C1C:0103 BB0000 MOV BX,0000
^^^^ ^^^^^^^^^^^^^^^
Διεύθυνση μνήμης Επόμενη εντολή που θα εκτελεστεί
-t
AX=0000 BX=0000 CX=0000 DX=0080 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0C1C ES=0C1C SS=0C1C CS=0C1C IP=0106 NV UP EI PL ZR NA PE NC
0C1C:0106 01D8 ADD AX,BX
-t
AX=0000 BX=0000 CX=0000 DX=0080 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0C1C ES=0C1C SS=0C1C CS=0C1C IP=0108 NV UP EI PL ZR NA PE NC
0C1C:0108 40 INC AX
-t
AX=0001 BX=0000 CX=0000 DX=0080 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0C1C ES=0C1C SS=0C1C CS=0C1C IP=0109 NV UP EI PL NZ NA PO NC
0C1C:0109 3D0A00 CMP AX,000A
-t
AX=0001 BX=0000 CX=0000 DX=0080 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0C1C ES=0C1C SS=0C1C CS=0C1C IP=010C NV UP EI NG NZ AC PO CY
0C1C:010C 76F8 JBE 0106
-t
AX=0001 BX=0000 CX=0000 DX=0080 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0C1C ES=0C1C SS=0C1C CS=0C1C IP=0106 NV UP EI NG NZ AC PO CY
0C1C:0106 01D8 ADD AX,BX
...
- Αυξήστε το όριο της άθροισης από 10 σε 100:
-a109
0C20:0109 cmp ax, 64 ; Σύγκρινε τον καταχωρητή ΑΧ με το 100
0C20:010C ; Πατήστε ENTER εδώ
-g=100
- Εκτελέστε το πρόγραμμά σας και εξετάστε το αποτέλεσμα στον καταχωρητή ΒΧ.
Είναι αυτό που περιμένατε;
AX=0065 BX=13BA CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0C20 ES=0C20 SS=0C20 CS=0C20 IP=010E NV UP EI PL NZ NA PO NC
0C20:010E CC INT 3
- Βγήτε από το πρόγραμμα debug
-q
C:>
2. Εμφάνιση των χαρακτήρων του πίνακα ASCII
- Γράψτε το πρόγραμμα:
C:\>debug
-a
0C1C:0100 mov dl,20 ; Πρώτος χαρακτήρας ASCII (το κενό)
0C1C:0102 mov ah,2 ; Εντολή για εμφάνιση του χαρακτήρα στην οθόνη
0C1C:0104 int 21 ; Εκτέλεση της εντολής του DOS
0C1C:0106 add dl,1 ; Αύξησε το χαρακτήρα κατά 1
0C1C:0109 cmp dl,80 ; Είναι ο τελευταίος; (128)
0C1C:010C jne 102 ; Αν όχι πήγαινε στη διεύθυνση 102 (jump not equal)
0C1C:010E int 3 ; Διακοπή του προγράμματος
0C1C:010F ; Πατήστε ENTER εδώ
- Δείτε την κωδικοποίηση των εντολών με την εντολή U (unassemble):
-u100
0C1C:0100 B220 MOV DL,20
0C1C:0102 B402 MOV AH,02
0C1C:0104 CD21 INT 21
0C1C:0106 80C201 ADD DL,01
0C1C:0109 80FA80 CMP DL,80
0C1C:010C 75F4 JNZ 0102
0C1C:010E CC INT 3
- Εκτελέστε το πρόγραμμά σας και δείτε το αποτέλεσμα στην οθόνη σας.
-g=100
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmno
pqrstuvwxyz{|}~¦
AX=027F BX=0000 CX=0000 DX=0080 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0C1C ES=0C1C SS=0C1C CS=0C1C IP=010E NV UP EI PL ZR NA PE NC
0C1C:010E CC INT 3
3. Συνεχίζοντας
Δοκιμάστε να γράψετε και να εκτελέσετε και άλλα μικρά προγράμματα ή
παραλλαγές αυτών που γράψατε.
Παράδειγμα κύκλου εντολών
Το πρόγραμμα
Διεύθυνση Κωδικός εντολής Συμβολική παράσταση εντολής
0100 B80100 MOV AX,0001
0103 050400 ADD AX,0004
0106 A31000 MOV [0010],AX
0109 3D0500 CMP AX,0000
010C 74F2 JZ 0100
Ο κύκλος των εντολών (επανάληψη)
- Ανάκληση εντολής (Instruction fetch)
- ΚΔιΜ <- ΜΠ
- ΚΕ <- Μνήμη[ΚΔιΜ]
- Αποκωδικοποίηση εντολής (Instruction decode)
- Α <- ΓΚ1
- Β <- ΓΚ2
- ΜΕ <- ΜΕ + 1
- Εκτέλεση εντολής (Instruction execution)
- ΚΔιΜ <- Α + ΚΕ, ΚΔεΜ <- ΓΚι (για εντολές πρόσβασης στη μνήμη)
- Γ <- Α * Β (για αριθμητικές εντολές)
- Γ <- ΜΠ + ΚΕ (έλεγχος τιμής από ΜΑΛ) (για εντολές διακλάδωσης)
- Πρόσβαση μνήμης (Memory access)
- ΚΔεΜ <- Μ[ΚΔιΜ] ή Μ[ΚΔιΜ] <- ΚΔεΜ
- ΜΠ <- Γ (για εντολές διακλάδωσης)
- Εγγραφή
Ο τρόπος που θα εκτελεστούν οι παραπάνω εντολές από την ΚΜΕ
σύμφωνα με το κύκλο των εντολών είναι ο εξής:
0100 B80100 MOV AX,0001
| ΜΠ | ΚΔιΜ | ΚΔεΜ | ΚΕ | ΑΧ | Α | B | Γ |
Ανάκληση | 100 | 100 | - | B80100 | - | - | - | - |
Αποκωδικοποίηση | 103 | 100 | - | B80100 | - | 0001 | - | - |
Εκτέλεση | 103 | 100 | - | B80100 | - | 0001 | - | 0001 |
Εγγραφή | 103 | 100 | - | B80100 | 0001 | 0001 | - | 0001 |
0103 050400 ADD AX,0004
| ΜΠ | ΚΔιΜ | ΚΔεΜ | ΚΕ | ΑΧ | Α | B | Γ |
Ανάκληση | 103 | 103 | - | 050400 | 0001 | - | - | - |
Αποκωδικοποίηση | 106 | 103 | - | 050400 | 0001 | 0001 | 0004 | - |
Εκτέλεση | 106 | 103 | - | 050400 | 0001 | 0001 | 0004 | 0005 |
Εγγραφή | 106 | 103 | - | 050400 | 0005 | 0001 | 0004 | 0005 |
0106 A31000 MOV [0010],AX
| ΜΠ | ΚΔιΜ | ΚΔεΜ | ΚΕ | ΑΧ | Α | B | Γ |
Ανάκληση | 106 | 106 | - | A31000 | 0005 | - | - | - |
Αποκωδικοποίηση | 109 | 106 | - | A31000 | 0005 | 0000 | 0010 | - |
Εκτέλεση | 109 | 0010 | 0005 | A31000 | 0005 | 0000 | 0010 | 0010 |
Πρόσβαση μνήμης | 109 | 0010 | 0005 | A31000 | 0005 | 0000 | 0010 | 0010 |
0109 3D0500 CMP AX,0005
| ΜΠ | ΚΔιΜ | ΚΔεΜ | ΚΕ | ΑΧ | Α | B | Γ |
Ανάκληση | 109 | 109 | - | 3D0500 | 0005 | - | - | - |
Αποκωδικοποίηση | 10C | 109 | - | 3D0500 | 0005 | 0005 | 0005 | - |
Εκτέλεση | 10C | 109 | - | 3D0500 | 0005 | 0005 | 0005 | 0000 |
010C 74F2 JZ 0100
| ΜΠ | ΚΔιΜ | ΚΔεΜ | ΚΕ | ΑΧ | Α | B | Γ |
Ανάκληση | 10C | 10C | - | 74F2 | 0005 | - | - | - |
Αποκωδικοποίηση | 10E | 10C | - | 74F2 | 0005 | 010E | FFF2 | - |
Εκτέλεση | 10E | 10C | 0005 | 74F2 | 0005 | 010E | FFF2 | 0100 |
Πρόσβαση μνήμης | 100 | 10C | 0005 | 74F2 | 0005 | 010E | FFF2 | 0010 |