1. ΑΡΧΙΤΕΚΤΟΝΙΚΗ ΤΟΥ Μ/Ε 6502 - ΕΣΩΤΕΡΙΚΟΙ ΚΑΤΑΧΩΡΗΤΕΣ Ο 8-bit µ/ε 6502 είναι ένα ολοκληρωµένο κύκλωµα (LSI) µε 40 ακροδέκτες από τους οποίους οι 16 αντιστοιχούν σε γραµµές διευθύνσεων (Α 0 - Α 15 ) και οι 8 σε γραµµές δεδοµένων (D o - D 7 ). Για τις γραµµές του δίαυλου ελέγχου (Control Bus) διαθέτει 10 ακροδέκτες και άλλους 3 για την τροφοδοσία του. Οι υπόλοιποι 3 ακροδέκτες δεν χρησιµοποιούνται (Non Connected - NC). ιάταξη ακροδεκτών στις 2 συσκευασίες του 6502 Χρησιµοποιήθηκε για πρώτη φορά στη σειρά APPLE I & II και έκτοτε χρησιµοποιήθηκε σε διάφορα άλλα συστήµατα όπως οι BBC, UNITRON κ.α. καθώς και σε βιοµηχανικές εφαρµογές. Κατασκευάστηκε από αρκετές εταιρίες και η αρχιτεκτονική του είναι παρόµοια µε αυτή του 6800 της Motorola. Χρησιµοποιεί 8- bit data bus, 16-bit address bus και ένα ενιαίο bus για την µνήµη και το I/O. Ο χώρος διευθύνσεων (Address Space) του 6502 είναι 64 ΚΒ και χωρίζεται σε 256 σελίδες, κάθε µια από τις οποίες περιλαµβάνει 256 θέσεις µνήµης. Η πρώτη σελίδα µνήµης καταλαµβάνει τις διευθύνσεις $0000-$00FF, ονοµάζεται Zero Page και έχει ιδιαίτερη σηµασία στον προγραµµατισµό του 6502 καθώς υπάρχουν ειδικοί τρόποι διευθυνσιοδότησης για την σελίδα αυτή οι οποίοι επιταχύνουν την πρόσβαση στη µνήµη. Επίσης, ειδική σηµασία έχει και η επόµενη σελίδα µε διευθύνσεις $0100-$01FF η οποία αποτελεί τον Σωρό (Stack), µια περιοχή µνήµης µε ειδικές εντολές και έναν καταχωρητή αφιερωµένο σ' αυτή, για 1
γρήγορη πρόσβαση. Οι υπόλοιπες 254 σελίδες µνήµης είναι ισοδύναµες και διαθέσιµες στον προγραµµατιστή για αποθήκευση προγραµµάτων και δεδοµένων. Ο 6502 διαθέτει ένα σύνολο καταχωρητών (registers) διαθέσιµων στον προγραµµατιστή. Στη συνέχεια θα εξετάσουµε τους καταχωρητές αυτούς. b 7 b 0 Accumulator A 1. Συσσωρευτής Α (Accumulator A) (Συσσωρευτής) b 7 b 0 Index Register X (Καταχωρητής δείκτη Χ) b 7 b 0 Index Register Υ (Καταχωρητής δείκτη Υ) b 15 b 7 b 0 Program Counter PC (Απαριθµητής προγράµµατος) b 8 b 7 b 0 Stack Pointer 1 ( είκτης σωρού) b 7 b 0 Status Register (Καταχωρητής Κατάστασης) Οι καταχωρητές του 6502 1. Συσσωρευτής Α (Accumulator A) Ο συσσωρευτής έχει µήκος 8 bit και είναι ο πιο σηµαντικός καταχωρητής της CPU. Χρησιµεύει σαν 'ενδιάµεσος' για την εκτέλεση των λογικών και αριθµητικών πράξεων από την Αριθµητική-Λογική Μονάδα (ALU). Περιέχει ένα τµήµα των δεδοµένων που πρόκειται να επεξεργαστεί η Αριθµητική-Λογική Μονάδα και είναι αποδέκτης του αποτελέσµατος της αριθµητικής ή λογικής πράξης. Ας δούµε για παράδειγµα το ρόλο του στην εντολή της πρόσθεσης : CPU ADC $1000 ; { Πρόσθεσε στο συσσωρευτή Α το περιεχόµενο της θέσης $1000 } ΜΝΗΜΗ.. LDA $3000 STA $4000 $3000 C A... A $4000 Χρήση του συσσωρευτή Α για ανταλλαγή πληροφοριών µεταξύ CPU και µνήµης 2
Ας υποθέσουµε ότι πριν την εκτέλεση της εντολής ο Α περιέχει τον αριθµό $13 και η θέση µνήµης $1000 τον αριθµό $2C. Η ALU θα προσθέσει το περιεχόµενο του συσσωρευτή A ($13) µε το περιεχόµενο της θέσης $1000 ($2C) και το αποτέλεσµα ($13 + $2C = $3F) θα καταχωρηθεί πάλι στο συσσωρευτή. Ο συσσωρευτής Α χρησιµεύει επίσης για την ανταλλαγή πληροφοριών ανάµεσα στη µνήµη και την CPU, µέσω των εντολών LDA και STA. 2. Καταχωρητής δείκτη Χ - Καταχωρητής δείκτη Υ (Index Register X - Index Register Y) Οι καταχωρητές δείκτη Χ και Υ έχουν εύρος 8 bit και χρησιµεύουν είτε για την ανταλλαγή πληροφοριών ανάµεσα στη CPU και τη µνήµη, είτε σαν απαριθµητές (counters) για τη δηµιουργία βρόχων (loops) ή χρονικών καθυστερήσεων (delay subroutines), είτε για να απλοποιήσουν τη διαδικασία προσπέλασης σε διαδοχικές θέσεις µνήµης (χειρισµό πινάκων κλπ). 3. Απαριθµητής προγράµµατος (Program Counter - PC) Ο καταχωρητής αυτός έχει εύρος 16 bit και το περιεχόµενό του αυξάνεται αυτόµατα έτσι ώστε στο τέλος κάθε εντολής να δείχνει τη διεύθυνση του κωδικού της επόµενης εντολής που πρέπει να ανακληθεί από τη µνήµη και να εκτελεστεί. 4. είκτης σωρού (Stack Pointer - SP) Ο σωρός (Stack) είναι µια περιοχή της κεντρικής µνήµης που χρησιµεύει, κυρίως, για την προσωρινή αποθήκευση του απαριθµητή προγράµµατος (PC) ή των εσωτερικών καταχωρητών της CPU όταν καλείται µια υπορουτίνα (subroutine) ή όταν πρόκειται να εξυπηρετηθεί µια αίτηση διακοπής (interrupt). Χρησιµοποιείται, επίσης, για την αποθήκευση ενδιάµεσων αποτελεσµάτων ή δεδοµένων. Στον µ/ε 6502, όπως έχει ήδη αναφερθεί, ο σωρός καταλαµβάνει την δεύτερη σελίδα της κεντρικής µνήµης ($0100-$01FF, πρώτη σελίδα στην ορολογία του 6502 αφού η αρίθµηση των σελίδων ξεκινά από το 0) και έχει οργάνωση LIFO (Last In First Out), δηλαδή η πληροφορία που καταχωρείται τελευταία στο σωρό ανακτάται πρώτη. Η καταχώρηση και η ανάκτηση των πληροφοριών από το σωρό γίνεται µε 4 ειδικές εντολές του 1 byte, τις PHA, PLA, PHP, PLP. Ο δείκτης σωρού (SP) είναι ένας καταχωρητής εύρους 8 bit (στην πραγµατικότητα 9 bit µε το 9 o bit να είναι πάντα 1) που δείχνει πάντα τη διεύθυνση της 'κορυφής' του σωρού, δηλαδή τη διεύθυνση της επόµενης θέσης µνήµης που είναι διαθέσιµη για την καταχώρηση πληροφορίας του 1 byte. Είναι προφανές ότι ο δείκτης σωρού µπορεί να παίρνει τιµές στην περιοχή $00-$FF, περιέχει δηλαδή πάντα το χαµηλό τµήµα (ADL) µιας διεύθυνσης της δεύτερης (πρώτης) σελίδας. Με την καταχώρηση στο σωρό κάθε 3
πληροφορίας του 1 byte το περιεχόµενο του SP ελαττώνεται αυτόµατα κατά 1 ενώ µε την ανάκτηση (λήψη) πληροφορίας του 1 byte αυξάνεται κατά 1. 5. Καταχωρητής κατάστασης (Status Register, P) Ο καταχωρητής κατάστασης διαθέτει 8 bit από τα οποία χρησιµοποιούνται µόνο τα 7 καθώς το b 5 έχει πάντα την τιµή 1. Από τα υπόλοιπα bit, τα 5 παρέχουν πληροφορίες σχετικές µε το αποτέλεσµα της τελευταίας εντολής που εκτελέσθηκε, ενώ τα άλλα 2 αντιστοιχούν σε σήµατα ελέγχου. Τα bit του καταχωρητή κατάστασης αναφέρονται συνήθως σαν ενδείκτες (flags). Στη συνέχεια θα αναφερθούµε στα flags αυτά. b 7 b 6 b 5 b 4 b 3 b 2 b 1 b 0 N V 1 B D I Z C Carry 1=True Zero 1=Αποτέλεσµα 0 Interrupt 1=Disable Decimal Mode 1=True Break 1=Break Overflow Negative 1=True 1=Negative Ο καταχωρητής κατάστασης του µ/ε 6502 Carry flag (Ενδείκτης κρατουµένου) Γίνεται 1 όταν προκύπτει κρατούµενο από την εκτέλεση της εντολής της πρόσθεσης ενώ γίνεται 0 όταν προκύπτει κρατούµενο από την εντολή της αφαίρεσης. Επηρεάζεται, επίσης, από εντολές σύγκρισης, ολίσθησης και περιστροφής. Η τιµή του µπορεί να τροποποιηθεί από τον προγραµµατιστή µε τις εντολές CLC (Clear Carry, C=0) και SEC (Set Carry, C=1). Zero flag (Ενδείκτης µηδενικού αποτελέσµατος) Γίνεται 1 όταν η εντολή που εκτελείται έχει σαν αποτέλεσµα το µηδενισµό του περιεχοµένου κάποιου καταχωρητή της CPU (A, X, Y, SP) Interrupt flag (Ενδείκτης αίτησης διακοπής) Επιτρέπει (όταν I=0) ή απαγορεύει (όταν I=1) την εξυπηρέτηση µιας εξωτερικής αίτησης διακοπής (Interrupt request). Decimal flag (Ενδείκτης δεκαδικής λειτουργίας) Ρυθµίζει τη δυαδική (όταν D=0) ή δεκαδική (όταν D=1) λειτουργία των εντολών της πρόσθεσης (ADC) και της αφαίρεσης (SBC). Break flag (Ενδείκτης εντολής Break) Γίνεται 1 µετά την εκτέλεση της εντολής BRK. Overflow flag (Ενδείκτης υπερχείλισης) 4
Γίνεται 1 όταν το αποτέλεσµα της πρόσθεσης ή της αφαίρεσης 2 προσηµασµένων αριθµών του 1 byte, µε το σύστηµα του συµπληρώµατος 'ως προς 2' (2's complement), είναι µεγαλύτερο από +127 ($7F) ή µικρότερο από -128 ($80). Negative flag (Ενδείκτης αρνητικού αποτελέσµατος) Γίνεται 1 όταν το περιεχόµενο του συσσωρευτή Α ή του καταχωρητή δείκτη (X ή Υ) είναι αρνητικός αριθµός, στη µορφή του συµπληρώµατος 'ως προς 2'. Πρακτικά, ο ενδείκτης N γίνεται 1 όταν το b 7 του περιεχοµένου του καταχωρητή είναι 1. 5
2. DATA SHEETS ΤΟΥ Μ/Ε 6502 Στις επόµενες σελίδες παραθέτουµε ορισµένα data sheets που αφορούν τον 6502 και αναφέρονται στο Block διάγραµµα των µονάδων στο εσωτερικό του, την επεξήγηση των σηµάτων ελέγχου του µ/ε, τα AC και DC χαρακτηριστικά του καθώς και τις κανονικές και µέγιστες τάσεις και θερµοκρασίες λειτουργίας. Σκοπός της παράθεσης των στοιχείων αυτών είναι η εξοικείωση των σπουδαστών µε τα data sheets, τα οποία θα είναι ο βασικός οδηγός τους κατά τη σχεδίαση συστηµάτων, καθώς και µια πρώτη επαφή µε τα φυσικά χαρακτηριστικά του συγκεκριµένου µ/ε. 6
7
8
9
10
11
12
13
14
15
3. ΤΟ ΣΕΤ ΕΝΤΟΛΩΝ (INSTRUCTION SET) ΤΟΥ 6502 Mnemonic Λειτουργία Mnemonic Λειτουργία ADC Πρόσθεσε µνήµη και συσσωρευτή µε κρατούµενο και βάλε το άθροισµα στο συσσωρευτή JMP Κάνε άλµα χωρίς συνθήκη σε νέα διεύθυνση JSR Κάνε άλµα σε υπορουτίνα AND Κάνε λογικό AND µεταξύ των bits µνήµης και του συσσωρευτή LDA Φόρτωσε στον συσσωρευτή περιεχόµενο µ νήµης ASL BCC BCS Μετατόπισε µια θέση αριστερά τα bit (µνήµης ή συσσωρευτή) Κάνε διακλάδωση όταν το κρατούµενο είναι 0 (C=0) Κάνε διακλάδωση όταν το κρατούµενο είναι 1 (C=1) LDX LDY LSR Φόρτωσε στον Χ περιεχόµενο µνήµης Φόρτωσε στον Υ περιεχόµενο µνήµης Ολίσθησε 1 bit δεξιά συσσωρευτή ή µνήµη BEQ BIT Κάνε διακλάδωση όταν αποτέλεσµα είναι 0 (Z=1) Συγκρίνει bits στην µνήµη µε τον συσσωρευτή NOP Καµία ενέργεια BMI BNE Κάνε διακλάδωση όταν αποτέλεσµα είναι <0 (Ν=1) Κάνε διακλάδωση όταν αποτέλεσµα είναι <> 0 (Z=0) ORA Κάνε OR τη µνήµη µε τον συσσωρευτή BPL BRK BVC BVS Κάνε διακλάδωση όταν αποτέλεσµα είναι >0 (Ν=0) Τέλος προγράµµατος Κάνε διακλάδωση όταν η υπερχείλιση είναι 0 (V=0) Κάνε διακλάδωση όταν η υπερχείλιση είναι 1 (V=1) PHA PHP PLA PLP Βάλε το συσσωρευτή στο σωρό Βάλε καταχωρητή κατάστασης στο σωρό Ανέσυρε το συσσωρευτή από το σωρό Ανέσυρε καταχωρητή κατάστασης από το σωρό CLC CLD CLI CLV CMP Κάνε 0 το bit κρατουµένου του καταχ. κατάστασης ιακοπή δεκαδικής λειτουργίας Κάνε 0 το interrupt bit του καταχ. κατάστασης Κάνε 0 το bit υπερχείλισης του καταχ. κατάστασης Σύγκρινε µνήµη µε συσσωρευτή ROL ROR RTI RTS Περιστροφή 1 bit αριστερά συσσωρ. ή µνήµης Περιστροφή 1 bit δεξιά συσσωρ. ή µνήµης Επιστροφή από interrupt Επιστροφή από υπορουτίνα CPX CPY Σύγκρινε µνήµη µε καταχωρητή Χ Σύγκρινε µνήµη µε καταχωρητή Υ SBC SEC Αφαίρεσε µνήµη από συσσωρευτή µε 'δανεικό' Κάνε 1 το bit κρατουµένου του καταχ. κατάστασης DEC DEX DEY Μείωσε περιεχόµενο µνήµης κατά 1 Μείωσε περιεχόµενο καταχωρητή Χ κατά 1 Μείωσε περιεχόµενο καταχωρητή Υ κατά 1 SED SEI STA STX Έναρξη δεκαδικής λειτουργίας Κάνε 1 το interrupt bit του καταχ. κατάστασης Αποθήκευσε συσσωρευτή στη µνήµη Αποθήκευσε καταχωρητή X στη µνήµη EOR Κάνε XOR µεταξύ συσσωρευτή και µνήµης STY Αποθήκευσε καταχωρητή Υ στη µνήµη INC INX INY Αύξησε περιεχόµενο µνήµης κατά 1 Αύξησε περιεχόµενο καταχωρητή Χ κατά 1 Αύξησε περιεχόµενο καταχωρητή Υ κατά 1 TAX TAY TSX TXA Αντέγραψε τον συσσωρευτή στον καταχωρητή X Αντέγραψε τον συσσωρευτή στον καταχωρητή Υ Αντέγραψε τον SP στον καταχωρητή X Αντέγραψε καταχωρητή X στο συσσωρευτή TXS Αντέγραψε την τιµή του Χ στον SP TYA Αντέγραψε καταχωρητή Υ στο συσσωρευτή 16
Κάθε εντολή του 6502 αποτελείται από τα ακόλουθα 2 µέρη : Τον Κωδικό της εντολής ή Κώδικα Λειτουργίας (Operation Code ή OPCODE) ο οποίος καθορίζει την βασική λειτουργία που θα εκτελεσθεί, το είδος των δεδοµένων, το µέγεθος των δεδοµένων και τον τρόπο προσδιορισµού της διεύθυνσης. Στη γλώσσα Assembly, αντί για τους OPCODE χρησιµοποιούνται συντοµογραφίες στην αγγλική γλώσσα, που ονοµάζονται Mnemonics, και αφ' ενός βοηθούν στην αποµνηµόνευση των εντολών, αφ' ετέρου υποδηλώνουν τη λειτουργία που επιτελεί η εντολή. Για παράδειγµα η εντολή σε γλώσσα µηχανής A9 FF Γράφεται σε assembly LDA #FF Και σηµαίνει 'φόρτωσε στο συσσωρευτή την τιµή FF'. Ο Opcode Α9 της γλώσσας µηχανής αντικαταστάθηκε από το mnemonic LDA στην assembly. Το Πεδίο ιεύθυνσης ή Πεδίο Μετατόπισης (Address ή Displacement Field). Η διεύθυνση αυτή έχει διαφορετική σηµασία ανάλογα µε το είδος των εντολών. Στην περίπτωση των εντολών µεταφοράς, επεξεργασίας δεδοµένων ή ελέγχου της κατάστασης, η διεύθυνση που σχηµατίζεται δείχνει στον τελεστέο (operand) που αντίστοιχα πρόκειται να µεταφερθεί σε κάποια άλλη θέση, να επεξεργασθεί ή να µεταβάλλει την κατάσταση του µ/ε. O 6502 έχει 56 διαφορετικές εντολές, ενώ η κάθε εντολή µπορεί να χρησιµοποιηθεί µε µέχρι και 13 διαφορετικούς τρόπους διευθυνσιοδότησης. 17
4. ΤΡΟΠΟΙ ΙΕΥΘΥΝΣΙΟ ΟΤΗΣΗΣ ΜΝΗΜΗΣ ΣΤΟΝ 6502 Οι διάφοροι τρόποι αναζήτησης και λήψης των τελεστέων στις εντολές του 6502 αναφέρονται σαν Μέθοδοι ιευθυνσιοδότησης Μνήµης (Memory Addressing Modes) και υπάρχουν συνολικά 13 τρόποι για διευθυνσιοδότηση κάθε µίας από τις 56 εντολές του 6502. Στον πίνακα που ακολουθεί δίνονται συγκεντρωτικά οι τρόποι διευθυνσιοδότησης του 6502. α/α Τρόπος ιευθυνσιοδότησης Μορφή Τελεστέου 1 Αµεσος (Immediate) #aa 2 Απόλυτος (Absolute) aaaa 3 Μηδενικής Σελίδας (Zero Page) aa 4 Υπονοούµενος (Implied) - 5 Εµµεσος Απόλυτος (Indirect Absolute) (aaaa) 6 Απόλυτος εικτοδοτούµενος, Χ (Absolute Indexed X) aaaa,x 7 Απόλυτος εικτοδοτούµενος, Y (Absolute Indexed Y) aaaa,y 8 εικτοδοτούµενος Μηδενικής Σελίδας, Χ (Zero Page Indexed X) aa,x 9 εικτοδοτούµενος Μηδενικής Σελίδας, Y (Zero Page Indexed Y) aa,y 10 εικτοδοτούµενος Εµµεσος (Indexed Indirect) (aa,χ) 11 Εµµεσος εικτοδοτούµενος (Indirect Indexed) (aa),y 12 Σχετικός (Relative) aa ή aaaa 13 Συσσωρευτή (Accumulator) A Ακολούθως, περιγράφονται αναλυτικότερα οι διάφοροι τρόποι προσπέλασης. Ολες οι διευθύνσεις και τιµές αναφέρονται µε τη δεκαεξαδική τους αναπαράσταση. 18
α/ α Τρόπος Προσπέλασης Bytes Παράδειγµα Παρατηρήσεις 1 Αµεσος (Immediate) 2 LDA #4C 2 Απόλυτος (Absolute) 3 LDA 1B0C Φόρτωσε στον Α την τιµή 4C Φόρτωσε στον Α το περιεχόµενο της διεύθυνσης 1B0C Ο απλούστερος τρόπος προσπέλασης, αναφέρεται σε σταθερή τιµή. Αναφέρεται στο περιεχόµενο µιας διεύθυνσης µνήµης. Το πρώτο byte είναι ο OPCODE, το δεύτερο το χαµηλό τµήµα της διεύθυνσης (ADL) και το τρίτο το υψηλό τµήµα της διεύθυνσης (ADΗ) 3 Μηδενικής Σελίδας (Zero Page) 2 LDA 1B Φόρτωσε στον Α το περιεχόµενο της διεύθυνσης µηδενικής σελίδας 001B Αναφέρεται στις πρώτες 256 θέσεις µνήµης µόνον (zero page, 0000-00FF). Εκεί αποθηκεύονται συχνά χρησιµοποιούµενα δεδοµένα. 4 Υπονοούµενος (Implied) 1 ΙΝΧ Αύξησε την τιµή του καταχωρητή Χ Το προς επεξεργασία στοιχείο ορίζεται απευθείας από τον κωδικό της εντολής. κατά 1 5 Εµµεσος Απόλυτος (Indirect Absolute) 3 JMP (0500) Συνέχισε την εκτέλεση του προγράµµατος από την διεύθυνση που είναι αποθηκευµένη στις διευθύνσεις 0500 (ADL) και 0501 (ADH) Χρησιµοποιείται µόνο µε την εντολή JMP. Αναφέρεται στην διεύθυνση που είναι αποθηκευµένη στην διεύθυνση που αναφέρει η εντολή 6 Απόλυτος εικτοδοτούµενος, Χ (Absolute Indexed X) 7 Απόλυτος εικτοδοτούµενος, Y (Absolute Indexed Y) 8 εικτοδοτούµενος Μηδενικής Σελίδας, Χ (Zero Page Indexed X) 3 LDA 0600,X Φόρτωσε στον Α το περιεχόµενο της διεύθυνσης 0600+X 3 LDA 0600,Υ Φόρτωσε στον Α το περιεχόµενο της διεύθυνσης 0600Y+Y 2 LDA Β5,X Φόρτωσε στον Α το περιεχόµενο της διεύθυνσης Β5+X Η τελική διεύθυνση προκύπτει προσθέτοντας την διεύθυνση της εντολής µε τα περιεχόµενα του καταχωρητή Χ. Χρησιµοποιείται κυρίως για υλοποίηση πινάκων. Η τελική διεύθυνση προκύπτει προσθέτοντας την διεύθυνση της εντολής µε τα περιεχόµενα του καταχωρητή Y. Χρησιµοποιείται κυρίως για υλοποίηση πινάκων. Η τελική διεύθυνση προκύπτει προσθέτοντας την διεύθυνση της εντολής, που ανήκει στη zero page, µε τα περιεχόµενα του καταχωρητή Χ. Χρησιµοποιείται κυρίως για υλοποίηση πινάκων. 9 εικτοδοτούµενος Μηδενικής Σελίδας, Y (Zero Page Indexed Y) 2 LDA Β5,Υ Φόρτωσε στον Α το περιεχόµενο της διεύθυνσης Β5+Y 19 Η τελική διεύθυνση προκύπτει προσθέτοντας την διεύθυνση της εντολής, που ανήκει στη zero page, µε τα περιεχόµενα του
(Zero Page Indexed Y) διεύθυνσης Β5+Y καταχωρητή Υ. Χρησιµοποιείται κυρίως για υλοποίηση πινάκων. 10 εικτοδοτούµενος Εµµεσος (Indexed Indirect) 2 LDA (80,X) Εστω ότι ο Χ έχει τιµή 10, και στις διευθύνσεις 90 και 91 υπάρχουν οι τιµές Ε6 και 23. Το άθροισµα 80+Χ δίνει τιµή 90. Στη διεύθυνση 90 είναι το ADL της διεύθυνσης που θα φορτωθεί στον Α και στο 91 το ADH. Ετσι, τελικά φορτώνεται στον Α το περιεχόµενο της διεύθυνσης 23Ε6 Το άθροισµα της διεύθυνσης της εντολής και του καταχωρητή Χ σχηµατίζουν µια διεύθυνση, έστω Κ, που είναι το ADL της διευθύνσεως τα περιεχόµενα της οποίας θα προσπελαστούν. Στη διεύθυνση Κ+1 υπάρχει το ADH. Ετσι, προσδιορίζοντας µόνο το ADL (µε 1 byte) σχηµατίζεται µια διεύθυνση των 2 bytes, κερδίζοντας σε ταχύτητα εκτέλεσης 11 Εµµεσος εικτοδοτούµενος (Indirect Indexed) 2 LDA (2Α),X Εστω ότι ο Υ έχει τιµή 01, και στις διευθύνσεις 2Α και 2Β υπάρχουν οι τιµές 00 και 5C. Η διεύθυνση 5C00 που σχηµατίζεται είναι η Base Address. Στη διεύθυνση αυτή προστίθεται το περιεχόµενο του καταχωρητή Y και προκύπτει η διεύθυνση 5C01. Τα περιεχόµενα της διεύθυνσης αυτής φορτώνονται στον Α Η διεύθυνση της εντολής (ADL) και η επόµενη (ADH) σχηµατίζουν µια διεύθυνση που ονοµάζεται BASE ADDRESS. Στη διεύθυνση αυτή προστίθεται το περιεχόµενο του καταχωρητή Υ. Τα περιεχόµενα της διεύθυνσης που προκύπτει είναι τα δεδοµένα που θέλουµε να προσπελάσουµε. Η χρήση της είναι παρόµοια µε την προηγούµενη εντολή. 12 Σχετικός (Relative) 2 0200 BEQ 23 Αν το flag Z<>1 η εκτέλεση του προγράµµατος συνεχίζεται στη διεύθυνση 0202, δηλ. τρέχουσα + 2. Αν Z=1 τότε η εκτέλεση του προγράµµατος συνεχίζεται από τη διεύθυνση 0200+2+23=0225 Χρησιµοποιείται µόνο στις εντολές διακλάδωσης υπό συνθήκη (BCC, BCS, BMI, BPL, BEQ, BVC, BVS). Η τιµή της εντολής αναφέρεται σε µετατόπιση (Offset ή Displacement) και έχει τιµή από -127 έως +128. Όταν εκτελείται η διακλάδωση, η εκτέλεση του προγράµµατος συνεχίζεται από τη θέση µνήµης που προκύπτει από τη µετατόπιση 13 Συσσωρευτή (Accumulator) 1 ASL A Μετατόπισε κατά µια θέση αριστερά τα bit του καταχωρητή Α Όπως και στον υπονοούµενο τρόπο προσπέλασης, το προς επεξεργασία στοιχείο ορίζεται απ ευθείας από τον κώδικα της εντολής. Χρησιµοποιείται µε 4 µόνον εντολές (ASL A, LSR A, ROL A, ROR A) 20
21
22
23