Προγραμματισμός σε επίπεδο μηχανής
Διομήδης Σπινέλλης
Τμήμα Διοικητικής Επιστήμης και Τεχνολογίας
Οικονομικό Πανεπιστήμιο Αθηνών
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 |