ΠΡΟΓΡΑΜΜΑ ΕΞΟΜΟΙΩΣΗΣ (Emulator) 6502



Σχετικά έγγραφα
1. ΑΡΧΙΤΕΚΤΟΝΙΚΗ ΤΟΥ Μ/Ε ΕΣΩΤΕΡΙΚΟΙ ΚΑΤΑΧΩΡΗΤΕΣ

ΕΡΓΑΣΤΗΡΙΟ ΑΡΧΙΤΕΚΤΟΝΙΚΗΣ Η/Υ

Εισαγωγή στην επιστήµη των υπολογιστών ΑΡΙΘΜΗΤΙΚΑ ΣΥΣΤΗΜΑΤΑ

ΜΙΚΡΟΫΠΟΛΟΓΙΣΤΕΣ ΘΕΩΡΙΑ

1. Βάσεις αριθμητικών συστημάτων 2. Μετατροπές μεταξύ ξύβάσεων 3. Αρνητικοί δυαδικοί αριθμοί 4. Αριθμητικές πράξεις δυαδικών αριθμών

1 η Θεµατική Ενότητα : Δυαδικά Συστήµατα

Εισαγωγή στην επιστήµη των υπολογιστών. Υπολογιστές και Δεδοµένα Κεφάλαιο 3ο Αναπαράσταση Αριθµών

Εισαγωγή στην επιστήµη των υπολογιστών. Αναπαράσταση Αριθµών

Σ ή. : υαδικά. Ε ό. ή Ενότητα

Ψηφιακοί Υπολογιστές

Εισαγωγή στην επιστήμη των υπολογιστών

Περίληψη. ΗΜΥ 210: Λογικός Σχεδιασµός, Εαρινό Εξάµηνο υαδική Αφαίρεση. υαδική Αφαίρεση (συν.) Ακόµη ένα παράδειγµα Αφαίρεσης.

Εργαστήριο ΨΗΦΙΑΚΗ ΛΟΓΙΚΗ. Εισαγωγή

Εργαστήριο Δομής και Λειτουργίας Μικροϋπολογιστών. Βοήθημα εκτέλεσης εργαστηριακής άσκησης 3: Εντολές λογικών πράξεων και εντολές κλήσης ρουτινών

ΠΛΗΡΟΦΟΡΙΚΗ I. 4 η ΔΙΑΛΕΞΗ Αριθμητικά Συστήματα

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ

3.1 εκαδικό και υαδικό

Επαναληπτικές δοµές. µτ α.τ. Όχι. ! απαγορεύεται µέσα σε µία ΓΙΑ να µεταβάλλουµε τον µετρητή! διότι δεν θα ξέρουµε µετά πόσες επαναλήψεις θα γίνουν

ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ. ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΤΩΝ ΥΠΟΛΟΓΙΣΤΩΝ Μέρος Β (Οργάνωση Υπολογιστών)

Αρχιτεκτονική Υπολογιστών

Κεφάλαιο 2. Συστήματα Αρίθμησης και Αναπαράσταση Πληροφορίας. Περιεχόμενα. 2.1 Αριθμητικά Συστήματα. Εισαγωγή

Οργάνωση Υπολογιστών

Αριθμητικά Συστήματα

Τμήμα Οικιακής Οικονομίας και Οικολογίας. Αναπαράσταση Αριθμών

Συστήματα Μικροϋπολογιστών

4.1 Θεωρητική εισαγωγή

Οργάνωση Η/Υ. Ο Επεξεργαστής TRN. Τμήμα Εφαρμοσμένης Πληροφορικής Πανεπιστήμιο Μακεδονίας Α. Χατζηγεωργίου-Η. Σακελλαρίου

Εισαγωγή στην Πληροφορική ΓΕΝΙΚΟ ΤΜΗΜΑ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ TEI ΧΑΛΚΙ ΑΣ

ΕΡΓΑΣΤΗΡΙΟ ΑΡΧΙΤΕΚΤΟΝΙΚΗΣ Η/Υ

ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΥΠΟΛΟΓΙΣΤΩΝ

! Εάν ο αριθμός διαθέτει περισσότερα bits, χρησιμοποιούμε μεγαλύτερες δυνάμεις του 2. ! Προσοχή στη θέση του περισσότερο σημαντικού bit!

Καταχωρητές γενικής χρήσης και δεδοµένων (Data Registers)

ΤΕΧΝΟΛΟΓΙΚΟ ΕΚΠΑΙΔΕΥΤΙΚΟ ΙΔΡΥΜΑ ΛΑΜΙΑΣ. A. Μετατροπή αριθμών 1. Μετατροπή αριθμών από δεκαδικό σε δυαδικό σύστημα αρίθμησης

Πράξεις με δυαδικούς αριθμούς

Αρχιτεκτονική Υπολογιστών

Λογική Σχεδίαση Ψηφιακών Συστημάτων

Σελίδα 1 από 12. Απαντήσεις στο φυλλάδιο 55. Ερώτηση 1 η : Ένα υπολογιστικό σύστηµα αποτελείται από:

1 η Θεµατική Ενότητα : Αριθµητικά Κυκλώµατα. Επιµέλεια διαφανειών: Χρ. Καβουσιανός

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα. Αρχιτεκτονική-Ι. Ενότητα 1: Εισαγωγή στην Αρχιτεκτονική -Ι

Αριθµητική υπολογιστών

Κεφάλαιο 3 Αρχιτεκτονική Ηλεκτρονικού Τμήματος (hardware) των Υπολογιστικών Συστημάτων ΕΡΩΤΗΣΕΙΣ ΑΣΚΗΣΕΙΣ

Συστήματα αρίθμησης. = α n-1 *b n-1 + a n-2 *b n-2 + +a 1 b 1 + a 0 όπου τα 0 a i b-1

Σύστημα Πλεονάσματος. Αναπαράσταση Πραγματικών Αριθμών. Αριθμητικές Πράξεις σε Αριθμούς Κινητής Υποδιαστολής

ΠΛΗΡΟΦΟΡΙΑΚΑ & ΤΗΛΕΠΙΚΟΙΝΩΝΙΑΚΑ ΣΥΣΤΗΜΑΤΑ

Ελίνα Μακρή

Τμήμα Χρηματοοικονομικής & Ελεγκτικής ΤΕΙ Ηπείρου Παράρτημα Πρέβεζας. Πληροφορική Ι. Μάθημα 4 ο Πράξεις με bits. Δρ.

Αριθμητικά Συστήματα

Λύσεις Ασκήσεων ΣΕΙΡΑ 1 η. Πρόσημο και μέγεθος

ΕΡΓΑΣΤΗΡΙΟ ΑΡΧΙΤΕΚΤΟΝΙΚΗΣ Η/Υ

Εισαγωγή στην επιστήµη των υπολογιστών. Πράξεις µε µπιτ

Αναπαράσταση Δεδομένων. ΜΥΥ-106 Εισαγωγή στους Η/Υ και στην Πληροφορική

ΘΕΜΑ : ΣΥΣΤΗΜΑΤΑ ΑΡΙΘΜΗΣΗΣ. ΔΙΑΡΚΕΙΑ: 1 περιόδους. 22/1/ :11 Όνομα: Λεκάκης Κωνσταντίνος καθ. Τεχνολογίας

Εισαγωγή στην επιστήµη των υπολογιστών. Πράξεις µε µπιτ

Γενική οργάνωση υπολογιστή «ΑΒΑΚΑ»

Ανασκόπηση στα ΑΡΙΘΜΗΤΙΚΑ ΣΥΣΤΗΜΑΤΑ

ΗΜΥ 100 Εισαγωγή στην Τεχνολογία

Εισαγωγή στην Επιστήµη των Υπολογιστών Εξάµηνο 4ο-ΣΗΜΜΥ

Εισαγωγή στην Επιστήμη των Υπολογιστών

ΠΛΗΡΟΦΟΡΙΚΗ I Ενότητα 6

Εισαγωγή στην επιστήμη των υπολογιστών. Πράξεις με μπιτ

µπιτ Λύση: Κάθε οµάδα των τεσσάρων µπιτ µεταφράζεται σε ένα δεκαεξαδικό ψηφίο 1100 C 1110 E Άρα το δεκαεξαδικό ισοδύναµο είναι CE2

Τετάρτη 5-12/11/2014. ΣΗΜΕΙΩΣΕΙΣ 3 ου και 4 ου ΜΑΘΗΜΑΤΟΣ ΕΙΔΙΚΟΤΗΤΑ: ΤΕΧΝΙΚΟΣ ΕΦΑΡΜΟΓΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΜΑΘΗΜΑ: ΑΡΧΙΤΕΚΤΟΝΙΚΗ Η/Υ Α ΕΞΑΜΗΝΟ

Σύστημα Πλεονάσματος και Αναπαράσταση Αριθμών Κινητής Υποδιαστολής

Δυαδικό Σύστημα Αρίθμησης

ΗΜΥ 100 Εισαγωγή στην Τεχνολογία ιάλεξη 11

ΗΜΥ 100 Εισαγωγή στην Τεχνολογία ιάλεξη 12

Τμήμα Οικιακής Οικονομίας και Οικολογίας. Αναπαράσταση Αριθμών

Δυαδικη παρασταση αριθμων και συμβολων

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κεφάλαιο 8 : H γλώσσα προγραµµατισµού Pascal 1 ο Μέρος σηµειώσεων (Ενότητες 8.1 & 8.2 σχολικού βιβλίου)

a -j a 5 a 4 a 3 a 2 a 1 a 0, a -1 a -2 a -3

ΕΡΓΑΣΤΗΡΙΟ ΑΡΧΙΤΕΚΤΟΝΙΚΗΣ Η/Υ

Projects στο Εργαστήριο Αρχιτεκτονικής Υπολογιστών Version 2 Ισχύει από Φεβρουάριο 2009

ΠΡΟΓΡΑΜΜΑ ΣΠΟΥ ΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ

Τμήμα Χρηματοοικονομικής & Ελεγκτικής ΤΕΙ Ηπείρου Παράρτημα Πρέβεζας. Πληροφορική Ι. Αναπαράσταση αριθμών στο δυαδικό σύστημα. Δρ.

Επιλογή και επανάληψη. Λογική έκφραση ή συνθήκη

Ψηφιακά Συστήματα. 1. Συστήματα Αριθμών

Εισαγωγή στην επιστήμη των υπολογιστών. Υπολογιστές και Δεδομένα Κεφάλαιο 4ο Πράξεις με μπιτ

Εισαγωγή στην Πληροφορική & τον Προγραμματισμό

Σελίδα 1 από 11. Απαντήσεις στο φυλλάδιο 57 Ερώτηση: 1 η : Οι ακροδέκτες αυτοί χρησιµοποιούνται για:

Αριθμητικά Συστήματα Κώδικες

Πανεπιστήμιο Θεσσαλίας - Τμήμα Πληροφορικής. Οργάνωση Η/Υ. Γιώργος ηµητρίου. Μάθηµα 2 ο Σύντοµη Επανάληψη

ΑΡΧΙΤΕΚΤΟΝΙΚΗ HARDWARE ΥΠΟΛΟΓΙΣΤΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ

C: Από τη Θεωρία στην Εφαρµογή 2 ο Κεφάλαιο

ΕΙΔΙΚΟΤΗΤΑ: ΤΕΧΝΙΚΟΣ ΕΦΑΡΜΟΓΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΜΑΘΗΜΑ: ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ

5.1 Θεωρητική εισαγωγή

2ο ΓΕΛ ΑΓ.ΔΗΜΗΤΡΙΟΥ ΑΕΠΠ ΘΕΟΔΟΣΙΟΥ ΔΙΟΝ ΠΡΟΣΟΧΗ ΣΤΑ ΠΑΡΑΚΑΤΩ

Παραδείγματα Προγραμματισμού σε Assembly του TRN

1. ΣΥΣΤΗΜΑΤΑ ΑΡΙΘΜΩΝ. α i. (α i β i ) (1.3) όπου: η= το πλήθος ακεραίων ψηφίων του αριθμού Ν. n-1

ΠΛΗ21 Κεφάλαιο 2. ΠΛΗ21 Ψηφιακά Συστήματα: Τόμος Α Κεφάλαιο: Παράσταση Προσημασμένων Αριθμών Συμπληρώματα

Συστήματα Αρίθμησης. Συστήματα Αρίθμησης 1. PDF created with FinePrint pdffactory Pro trial version

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ

Αρχιτεκτονική Υπολογιστών Ασκήσεις Εργαστηρίου

Ενότητα 4. Εισαγωγή στην Πληροφορική. Αναπαράσταση δεδοµένων. Αναπαράσταση πληροφορίας. υαδικοί αριθµοί. Χειµερινό Εξάµηνο

2. ΑΡΙΘΜΗΤΙΚΗ ΤΟΥ ΥΠΟΛΟΓΙΣΤΗ. 2.1 Αριθμητικά συστήματα

Εργαστήριο 3 ΟΡΓΑΝΩΣΗ ΤΗΣ ΚΜΕ. Εισαγωγή

Εισαγωγή στην επιστήμη των υπολογιστών. Υπολογιστές και Δεδομένα Κεφάλαιο 4ο Πράξεις με μπιτ

Πανεπιστήμιο Πατρών Τμήμα Φυσικής Εργαστήριο Ηλεκτρονικής. Ψηφιακά Ηλεκτρονικά. Αριθμητικά Συστήματα. Επιμέλεια Διαφανειών: Δ.

Οργάνωση επεξεργαστή (1 ο μέρος) ΜΥΥ-106 Εισαγωγή στους Η/Υ και στην Πληροφορική

1. Πότε χρησιμοποιούμε την δομή επανάληψης; Ποιες είναι οι διάφορες εντολές (μορφές) της;

Στοιχεία από Assembly Γιώργος Μανής

Transcript:

ΠΡΟΓΡΑΜΜΑ ΕΞΟΜΟΙΩΣΗΣ (Emulator) 6502 Η εφαρµογή EMUL6502.COM είναι γραµµένη σε γλώσσα Turbo Pascal και επιτρέπει την προσοµοίωση του µ/ε 6502 σε PC κάτω από το DOS. Με την εκτέλεση της εφαρµογής εµφανίζεται η παρακάτω οθόνη : TURBO PASCAL 6502 EMULATOR. UNIVERSITY OF PATRAS 1988 Written by: COMPUTER ENGINEERING DEPARTMENT PC SR NV-BDIZC AC XR YR SP 0000 00000000 00 00 00 FF Όλες οι τιµές αναφέρονται µε τη δεκαεξαδική τους αναπαράσταση. Οι πληροφορίες που εµφανίζονται σε δεκαεξαδική µορφή αφορούν τους καταχωρητές του 6502 και είναι: PC = Program Counter ( Μετρητής Προγράµµατος) SR = Status Register (Καταχωρητής Κατάστασης), εµφανίζονται αναλυτικά τα flags AC = Accumulator ( Συσσωρευτής) XR = Καταχωρητής Χ YR = Καταχωρητής Υ SP = Stack Pointer ( είκτης Σωρού) Όποτε θέλουµε να δούµε τους καταχωρητές αυτούς πληκτρολογούµε το γράµµα R ή r και Enter. Επίσης, πληκτρολογώντας? και Enter εµφανίζεται η παρακάτω οθόνη βοηθείας για τις διάφορες λειτουργίες του emulator: TURBO PASCAL 6502 EMULATOR COMMANDS AC = nn... Θέτω στον Accumulator την τιµή nn AS ssss... Αρχίζω να γράφω πρόγραµµα στη διεύθυνση ssss E ssss... ιόρθωση των περιεχοµένων της διεύθυνσης ssss F ssss,eeee,nn... Γεµίζει τις διευθύνσεις ssss..eeee µε την τιµή nn G... Εκτέλεση προγράµµατος από τη διεύθυνση που έχει ο P.C. L "name",ssss... Φόρτωση στη µνήµη του αρχείου "name" στη θέση ssss M ssss,eeee... Εµφάνιση των περιεχοµένων στις θέσεις µνήµης ssss..eeee PC=nnnn... Θέτω στον P.C. την διεύθυνση nnnn Q... Τερµατισµός εφαρµογής προσοµοίωσης R... Εµφάνιση περιεχοµένων καταχωρητών S... Εκτέλεση προγράµµατος γραµµή-γραµµή από τη διεύθυνση του PC SR=bbbbbbbb... Θέτει την δυαδική τιµή bbbbbbbb στον καταχωρητή κατάστασης SP=nn... Θέτει την τιµή ΝΝ στον είκτη Σωρού UN ssss,eeee... Εµφανίζει τον κώδικα στις διευθύνσεις ssss..eeee UP ssss,eeee... Εκτυπώνει τον κώδικα στις διευθύνσεις ssss..eeee W "name",ssss,llll. Σώζει στο αρχείο "name" τα περιεχόµενα llll θέσεων µνήµης αρχίζοντας από τη θέση ssss XR=nn... Θέτει στον καταχωρητή Χ την τιµή nn YR=nn... Θέτει στον καταχωρητή Y την τιµή nn Ε1

1ο ΕΡΓΑΣΤΗΡΙΑΚΟ ΜΑΘΗΜΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ ΑΝΤΙΚΕΙΜΕΝΑ : Εξοικείωση µε τον emulator Τοποθέτηση δεδοµένων στη µνήµη Μεταφορά δεδοµένων από µια θέση µνήµης σε άλλη ΕΡΓΑΣΤΗΡΙΑΚΟ ΜΕΡΟΣ Χρησιµοποιούµενες εντολές: LDA φόρτωσε στο Συσσωρευτή STA αποθήκευσε στη µνήµη τα περιεχόµενα του συσσωρευτή. Άσκηση 1.1: Αφού µπείτε στο πρόγραµµα εξοµοίωσης EMUL6502 κάνετε τα επόµενα βήµατα : Ποια τα περιεχόµενα του συσσωρευτή A και του µετρητή προγράµµατος PC αυτή τη στιγµή; Ποια διαταγή (Command) χρησιµοποιήσατε για να δείτε; Ποια τα περιεχόµενα της θέσης µνήµης 40; Ποια διαταγή χρησιµοποιήσατε για να δείτε; Γράψτε στο χαρτί ένα πρόγραµµα (τριών εντολών) που θα φορτώνει την τιµή AC στον συσσωρευτή και θα αποθηκεύει τα περιεχόµενα του συσσωρευτή στη θέση 40. Ποιόν τρόπο διευθυνσιοδότησης χρησιµοποιήσατε στην εντολή φόρτωσης και ποιο στην εντολή αποθήκευσης; Πληκτρολογήστε το παραπάνω πρόγραµµά σας ξεκινώντας από τη θέση 0200. Ποια διαταγή χρησιµοποιήσατε για να γράψετε το πρόγραµµα; Ποια διαταγή χρησιµοποιήσατε για να βγείτε από το πρόγραµµα που γράψατε; Βάλτε στον P.C. τη θέση αρχής του προγράµµατος 0200. Ποια οδηγία χρησιµοποιήσατε; Εκτελέστε το πρόγραµµα µια κι έξω. Ποια διαταγή χρησιµοποιήσατε; Ε2

Ποιο το περιεχόµενο του συσσωρευτή τώρα; Ποιο το περιεχόµενο της θέσης 40; Ποια διαταγή χρησιµοποιήσατε; Άσκηση 1.2: Αφού µπείτε στο πρόγραµµα εξοµοίωσης EMUL6502 κάνετε τα επόµενα βήµατα: Ποια τα περιεχόµενα των θέσεων µνήµης 50,60 ; Με το πρόγραµµα όπως αυτό της άσκησης 1 τοποθετήστε τις τιµές 50, 60 στις θέσεις 50, 60 αντίστοιχα. Ελέγξτε εάν πράγµατι οι θέσεις µνήµης 50, 60 έχουν τις τιµές 50, 60 αντίστοιχα. Γράψτε και πληκτρολογήστε ένα πρόγραµµα µε το οποίο θα εναλλάσσονται τα δεδοµένα των 50 και 60 θέσεων µνήµης µεταξύ τους. Η αρχή του προγράµµατος να είναι στη θέση 0100. Εκτελέστε το πρόγραµµα και ελέγξτε τις θέσεις µνήµης 50, 60 εάν περιέχουν τα δεδοµένα 60 και 50 αντίστοιχα. Το πρόγραµµα εξοµοίωσης EMUL6502 παρέχει τη δυνατότητα τοποθέτησης δεδοµένων σε οποιαδήποτε θέση µνήµης χωρίς την εκτέλεση κάποιου προγράµµατος όπως παραπάνω, µόνο µε την χρήση µιας διαταγής. Η διαταγή αυτή είναι η: E SSSS η οποία µας επιτρέπει να φέρουµε στην οθόνη και να µεταβάλλουµε τα περιεχόµενα της θέσης µνήµης SSSS (S δεκαεξαδικό ψηφίο). Ε3

2 ο ΕΡΓΑΣΤΗΡΙΑΚΟ ΜΑΘΗΜΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ ΑΝΤΙΚΕΙΜΕΝΟ : Πρόσθεση προσηµασµένων ή µη προσηµασµένων αριθµών ΘΕΩΡΗΤΙΚΗ ΕΙΣΑΓΩΓΗ 2.1 εκαδικό και δυαδικό σύστηµα αρίθµησης Στο δεκαδικό σύστηµα αρίθµησης που έχουµε όλοι συνηθίσει η "βάση αρίθµησης" είναι ο αριθµός 10. Αυτό σηµαίνει ότι το δεκαδικό σύστηµα αρίθµησης χρησιµοποιεί 10 διαφορετικά σύµβολα για την παράσταση αριθµών (0..9), και ότι το κάθε ψηφίο ενός αριθµού που γράφεται στο δεκαδικό σύστηµα πολλαπλασιάζεται µε αυξανόµενες δυνάµεις του 10. Για παράδειγµα : 274 10 = 2 x 10 2 + 7 x 10 1 + 4 x 10 0 Στους ηλεκτρονικούς υπολογιστές χρησιµοποιείται ευρέως το δυαδικό σύστηµα µε βάση αρίθµησης τον αριθµό 2 και 2 µόνο σύµβολα (0 και 1) τα οποία εύκολα αναπαρίστανται "ηλεκτρονικά" (π.χ. µε διακόπτες on/off ή το επίπεδο τάσης 0 ή 5 Volt). Με παρόµοιο τρόπο το κάθε ψηφίο ενός δυαδικού αριθµού πολλαπλασιάζεται µε αυξανόµενες δυνάµεις του 2. Για παράδειγµα : 1011 2 = 1 x 2 3 + 0 x 2 2 + 1 x 2 1 + 1 x 2 0 = 8 + 0 + 2 + 1 = 11 10 Να σηµειωθεί ότι η "βάση αρίθµησης" σε ένα σύστηµα αρίθµησης δεν αποτελεί βασικό ψηφίο του συστήµατος για την αναπαράσταση αριθµών (π.χ. στο δεκαδικό ο αριθµός 10 δεν είναι βασικό ψηφίο (τα ψηφία είναι 0..9) και στο δυαδικό σύστηµα οµοίως ο αριθµός 2 δεν είναι βασικό ψηφίο. 2.2 Μετατροπή δυαδικού αριθµού σε δεκαδικό Με βάση τα παραπάνω ένας εύκολος τρόπος για την µετατροπή σε δεκαδική µορφή ενός δυαδικού αριθµού είναι ο εξής (δίνεται παράδειγµα για δυαδικό αριθµό 8 bit) : Σε κάθε θέση bit αντιστοιχίζεται και µία δύναµη του 2 η οποία είτε προστίθεται (όταν το αντίστοιχο bit είναι 1) είτε όχι (όταν το αντίστοιχο bit είναι 0) Θέση bit 7 6 5 4 3 2 1 0 ύναµη του 2 128 64 32 16 8 4 2 1 υαδικός Αριθµός 1 0 1 1 0 0 1 1 Άρα ο αριθµός 10110011 2 είναι ο : 128 + 32 + 16 + 2 + 1 = 179 10 Ε4

2.3 Μετατροπή δεκαδικού αριθµού σε δυαδικό Η µετατροπή αυτή γίνεται µε διαδοχικές διαιρέσεις του αριθµού µε τον αριθµό 2 όπου µετά από κάθε διαίρεση ξαναδιαιρούµε µε 2 το πηλίκο που έβγαλε η προηγούµενη διαίρεση έως ότου το πηλίκο µηδενιστεί. Επίσης σε κάθε διαίρεση κρατάµε το υπόλοιπο της διαίρεσης (που είναι είτε 0 είτε 1 εφόσον διαιρούµε δια 2). Παράδειγµα µετατροπής του δεκαδικού 179 σε δυαδικό : ιαίρεση Πηλίκο Υπόλοιπο 179 / 2 89 1 89 / 2 44 1 44 / 2 22 0 22 / 2 11 0 11 / 2 5 1 5 / 2 2 1 2 / 2 1 0 1 / 2 0 1 Από τις παραπάνω διαιρέσεις λαµβάνουµε τα υπόλοιπα των διαιρέσεων µε ανάποδη σειρά (δηλαδή το πρώτο υπόλοιπο είναι το bit µικρότερης σηµασίας και θα τοποθετηθεί στο δεξί άκρο του αριθµού, ενώ το τελευταίο υπόλοιπο είναι το bit µεγαλύτερης σηµασίας και τοποθετείται στο αριστερό άκρο του αριθµού). Έτσι παίρνουµε τον αντίστοιχο δυαδικό αριθµό και εποµένως για το παράδειγµά µας : 179 10 = 1 0 1 1 0 0 1 1 2 2.4 Πρόσθεση δυαδικών αριθµών Η πρόσθεση δυαδικών αριθµών γίνεται όπως ακριβώς και η πρόσθεση των δεκαδικών αριθµών µε χρήση "κρατούµενου". Για παράδειγµα, η πρόσθεση των αριθµών 0101 2 = 5 10 και 1101 2 = 13 10 γίνεται ως εξής : Πράξη 0 1 0 1 + 1 1 0 1 1 0 0 1 0 1 + 1 1 0 1 0 1 0 0 1 0 1 + 1 1 0 1 1 0 1 0 0 1 0 1 + 1 1 0 1 1 0 0 1 0 Επεξήγηση Ένα συν ένα κάνει 2 10 δηλαδή 10 2 άρα γράφουµε ως αποτέλεσµα το 0 και έχουµε 1 ως κρατούµενο. Μηδέν και µηδέν και ένα το κρατούµενο µας δίνει 1, άρα γράφουµε ως αποτέλεσµα το 1 και έχουµε 0 κρατούµενο Ένα συν ένα κάνει 2 10 δηλαδή 10 2 άρα γράφουµε ως αποτέλεσµα το 0 και έχουµε 1 ως κρατούµενο. Ένα συν µηδέν συν ένα το κρατούµενο κάνει 2 10 δηλαδή 10 2 άρα γράφουµε ως αποτέλεσµα το 0 και έχουµε 1 ως κρατούµενο. Η πράξη τελείωσε και το αποτέλεσµα είναι 1 0 0 1 0 2 = 18 10 Ε5

2.5 Αναπαράσταση αρνητικών δυαδικών αριθµών Για την αναπαράσταση των αρνητικών αριθµών ακολουθείται η σύµβαση του συµπληρώµατος ως προς 2 που διευκολύνει εξαιρετικά τις πράξεις στους Η/Υ : Ο αρνητικός δυαδικός αριθµός ενός θετικού (π.χ. του 3 10 = 0011 2 ) είναι εκείνος ο αριθµός που προστιθέµενος µε τον αντίστοιχο θετικό να δώσει αποτέλεσµα 0 (αγνοώντας το κρατούµενο). Έτσι το 3 ως δυαδικός είναι ο 1101 γιατί : 1 1 0 1 + 0 0 1 1 1 0 0 0 0 Για να βρούµε τον αρνητικό δυαδικό αριθµό ενός θετικού δυαδικού αριθµού (µε την σύµβαση του συµπληρώµατος ως προς 2) αρκεί να κάνουµε τα εξής απλά βήµατα : 1. Αντιστρέφουµε όλα τα ψηφία του θετικού αριθµού (π.χ. 0011 1100) 2. Προσθέτουµε µία µονάδα (π.χ. 1100 1101) Αντίστροφα, όταν έχουµε έναν αρνητικό δυαδικό αριθµό και θέλουµε να βρούµε τον αντίστοιχο θετικό αριθµό κάνουµε ακριβώς τα αντίστροφα βήµατα : 1. Αφαιρούµε µία µονάδα από τον (αρνητικό) αριθµό (π.χ. 1101 1100) 2. Αντιστρέφουµε όλα τα ψηφία του αριθµού (π.χ. 1100 0011) Έτσι, προκύπτει εύκολα ότι ο αρνητικός αριθµός του 00000001 είναι ο 11111111, ενώ ο αρνητικός αριθµός για το 00000000 είναι πάλι το 00000000. Προφανώς για να αναπαραστήσουµε και θετικούς και αρνητικούς αριθµούς µε δεδοµένο αριθµό bits, θα πρέπει από τον συνολικό αριθµό συνδυασµών που µπορούµε να πάρουµε µε αυτά τα bits, οι µισοί αριθµοί να αντιστοιχούν σε θετικούς και οι άλλοι µισοί σε αρνητικούς. Για παράδειγµα όταν έχουµε αριθµούς των 8 bits αυτοί µπορεί να έχουν 2 8 =256 διαφορετικούς συνδυασµούς. Αν θεωρήσουµε ότι όλοι οι αριθµοί είναι θετικοί, τότε µπορούµε µε 8 bits να αναπαραστήσουµε τους αριθµούς από 0 (00000000) έως και 255 (11111111). Αν όµως θέλουµε να αναπαραστήσουµε προσηµασµένους αριθµούς, δηλαδή και θετικούς αλλά και αρνητικούς, τότε από τους 256 συνδυασµούς οι µισοί (δηλαδή 128) θα είναι θετικοί και οι άλλοι µισοί (128) θα είναι αρνητικοί. Έτσι λοιπόν θεωρώντας και το 0 στους θετικούς αριθµούς οι προσηµασµένοι αριθµοί που αναπαρίστανται µε 8 bits είναι στην περιοχή : 128,... -2, -1, 0, 1, 2,...,+127 αρνητικοί θετικοί Ε6

Η χαρακτηριστική διαφορά θετικών και αρνητικών δυαδικών αριθµών είναι ότι στους θετικούς αριθµούς το bit µεγαλύτερης σηµασίας είναι 0 ενώ στους αρνητικούς είναι 1. Π.χ για τους 8µπιτους αριθµούς οι θετικοί αναπαρίστανται ως : 00000000 2 = 0 10 00000001 2 = 1 10 00000010 2 = 2 10...... 01111110 2 = 126 10 01111111 2 = 127 10 δηλαδή ως κανονικοί δυαδικοί αριθµοί αλλά µε τα πρώτα 7 ψηφία ενεργά (2 7 =128). Προφανώς οι αρνητικοί αριθµοί (που είναι 128) παράγονται επίσης µε συνδυασµούς των πρώτων 7 ψηφίων (2 7 =128) αλλά µε το 8 ο ψηφίο ίσο µε 1, ώστε να διαφοροποιούνται από τους θετικούς. Έτσι οι αρνητικοί θα είναι ως εξής : 11111111 2 = -1 10 11111110 2 = -2 10 11111101 2 = -3 10... =... 10000001 2 = -127 10 10000000 2 = -128 10 Παρατηρούµε ότι αν στον αριθµό 01111111 2 = 127 10 προσθέσουµε µία µονάδα παίρνουµε τον αριθµό 10000000 2 = -128 10, δηλαδή αν περάσουµε προς τα πάνω το άνω όριο των προσηµασµένων αριθµών τότε ξαναγυρνάµε στο κάτω όριο. Οµοίως αν από τον αριθµό 10000000 2 = -128 10, αφαιρέσουµε µία µονάδα, προκύπτει ο αριθµός 01111111 2 = 127 10. δηλαδή αν περάσουµε προς τα κάτω το κάτω όριο των προσηµασµένων αριθµών ξαναγυρνάµε στο πάνω όριο. Αυτές οι δύο περιπτώσεις κατά τις οποίες ξεπερνάµε την δεδοµένη περιοχή αριθµών (θετικών-αρνητικών) που µπορούν να αναπαρασταθούν µε δεδοµένο αριθµό bits, ονοµάζονται περιπτώσεις υπερχείλισης (overflow) και προφανώς µας δίνουν εσφαλµένα αποτελέσµατα (αλλαγή προσήµου και λάθος νούµερο). Οι περιπτώσεις υπερχείλισης πρέπει να ελέγχονται από τον προγραµµατιστή σε κάθε αριθµητική πράξη ενός προγράµµατος, όταν βέβαια είναι πιθανόν να συµβούν. -128-127... -1 0 1... 126 127 1000000 1000001 11111111 00000000 00000001 011111110 011111111 Ε7

2.6 Το δεκαεξαδικό σύστηµα Στους ηλεκτρονικούς υπολογιστές χρησιµοποιείται ευρέως και το δεκαεξαδικό (hexadecimal) σύστηµα αρίθµησης που χρησιµοποιεί ως βάση αρίθµησης τον αριθµό 16, δηλαδή χρησιµοποιεί 16 διαφορετικά σύµβολα (0..9, Α, Β, C, D, E, F) για αναπαράσταση αριθµών. Το κάθε ψηφίο ενός δεκαεξαδικού αριθµού πολλαπλασιάζεται µε αυξανόµενες δυνάµεις του 16. Για παράδειγµα : 2FA 16 = 2 x 16 2 + F x 16 1 + A x 16 0 = 2 x 256 + 15 x 16 + 10 = 762 10 Το δεκαεξαδικό σύστηµα χρησιµοποιείται στους Η/Υ για δύο λόγους : µπορεί και αναπαριστά µεγάλους αριθµούς (π.χ. διευθύνσεις µνήµης) µε λίγα ψηφία, και οι δεκαεξαδικοί αριθµοί µετατρέπονται εύκολα σε δυαδικούς και αντίστροφα. 2.7 Mετατροπή δεκαεξαδικών αριθµών σε δυαδικούς και αντίστροφα Η µετατροπή δεκαεξαδικών αριθµών σε δυαδικούς γίνεται ως εξής : Κάθε ψηφίο του δεκαεξαδικού αριθµού αντιστοιχεί σε 4 ψηφία του δυαδικού αριθµού. Έτσι ένας 8µπιτος δυαδικός αριθµός αναπαρίσταται µε µόνο 2 ψηφία στο δεκαεξαδικό σύστηµα (π.χ. 255 10 = 1111 1111 2 = FF 16 ). Έτσι για παράδειγµα ο αριθµός D7 µετατρέπεται σε δυαδικός ως εξής : Αρχικός δεκαεξαδικός αριθµός D7 16 Σε δεκαεξαδικό σύστηµα ανά ψηφίο D 16 7 16 Σε δεκαδικό σύστηµα ανά ψηφίο 13 10 7 10 Σε δυαδικό σύστηµα ανά ψηφίο 1101 2 0111 2 Τελικός δυαδικός 1101 0111 2 Με τον ακριβώς αντίστροφο τρόπο γίνεται η µετατροπή από δυαδικό σε δεκαεξαδικό. Για παράδειγµα η µετατροπή του δυαδικού 10100101 2 γίνεται ως εξής Αρχικός δυαδικός αριθµός 10100101 2 Χωρισµός ανά 4 ψηφία 1010 2 0101 2 Σε δεκαδικό σύστηµα ανά ψηφίο 12 10 5 10 Σε δεκαεξαδικό σύστηµα ανά ψηφίο C 16 5 16 Τελικός δεκαεξαδικός αριθµός C5 16 Ε8

ΕΡΓΑΣΤΗΡΙΑΚΟ ΜΕΡΟΣ Χρησιµοποιούµενες εντολές: ADC πρόσθεσε περιεχόµενα συσσωρευτή και µνήµης CLC µηδένισε το κρατούµενο Άσκηση 2.1: Γράψτε ένα πρόγραµµα που να προσθέτει δύο µη προσηµασµένους αριθµούς που είναι περιεχόµενα των θέσεων µνήµης 0200 και 0201 και να αποθηκεύει το άθροισµα στη θέση µνήµης 0202. Τι τρόπο διευθυνσιοδότησης χρησιµοποιήσατε για τις εντολές του προγράµµατος; Εκτελέστε το πρόγραµµά σας για τις τρεις περιπτώσεις που υπάρχουν στον παρακάτω πίνακα και συµπληρώστε τον. 0200 0201 0202 16-δικός 10-δικός 16-δικός 10-δικός 16-δικός 10-δικός Κρατούµενο (Ναι/Όχι) 8F 143 83 131 2E 46 41 65 3B 59 C5 197 Στις περιπτώσεις που υπάρχει κρατούµενο η θέση 0202 κρατάει το σωστό αποτέλεσµα; Άσκηση 2.2: Γράψτε ένα πρόγραµµα που να προσθέτει δύο προσηµασµένους αριθµούς που είναι περιεχόµενα των θέσεων µνήµης 0200 και 0201 και να αποθηκεύει το άθροισµα στη θέση µνήµης 0202. Το πρόγραµµα αυτό σε τι διαφέρει από το προηγούµενο; Εκτελέστε το πρόγραµµά σας για τις τιµές του παρακάτω πίνακα και συµπληρώστε τον. Ποια αποτελέσµατα στη 0202 θέση είναι σωστά; Γιατί; 0200 0201 0202 16-δικός 10-δικός 16-δικός 10-δικός 16-δικός 10-δικός Υπερχείλιση? 6A 106 59 89 7F 127 03 3 20 32 FD -3 A6-90 C2-62 (Ναι/Όχι) Άσκηση 2.3: Γράψτε ένα πρόγραµµα που να προσθέτει δύο 16-bit προσηµασµένους αριθµούς που ο ένας είναι αποθηκευµένος στις θέσεις µνήµης 0200 (χαµηλής τάξης BYTE), 0201 (υψηλής τάξης Ε9

BYTE), και ο άλλος στις 0202 (Χ.Τ.Β.) και 0203 (Υ.Τ.Β.). Το αποτέλεσµα να αποθηκευθεί στις θέσεις µνήµης 0204 (Χ.Τ.Β.) και 0205 (Υ.Τ.Β.). Για παράδειγµα. εάν ο πρώτος προσθετέος είναι ο 186F και ο δεύτερος ο 235C οι θέσεις µνήµης θα περιέχουν : 0200: 6F 0201: 18 0202: 5C 0203: 23 και µετά την άθροιση : 186F +235C 3BCB Οι θέσεις 0204 και 0205 θα περιέχουν: 0204: CB 0205: 3B Εκτελέστε το πρόγραµµά σας για τα δεδοµένα του παρακάτω πίνακα: Προσθετέος 0200,0201 Προσθετέος 0202,0203 Άθροισµα 0204,0205 Υπερχείλιση? (Ναι/Όχι) 2563 41AB 83C7 F1B4 Ε10

3 ο ΕΡΓΑΣΤΗΡΙΑΚΟ ΜΑΘΗΜΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ ΑΝΤΙΚΕΙΜΕΝΟ : Αφαίρεση προσηµασµένων ή µη προσηµασµένων αριθµών ΕΡΓΑΣΤΗΡΙΑΚΟ ΜΕΡΟΣ Χρησιµοποιούµενες εντολές: SBC αφαίρεσε απ τα περιεχόµενα του συσσωρευτή τα περιεχόµενα της µνήµης και το 'δανεικό' (Borrow) SEC κάνε το κρατούµενο 1 Άσκηση 3.1: Γράψτε ένα πρόγραµµα που να αφαιρεί τους µη προσηµασµένους αριθµούς 9 και 4 (9-4) µε χρήση της εντολής SEC (Set Carry) πριν από την αφαίρεση και χωρίς την SEC. Ποιο αποτέλεσµα είναι το σωστό? Μεταβάλετε το πρόγραµµα ώστε να αφαιρεί τους αριθµούς 3 και 4 (3-4) µε SEC και χωρίς. Ποιο αποτέλεσµα είναι το σωστό? Εξηγήστε το αποτέλεσµα. Άσκηση 3.2: Γράψτε ένα πρόγραµµα που να αφαιρεί δύο προσηµασµένους αριθµούς των 8 bit που βρίσκονται στις θέσεις µνήµης 50 και 51 και να τοποθετεί το αποτέλεσµα στην θέση µνήµης 52. Κάντε δοκιµή για τα παρακάτω δεδοµένα : 50 51 52 Overflow? Negative? Σωστό αποτέλεσµα? 111 10 (6F 16 ) 112 10 (70 16 ) -1 10 (FF 16 ) 2 10 (02 16 ) -128 10 (80 16 ) 1 10 (01 16 ) Άσκηση 3.3: Γράψτε ένα πρόγραµµα που να αφαιρεί τον 24-bit προσηµασµένο αριθµό που βρίσκεται στις θέσεις µνήµης 0203, 0204 και 0205 (Υ.Τ.Β. στην 0205) από τον 24-bit προσηµασµένο αριθµό που βρίσκεται στις θέσεις µνήµης 0200, 0201, και 0202 (Υ.Τ.Β. στην 0202). Βάλτε το αποτέλεσµα της αφαίρεσης στις θέσεις 0206, 0207, 0208. Η δοµή του προγράµµατος θα είναι όµοια µε αυτή του προγράµµατος πρόσθεσης 16-bit αριθµών της προηγούµενης άσκησης.. Εκτελέστε το πρόγραµµά σας κάνοντας τις 2 αφαιρέσεις: 267BFB 74A017 028488-01D4C0 και συµπληρώστε τον παρακάτω πίνακα. Ε11

Μειωτέος Αφαιρέτης ιαφορά 0200 0201 0202 0203 0204 0205 0206 0207 0208 Αποτέλεσµα Σωστό? Είναι το κάθε αποτέλεσµα σωστό; Τι ελέγξατε για να διαπιστώσετε εάν είναι ή όχι σωστό; Το παραπάνω πρόγραµµα περιέχει τρεις διαδοχικές αφαιρέσεις των δύο BYTES. Πως µπορείτε να προσδιορίσετε ποια από αυτές δηµιούργησε "δανεικό" χωρίς να κάνετε την αφαίρεση µε το χέρι ; (Υπόδειξη: Θυµηθείτε ότι το κρατούµενο 0 σηµαίνει ύπαρξη 'δανεικού'). Χρησιµοποιώντας τη µέθοδο που προτείνετε, βρείτε το συνολικό αριθµό των δανεικών των προηγούµενων αφαιρέσεων. Συνολικός αριθµός "δανεικών" 1 ης αφαίρεσης = Συνολικός αριθµός "δανεικών" 2 ης αφαίρεσης = Ε12

4 ο ΕΡΓΑΣΤΗΡΙΑΚΟ ΜΑΘΗΜΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ ΑΝΤΙΚΕΙΜΕΝΟ : Σύγκριση δύο αριθµών Χρησιµοποίηση βρόχων ΘΕΩΡΗΤΙΚΟ ΜΕΡΟΣ Εάν θέλουµε να συγκρίνουµε δύο αριθµούς καταχωρούµε τον ένα σε κάποιον καταχωρητή π.χ. το συσσωρευτή και τον άλλο σε κάποια συγκεκριµένη θέση µνήµης. Έπειτα, µε µια από τις εντολές σύγκρισης, π.χ. την CMP που συγκρίνει το περιεχόµενο συσσωρευτή και µνήµης, κάνουµε τη σύγκριση. Τα αποτελέσµατα της σύγκρισης τα βλέπουµε παρατηρώντας τα τρία bit N,Z,C του καταχωρητή κατάστασης και καταλαβαίνουµε ποιος αριθµός είναι µικρότερος ή µεγαλύτερος µε βάση τον πίνακα : Σύγκριση καταχωρητή R και µνήµης M C bit Z bit N bit (για προσηµασµένους) R < M (BCC) 0 0 1 R M (BCS) 1 0 0 R = M (BEQ) 1 1 0 ΕΡΓΑΣΤΗΡΙΑΚΟ ΜΕΡΟΣ Χρησιµοποιούµενες εντολές: CMP, CPX, CPY : Σύγκριση των περιεχοµένων του καταχωρητή A, X, Y και µνήµης Bnn (BCC, BCS, BEQ, BNE) : Eντολές διακλάδωσης υπό συνθήκη JMP : Εντολή άλµατος άνευ συνθήκης σε κάποια διεύθυνση STX, STY : Εντολές αποθήκευσης περιεχοµένων των Χ, Υ καταχωρητών στη µνήµη Άσκηση 4.1: Γράψτε ένα πρόγραµµα που θα ταξινοµεί δύο µη προσηµασµένους αριθµούς κατ αύξουσα σειρά. Οι δύο αριθµοί περιέχονται στις θέσεις µνήµης 20, 21. Εάν η θέση µνήµης 20 έχει µεγαλύτερο αριθµό από την 21 τότε θα εναλλάσσονται τα περιεχόµενά τους. Εάν είναι ίσα ή Ε13

µικρότερα θα µείνουν όπως είναι. Επίσης η θέση µνήµης 22 να περιέχει µετά την εκτέλεση της σύγκρισης έναν από τους τρεις αριθµούς 0,1,2 όπως παρακάτω : 22----0 εάν τα περιεχόµενα της 20 είναι µικρότερα απ της 21. 22----1 εάν τα περιεχόµενα της 20 είναι ίσα µε της 21. 22----2 εάν τα περιεχόµενα της 20 είναι µεγαλύτερα απ της 21. Χρησιµοποιήστε τον καταχωρητή Χ για προσωρινή αποθήκευση εάν απαιτείται εναλλαγή των θέσεων 20, 21. Παρακάτω για βοήθεια δίνουµε το BLOCK διάγραµµα του προγράµµατος. ΑΡΧΗ Φόρτωσε στον Acc τη θέση 21 Ναι 20>21; Όχι Εναλλαγή 20, 21 20=21 Ναι είκτης =2 είκτης =0 Όχι είκτης =1 Φόρτωσε το δείκτη στη θέση 22 Ε14

Εκτελέστε το πρόγραµµα για τις παρακάτω τιµές και συµπληρώστε τον πίνακα για κάθε περίπτωση. Μετά την εκτέλεση της σύγκρισης να ελέγξετε επίσης και τις θέσεις µνήµης 20, 21 από τις οποίες η 20 θα πρέπει να περιέχει το µικρότερο αριθµό και η 21 το µεγαλύτερο. 0020 0021 0022 96 0Β 96 96 00 28 00 00 Ε15

5 ο ΕΡΓΑΣΤΗΡΙΑΚΟ ΜΑΘΗΜΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ ΑΝΤΙΚΕΙΜΕΝΟ : Εύρεση του µεγαλυτέρου αριθµού από µια πλειάδα αριθµών µε εντολές σύγκρισης και διακλάδωσης ΘΕΩΡΗΤΙΚΟ ΜΕΡΟΣ Εάν έχουµε µια οµάδα αριθµών σε κάποιες θέσεις µνήµης (έναν σε κάθε θέση) τότε για να βρούµε τον µεγαλύτερο απ αυτούς θα κάνουµε διαδοχικές συγκρίσεις ανά δύο των αριθµών, αρχίζοντας απ τον πρώτο µε τον δεύτερο, βρίσκοντας κάθε φορά τον µεγαλύτερο, τον οποίον θα συγκρίνουµε µε τον επόµενο στη σειρά και θα βρούµε τον µεγαλύτερο, τον οποίο θα συγκρίνουµε µε τον επόµενο στη σειρά κ.ο.κ. Κάθε φορά, σε κάθε σύγκριση, τον µεγαλύτερο που θα βρίσκουµε θα τον καταχωρούµε σ έναν καταχωρητή (π.χ. τον συσσωρευτή) ούτως ώστε στο τέλος να υπάρχει ο µεγαλύτερος απ όλους τους αριθµούς στο συγκεκριµένο καταχωρητή. Πριν γράψουµε το πρόγραµµα πρέπει να γνωρίζουµε πόσοι είναι οι αριθµοί που θα σαρώσουµε (ψάξουµε). Έτσι στην αρχή του προγράµµατος θα θέσουµε σε ένα δείκτη (έστω τον Χ) τον αριθµό 0 και µετά από κάθε σύγκριση θα αυξάνουµε κατά 1 τον δείκτη αυτό και αµέσως θα συγκρίνουµε µε τον αριθµό που φανερώνει το πλήθος των αριθµών µας, που για το παράδειγµά µας είναι 10. Εάν ο δείκτης είναι ίσος µ αυτόν τότε σηµαίνει πως έχουν γίνει όλες οι συγκρίσεις και σταµατάει το πρόγραµµα. Οι αριθµοί αρχίζουν από την θέση µνήµης 21. Η λογική του προγράµµατος έχει ως εξής: Θέτουµε τον δείκτη Χ= 0 Βάζουµε στον συσσωρευτή τον πρώτο αριθµό (απ την πρώτη θέση 21 της µνήµης). Συγκρίνουµε αυτόν µε την επόµενη θέση µνήµης Είναι µεγαλύτερη η µνήµη από τον συσσωρευτή; Αν ΝΑΙ βάζουµε στο συσσωρευτή το περιεχόµενο της συγκεκριµένης θέσης µνήµης και αυξάνουµε έπειτα τον δείκτη κατά 1. Αν ΟΧΙ αυξάνουµε κατ ευθείαν το δείκτη κατά 1. Συγκρίνουµε τον δείκτη µε το 9 για να διαπιστώσουµε αν έγιναν οι 10 επαναλήψεις. Το έχει ξεπεράσει; Αν ΟΧΙ επιστρέφουµε στην εντολή σύγκρισης για να συγκρίνουµε τον επόµενο αριθµό µε αυτόν του συσσωρευτή (τον µεγαλύτερο από τους δυο Ε16

προηγουµένους που συγκρίθηκαν). Αν ΝΑΙ βάζουµε το περιεχόµενο του συσσωρευτή σε κάποια θέση µνήµης (π.χ. 20) και σταµατάµε το πρόγραµµα. Στο Block διάγραµµα που υπάρχει παρακάτω χρησιµοποιούµε την θέση µνήµης 20 για να αποθηκεύσουµε τελικά τον µεγαλύτερο αριθµό απ όλους. ΑΡΧΗ είκτης = 0 Συσσωρευτής (21) Μνήµη > Συσσωρευτή Σύγκρινε µε την επόµενη Συσσωρευτή Μνήµη Μνήµη <= Συσσωρευτή Αύξησε κατά ένα τον δείκτη είκτης=9; Όχι Ναι Φόρτωσε τον συσσωρευτή στη θέση 20 ΤΕΛΟΣ Ε17

ΕΡΓΑΣΤΗΡΙΑΚΟ ΜΕΡΟΣ Άσκηση 5.1: Γράψτε το πρόγραµµα που βρίσκει τον µεγαλύτερο µη προσηµασµένο αριθµό από δέκα αριθµούς που βρίσκονται στις θέσεις µνήµης από 21 έως και 2Α και βάλτε τον στη θέση µνήµης 20. Ο πίνακας των αριθµών δίνεται παρακάτω. Θέση Μνήµης Περιεχόµενα 21 Α2 22 00 23 40 24 40 25 0Β 26 5A 27 FA 28 55 29 06 2Α 4F Τι θα περιέχει η θέση µνήµης 20 µετά την εκτέλεση του προγράµµατος; Άσκηση 5.2: Να γραφεί πρόγραµµα που να προσθέτει, µε χρήση βρόχου, τους αριθµούς 1+2+3+4+5 και να τοποθετεί το αποτέλεσµα στη διεύθυνση µνήµης 40. Άσκηση 5.3: Να τροποποιήσετε το ανωτέρω πρόγραµµα ώστε να προσθέτει τους αριθµούς 1+2+ +Ν όπου το Ν να είναι µεταβλητή και να βρίσκεται στη θέση µνήµης 41. Το αποτέλεσµα να τοποθετείται στην διεύθυνση µνήµης 40. Ε18

6 ο ΕΡΓΑΣΤΗΡΙΑΚΟ ΜΑΘΗΜΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ ΑΝΤΙΚΕΙΜΕΝΟ : Υπορουτίνες Σύγκριση και Πρόσθεση Πινάκων εδοµένων ΘΕΩΡΗΤΙΚΟ ΜΕΡΟΣ Οι υπορουτίνες αποτελούν αυτόνοµα τµήµατα κώδικα που διεκπεραιώνουν µία συγκεκριµένη εργασία και µπορούµε να τα καλούµε µέσα από το κυρίως πρόγραµµα όσες φορές χρειαστεί (π.χ. κώδικας που εναλλάσσει δύο θέσεις µνήµης, κώδικας που κάνει πολλαπλασιασµό ή διαίρεση, κώδικας πρόσθεσης αριθµών πολλών bytes, κ.λ.π.). Τα πλεονεκτήµατα της χρήσης των υπορουτίνων είναι : Συµβάλλουν στην µείωση του συνολικού όγκου του κώδικα σε περίπτωση ύπαρξης όµοιων επαναλαµβανόµενων τµηµάτων Καθιστούν την διόρθωση πιο εύκολη γιατί διορθώνουµε τον κώδικα της υπορουτίνας µία φορά και η διόρθωση ισχύει για όλο το πρόγραµµα Κάνουν τον κώδικα πιο κατανοητό και δίνουν την δυνατότητα επαναχρησιµοποίησης του κώδικα. Για την υλοποίηση των υπορουτίνων σε προγράµµατα γλώσσας µηχανής ο 6502 µας παρέχει τις εξής εντολές : JSR XXXX (π.χ. JSR 0200) Jump to SubRoutine. Μεταφέρει την εκτέλεση του προγράµµατος στην υπορουτίνα που βρίσκεται στην διεύθυνση ΧΧΧΧ. Η εκτέλεση του προγράµµατος θα επιστρέψει στο κυρίως πρόγραµµα και στην εντολή που βρίσκεται αµέσως µετά την JSR όταν κατά την εκτέλεση του κώδικα της υπορουτίνας συναντηθεί η εντολή RTS (ReTurn from Subroutine). RTS ReTurn from Subroutine. Ολοκληρώνει την εκτέλεση της υπορουτίνας και επαναφέρει την εκτέλεση του προγράµµατος στην αµέσως επόµενη εντολή από την αντίστοιχη εντολή JSR που εκτέλεσε την συγκεκριµένη υπορουτίνα. Ε19

Επειδή κατά την εκτέλεση του κώδικα της υπορουτίνας θα χρησιµοποιηθούν πιθανότατα οι καταχωρητές του επεξεργαστή (A, X, Y, SR κ.λ.π.,) θα πρέπει να διασφαλίσουµε ότι οι τιµές των καταχωρητών κατά την επιστροφή από την υπορουτίνα (RTS) θα πάρουν τις τιµές που είχαν λίγο πριν καλέσουµε την υπορουτίνα (JSR). Έτσι, δεν θα αλλοιωθεί η κανονική εξέλιξη του κυρίως προγράµµατος από την εµβόλιµη εκτέλεση της υπορουτίνας. Για τον λόγο αυτό πριν την εκτέλεση της υπορουτίνας θα πρέπει να σώσουµε κάπου την κατάσταση των καταχωρητών και να την επαναφέρουµε αµέσως µετά το RTS. Ο τόπος που σώζονται οι τιµές των καταχωρητών είναι ο σωρός (stack) και αυτό γίνεται µε τέσσερις εντολές γλώσσας µηχανής : PHA : Σώζει τον καταχωρητή Α στον σωρό (stack). PHP : Σώζει τον Καταχωρητή Κατάστασης SR (Status Register) στον σωρό. PLA : Επαναφέρει τον καταχωρητή Α από τον σωρό. PLP : Επαναφέρει τον Καταχωρητή Κατάστασης SR από τον σωρό. Παρατηρήστε την απουσία εντολών για σώσιµο/ανάκτηση των X και Υ registers που αν χρειαστεί γίνεται έµµεσα µέσω του καταχωρητή Α. Έτσι κατά την εκτέλεση µίας υπορουτίνας θα πρέπει να ενσωµατώνουµε πάντα (εφόσον βέβαια χρειάζεται) τον παρακάτω κώδικα : PHP PHA TXA PHA TYA PHA JSR XXXX PLA TAY PLA TAX PLA PLP ;σώσιµο του SR ;σώσιµο του Α ;σώσιµο του Χ ;σώσιµο του Υ ;ανάκτηση του Υ ;ανάκτηση του Χ ;ανάκτηση του Α ;ανάκτηση του SR Παρατηρήστε ότι η ανάκτηση των καταχωρητών από τον σωρό γίνεται µε ανάποδη σειρά από το σώσιµο καθώς ο σωρός έχει δοµή LIFO (Last In First Out). Παρατηρήστε επίσης ότι για το σώσιµο/ανάκτηση των καταχωρητών Χ και Υ χρησιµοποιείται και πάλι ο Α µε εντολές Transfer (TXA, TYA, TAY, TAX). Παραδείγµατα προγραµµάτων µε χρήση υπορουτίνων : Παράδειγµα 1 (Η υπορουτίνα αλλοιώνει την τιµή του Α στο κυρίως πρόγραµµα) 0100 LDA #FF 0102 JSR 0200 0105 BRK Ε20

0200 LDA #01 0202 RTS Παράδειγµα 2 (Η υπορουτίνα χρησιµοποιεί τον Α και µεταβάλλει τον SR αλλά µε σώσιµο/ανάκτηση των καταχωρητών στο σωρό δεν επηρεάζεται το κυρίως πρόγραµµα) 0100 LDA #FF 0102 CLC 0103 PHA 0104 PHP 0105 JSR 0200 0107 PLP 0108 PLA 0109 BRK 0200 LDA #01 0202 SEC 0203 RTS ΕΡΓΑΣΤΗΡΙΑΚΟ ΜΕΡΟΣ Άσκηση 6.1: Να γίνει πρόγραµµα που θα συγκρίνει τα περιεχόµενα δύο πινάκων δεδοµένων που βρίσκονται στις θέσεις µνήµης 0200, 0201, 0202,.,0209 και 0300, 0301, 0302,..0309 ανά δυο αντίστοιχα (0200 µε 0300, 0201 µε 0301, κ.ο.κ.) και να βάζει στις αντίστοιχες θέσεις του πίνακα 0400, 0401, 0402,,0409 το 00 αν είναι ίσα και το FF αν είναι διαφορετικά. Στην επόµενη σελίδα δίνεται το λογικό διάγραµµα της λύσης του προβλήµατος. Το πρόγραµµα θα έχει ως εξής : LDX #00 loop LDA 0200, X CMP 0300, X BEQ equal LDA #FF JMP check_loop equal LDA #00 JMP check_loop check_loop STA 0400,X INX CPX #0Α BNE loop BRK Ε21

ΑΡΧΗ Χ = 00 Συσσωρευτής (0200 + Χ) Α<>Μ Σύγκριση Α και (0300+Χ) Α=Μ (0400+X) FF (0400+X) 00 Αύξησε κατά ένα τον δείκτη X=X+1 X=1O; Όχι ΤΕΛΟΣ ΝΑΙ Χ= 0,1,2,3,..,9 Ε22

Για παράδειγµα, δώστε στους πίνακες στις θέσεις 0200..0209 και 0300..0309 τις παρακάτω τιµές. Αν το πρόγραµµά σας λειτουργεί σωστά θα πρέπει στον πίνακα στις θέσεις 0400..0409 να πάρετε τις παρακάτω τιµές. 0200 FF 0300 DD 0400 FF 0201 23 0301 23 0401 00 0202 A0 0302 A1 0402 FF 0203 23 0303 32 0403 FF 0204 45 0304 54 0404 FF 0205 1A 0305 1A 0405 00 0206 0C 0306 AB 0406 FF 0207 66 0307 AC 0407 FF 0208 99 0308 AC 0408 FF 0209 FC 0309 FC 0409 00 Άσκηση 6.2: Να γραφεί πρόγραµµα που να προσθέτει δύο πίνακες 10 θέσεων που βρίσκονται στις διευθύνσεις µνήµης 0200 και 0300 αντίστοιχα και να τοποθετεί τον πίνακα-αποτέλεσµα στην θέση 0400 Άσκηση 6.3: Να γραφεί το ίδιο πρόγραµµα µε χρήση υπορουτίνας για την πρόσθεση κάθε στοιχείου των πινάκων Ε23

7 ο ΕΡΓΑΣΤΗΡΙΑΚΟ ΜΑΘΗΜΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ ΑΝΤΙΚΕΙΜΕΝΟ : Ταξινόµηση Πινάκων Ένθετοι βρόχοι ΘΕΩΡΗΤΙΚΟ ΜΕΡΟΣ Για την ταξινόµηση πινάκων έχουν αναπτυχθεί αρκετοί αλγόριθµοι, µε διαφορετικές αποδόσεις, αναλόγως του πλήθους των στοιχείων του πίνακα και του κατά πόσο είναι ήδη µερικώς ταξινοµηµένα. Από τους πιο δηµοφιλείς, για εκπαιδευτική χρήση κυρίως, αλγορίθµους είναι ο Bubblesort, ή µέθοδος των φυσαλίδων. Στον αλγόριθµο αυτόν, για να πραγµατοποιηθεί αύξουσα ταξινόµηση, το πρώτο στοιχείο του πίνακα συγκρίνεται µε το δεύτερο. Εάν το πρώτο στοιχείο είναι µεγαλύτερο, τα στοιχεία ανταλλάσσουν τις θέσεις τους. Έπειτα το δεύτερο στοιχείο συγκρίνεται µε το τρίτο, ανταλλάσσονται αν χρειάζεται κ.ο.κ. Μόλις ο Μ/Ε φθάσει στο τέλος του πίνακα (1 ο πέρασµα του πίνακα) το µεγαλύτερο στοιχείο θα έχει φθάσει στην τελευταία θέση του πίνακα. Εάν στο 1 ο πέρασµα έχει συµβεί έστω µια εναλλαγή τότε ο Μ/Ε θα ξανακάνει και 2 ο πέρασµα του πίνακα κ.ο.κ. Το εάν έγινε ή όχι εναλλαγή σε δυο στοιχεία του πίνακα το βλέπουµε σε µια θέση µνήµης η οποία πριν το πέρασµα του πίνακα είναι 00 και σε κάθε εναλλαγή θέσεων αυξάνει το περιεχόµενό της. Όταν λοιπόν µετά από ένα πέρασµα του πίνακα το περιεχόµενό της συγκεκριµένης θέσης είναι διάφορο του 0 σηµαίνει ότι έγινε τουλάχιστο µια εναλλαγή και πρέπει να συνεχιστούν τα περάσµατα. Τα περάσµατα θα είναι τόσα ώστε στο τελευταίο πέρασµα να µη συµβεί εναλλαγή. Παράδειγµα : Έστω ο πίνακας: 05, 03, 04, 01, 02 µετά το 1 ο πέρασµα του πίνακα η διάταξή του θα είναι: 03, 04, 01, 02, 05 (συνέβησαν 4 εναλλαγές) µετά το 2 ο πέρασµα του πίνακα η διάταξή του θα είναι: 03, 01, 02, 04, 05 (συνέβησαν 2 εναλλαγές) µετά το 3 ο πέρασµα του πίνακα η διάταξή του θα είναι: 01, 02, 03, 04, 05 (συνέβησαν 2 εναλλαγές) Ε24

το 4 ο πέρασµα θα είναι το τελευταίο όπου δεν θα συµβούν εναλλαγές και θα καταλάβει ο Μ/Ε ότι έχει τακτοποιηθεί ο πίνακας. ΕΡΓΑΣΤΗΡΙΑΚΟ ΜΕΡΟΣ Άσκηση 7.1: Να γίνει πρόγραµµα που να ταξινοµεί κατ αύξουσα σειρά, µε τον αλγόριθµο Bubblesort, τους αριθµούς τιµές ενός πίνακα που βρίσκεται στις θέσεις µνήµης 0020 0029 (10 τιµές). ηλαδή το µικρότερο να τοποθετείται στη θέση 0020 και το µεγαλύτερο στη θέση 0029. Στο παρακάτω πρόγραµµα χρησιµοποιούµε ως σηµαία ή δείκτη εναλλαγής τη θέση µνήµης 32 της οποίας το περιεχόµενο αυξάνουµε κάθε φορά που γίνεται µια εναλλαγή θέσεων. Το BLOCK διάγραµµα του προγράµµατος θα έχει ως εξής: Σηµαία εναλλαγής (θέση 32) = 00 Χ = 00 Α (20 + Χ) Χ = Χ + 1 Εναλλαγή θέσεων Α>(20+Χ) Σύγκριση Α και (20+Χ) (32) =(32) + 1 Χ=09; Α<=(20+Χ) ΟΧΙ Θέση 32=00; ΝΑΙ ΟΧΙ ΤΕΛΟΣ Ε25