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

Σχετικά έγγραφα
Συστήματα Μικροϋπολογιστών

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

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

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

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

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

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

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

ΑΣΚΗΣΕΙΣ ΣΤΑ ΣΥΣΤΗΜΑΤΑ ΑΡΙΘΜΗΣΗΣ (σελ στο ΜΥ1011Χ.pdf)

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

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

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

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

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

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

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

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

Πληροφορική. Ενότητα 4 η : Κωδικοποίηση & Παράσταση Δεδομένων. Ι. Ψαρομήλιγκος Τμήμα Λογιστικής & Χρηματοοικονομικής

Λογικός Σχεδιασµός και Σχεδιασµός Η/Υ. ΗΜΥ-210: Εαρινό Εξάµηνο Σκοπός του µαθήµατος. Ψηφιακά Συστήµατα. Περίληψη. Εύρος Τάσης (Voltage(

Μάθημα 2: Παράσταση της Πληροφορίας

Πρόγραμμα Επικαιροποίησης Γνώσεων Αποφοίτων ΑΡΙΘΜΗΤΙΚΑ ΣΥΣΤΗΜΑΤΑ

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

10-δικό δικό

ΘΕΜΑΤΑ & ΕΝΔΕΙΚΤΙΚΕΣ ΛΥΣΕΙΣ

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

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

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

Αριθμητικά Συστήματα Η ανάγκη του ανθρώπου για μετρήσεις οδήγησε αρχικά στην επινόηση των αριθμών Κατόπιν, στην επινόηση συμβόλων για τη παράσταση

Εισαγωγή στον Προγραμματισμό

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

Κ15 Ψηφιακή Λογική Σχεδίαση 2: Δυαδικό Σύστημα / Αναπαραστάσεις

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

Κεφάλαιο 1. Συστήματα αρίθμησης και αναπαράστασης

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

Αριθμητικά Συστήματα = 3 x x x x 10 0

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

Ελίνα Μακρή

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

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

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

ΠΛΗ10 Κεφάλαιο 2. ΠΛH10 Εισαγωγή στην Πληροφορική: Τόμος Α Κεφάλαιο: : Συστήματα Αρίθμησης ΔΥΑΔΙΚΟ ΣΥΣΤΗΜΑ ΑΡΙΘΜΗΣΗΣ

Τμήμα Μηχανολόγων Μηχανικών Πανεπιστήμιο Θεσσαλίας ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ. Βασικές Έννοιες Προγραμματισμού. Ιωάννης Λυχναρόπουλος Μαθηματικός, MSc, PhD

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

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

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

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

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

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

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

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

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

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

Εισαγωγή στην επιστήμη των υπολογιστών. ΑΡΙΘΜΗΤΙΚΑ ΣΥΣΤΗΜΑΤΑ και Μετατροπές Αριθμών

Περιεχόμενο: Δομή υπολογιστή Συστήματα αρίθμησης

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

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

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

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

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

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

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

Συστήματα Μικροϋπολογιστών. Παραδείγματα χρήσης διαδικασιών Εισόδου Εξόδου δεδομένων στον με 8085

74HC573 D7 D6 D5 D4 D3 D2 D1 D0 LE OE A0 A1 A2 A3 A4 A5 A6 A7 AD0 AD1 AD2 AD3 AD4 AD5 AD6 AD7 A8 A9 A10 A11 A12 A13 Q7 Q6 Q5 Q4 Q3 Q2 Q1 Q0

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

Συστήµατα Αριθµών, Πληροφορία, και Ψηφιακή Υπολογιστές

Εισαγωγή στην πληροφορική

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

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

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

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

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

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


Υπολογιστές και Πληροφορία 1

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

ΠΑΡΑ ΕΙΓΜΑ 8 ΓΕΝΝΗΤΡΙΑ ΨΕΥ ΟΤΥΧΑΙΩΝ ΑΡΙΘΜΩΝ (PSEUDORANDOM GENERATOR) 8.0 ΓΕΝΙΚΑ

Κεφάλαιο 2 Κωδικοποίηση & Αποκωδικοποίηση

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

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

ΨΗΦΙΑΚΗ ΛΟΓΙΚΗ ΣΧΕ ΙΑΣΗ

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

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

Οργάνωση και Σχεδίαση Υπολογιστών Η ιασύνδεση Υλικού και Λογισµικού, 4 η έκδοση. Κεφάλαιο 3. Αριθµητική για υπολογιστές

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

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

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

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

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

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

Επανάληψη Βασικών Στοιχείων Ψηφιακής Λογικής

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

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

Κατακερματισμός (Hashing)

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

Αρχιτεκτονική Υπολογιστών. Data. Κείμενο. Βίντεο. Αριθμοί Εικόνες. Ήχοι

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

Ασκήσεις Φροντιστηρίου «Υπολογιστική Νοημοσύνη Ι» 5 o Φροντιστήριο

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

Ψηφιακά Συστήματα. 2. Κώδικες

Ψηφιακά Συστήματα. 6. Σχεδίαση Συνδυαστικών Κυκλωμάτων

Transcript:

ΑΛΓΟΡΙΘΜΟΙ ΜΕΤΑΤΡΟΠΗΣ ΣΥΣΤΗΜΑΤΩΝ Report για το αντίστοιχο project στο µάθηµα µικροϋπολογιστών Ι. Πόθος Βασίλειος Α.Μ.3120

2 Εισαγωγή Εισαγωγή Ο άνθρωπος από την αρχή της ιστορίας του προσπαθούσε να κατανοήσει τον φυσικό κόσµο που τον περιβάλλει. Ο µόνος τρόπος για να µπορέσει να το κάνει αυτό, ήταν να µπορέσει να τον προσεγγίσει όσο περισσότερο µπορεί µε την λογική του. Για να το κάνει αυτό, έπρεπε πρώτα να µπορέσει να βρεί τις κατάλληλες εκφράσεις, για να µπορέσει να περιγράψει αυτά που βλέπει, και έπειτα, βασισµένος σ αυτές τις εκφράσεις να προχωρήσει στην δηµιουργεία κάποιων θεωριών. Όπως έχει αποδειχτεί, κάθε θεωρία του σύνχρονου πλέον ανθρώπου στηρίζεται στα µαθηµατικά στις αριθµητικές πράξεις. Για λόγους, οι οποίοι πιθανών να προέρχονται από τα χρόνια της εµφάνισης του ανθρώπου στη γή, ο άνθρωπος στις θεωρίες που έφτιαξε και συνεχίζει να φτιάχνει χρησιµοποιεί το δεκαδικό σύστηµα αρίθµησης, γιατί φαίνεται είναι πιό κοντά στη «φύση» του. υστυχώς, το δεκαδικό σύστηµα αρίθµησης δεν φαίνεται να είναι και τόσο κοντά στην ίδια τη φύση. Εκεί υπάρχει κι ένα άλλο σύστηµα αρίθµησης, το οποίο όµως έχει και την ικανότητα, πέρα από την απαρίθµηση, να περιγράφει και λογικές διαδικασίες που συµβαίνουν. υστυχώς όµως είναι ποιό περίπλοκο από το δεκαδικό. Αυτό το σύστηµα είναι το δυαδικό. Από τότε που ο άνθρωπος το µελέτησε και το κατανόησε, µπόρεσε να φτιάξει ως ένα βαθµό, αντικείµενα µε «λογική»! Βλέπωντας λοιπόν ο άνθρωπος πως αυτό το νέο σύστηµα απαρίθµησης, του πρόσφερε περισσότερα από ότι το δεκαδικό - αν και είναι δυσκολότερο, προσπάθησε να βρεί και άλλα συστήµατα απαρίθµησης, τα οποία θα τον ωφελούσαν, είτε να προσεγγίσει περισσότερο την φύση, είτε να χρησιµοποιήσει πιό εύκολα τα νέα συστήµατα που κατασκεύαζε. Για την δεύτερη περίπτωση, τα δύο νέα και ποιό γνωστά συστήµατα που εφεύρεσε προκειµένου να µπορέσει να χρησιµοποιήσει ευκολότερα το δυαδικό σύστηµα, ήταν το BCD (Binary Code Demical), και το δεκαεξαδικό σύστηµα απαρίθµησης ΗΕΧ. Επίσης θεωρήθηκε χρήσιµο κι άλλο ένα σύστηµα απαρίθµησης, το οκταδικό OCT, ενώ κρίθηκε αναγκαία η δηµιουργεία ενός συστήµατος κωδικοποιηµένων αριθµών που ν αντιστοιχούν σε σύµβολα, το οποίο είναι διεθνές σαν κώδικας ASCII. Είναι φανερό, πως δεν είναι αρκετή µόνο η δηµιουργεία αυτών των συστηµάτων αλλά και η δυνατότητα να µπορούµε να µεταβαίνουµε από το ένα στο άλλο, όσο πιό εύκολα και πιό γρήγορα γίνεται. Σήµερα, όπου αυτά τα συστήµατα χρησιµοποιούνται κατα κόρον, υπάρχουν αρκετοί και διαφορετικοί τρόποι για αυτές τις µεταβάσεις. Άλλοι είναι πιό δύσκολοι και πιό γρήγοροι, και άλλοι πιο εύκολοι και πιό αργοί (µε την έννοια ότι για να γίνει µια τέτοια µετατροπή χρειάζεται µια ακολουθεία από συγκεκριµένες πράξεις στο ένα ή στο άλλο σύστηµα). Ο σκοπός λοιπόν, του project στο οποίο αναφέρεται αυτό το report, είναι η δηµιουργεία ενός προγράµµατος σε assembly, το οποίο να µπορεί να µετατρέπει αριθµούς, από το ένα σύστηµα στο άλλο. Τα συστήµατα στα οποία κάνει µετατροπή το πρόγραµµα του project, είναι το DEC,BIN,HEX,OCT και ASCII

3 1.Γενικό σχεδιάγραµµα προγράµµατος ΚΕΦΑΛΑΙΟ 1 ΓΕΝΙΚΟ ΣΧΕ ΙΑΓΡΑΜΜΑ ΠΡΟΓΡΑΜΜΑΤΟΣ 1.1 Γενικό σχεδιάγραµµα. Το πρόγραµµα κατ αρχήν µπορεί να κάνει τις εξής µετατροπές: DEC --> HEX, DEC --> BIN, DEC --> OCT, HEX --> DEC, ΗEX --> BIN, HEX --> OCT, ΗEX --> ASCII, ΒIN --> DEC, BIN --> HEX, BIN --> OCT, OCT --> DEC, OCT --> HEX, OCT --> BIN, και ASCII -> HEX. Το ποιά µετατροπή θα κάνει κάθε φορά εξαρτάται από ένα συµβολικό νούµερο το οποίο µπαίνει στην θέση µνήµης 5000 Η του µικροϋπολογιστικού συστήµατος. Παρακάτω δίνεται η αντιστοιχεία αυτών των συµβολικών αριθµών στις αντίστοιχες µετατροπές. Πχ, αν το νούµερο στην θέση µνήµης 5000 Η είναι το Α1, έχουµε µετατροπή από δεκαδικό σε δεκαεξαδικό. A1 : DEC --> HEX A2 : DEC --> BIN A3 : DEC --> OCT B1 : HEX --> DEC B2 : HEX --> BIN B3 : HEX --> OCT B4 : HEX --> ASCII C1 : BIN --> DEC C2 : BIN --> HEX C3 : BIN --> OCT D1 : OCT --> DEC D2 : OCT --> HEX D3 : OCT --> BIN E1 : ASCII -> HEX Ας σηµειωθεί πως το δεκαδικό σύστηµά, σαν αναπαράσταση στην µνήµη του µικροϋπολογιστικού συστήµατος, συµπίπτει µε το BCD. Εποµένως οι µετατροπές που περιλαµβάνουν δεκαδικό σύστηµα, αντιστοιχούν σε µετατροπές σε BCD. Άλλωστε δεν πρέπει να ξεχνάµε, πως το BCD είναι τρόπος απεικόνησης στο δεκαδικό σύστηµα του δυαδικού συστήµατος. Είναι µάλλον φανερό, πως επειδή η µνήµη µας περιορίζει στην αναπαράσταση των αριθµών µε 8-bit, δέν είναι δυνατό να αναπαραστήσουµε τιµές που να έχουν τιµή πάνω από 255 D (ή FF H ). Όµως δεν είναι κι αδύνατο να κάνουµε κάτι τέτοιο. Πχ. αν παίρναµε κατά σύµβαση ότι κάθε αριθµός αντιστοιχεί σε δύο θέσης µνήµης των 8-bit, θα είχαµε µέγιστο αριθµό 65535 D µή προσηµασµένο. Κάτι τέτοιο θα απαιτούσε διαφορετική προσέγγιση και υλοποίηση του προγράµµατος, και ξεφεύγει από το πρόγραµµα που ήδη έχω υλοποιήσει. Παρ όλα αυτά για την αντιµετώπιση αριθµών πάνω του 99 D, ή του 77 Ο, κάνω χρήση µίας επιπλέον θέσης µνήµης, για το 3 ο ψηφίο. Παρακάτω, στο σχήµα 1.1 δίνεται το γενικό σχεδιάγραµµα του προγράµµατός µου, µε βάση τις υπορουτίνες που χρησιµοποιεί.

4 1.1Γενικό σχεδιάγραµµα Σχήµα 1.1: Γενικό σχεδιάγραµµα προγράµµατος. Οι παχιές γραµµές δείχνουν την ροή του προγράµµατος. Όπου υπάρχουν κόµβοι, σηµαίνει πως η ροή του προγράµµατος αλλάζει ανάλογα µε το τί µετατροπή θέλουµε να έχουµε. Τέλος οι λεπτές γραµµές, υποδηλώνουν αν υπάρχουν- το πού θα βγεί το αποτέλεσµα της συγκεκριµένης υπορουτίνας από την οποία ξεκινάν. Πχ, για µετατροπή από BIN σε ΗΕΧ, καλείται η υπορουτίνα BIN2HEX, δίνει ένα αποτέλεσµα, και µετά καλείται η CLEARINPUTADDR. Για µετατροπή, ΒΙΝ σε DEC, καλείται πρώτα η υπορουτίνα BIN2HEX, βγάζει ένα αποτέλεσµα, και µετά καλείται η δεύτερη υπορουτίνα HEX2DEC η οποία χρησιµοποιεί το προηγούµενο αποτέλεσµα για να τελειώσει την µετατροπή. Και τέλος καλείται η CLEARINPUTADDR. Η συνάρτηση CLEARINPUTADDR δεν κάνει τίποτα άλλο από το να µηδενίζει της θέσεις µνήµης µετά του αποτελέσµατος, ώστε αυτός που θα τρέξει το πρόγραµµα στον simulator 8085, να µην µπερδευτεί ψάχνοντας το αποτέλεσµα στην µνήµη. Αυτό σηµαίνει ότι δεν είναι απαραίτητη, αν το παραπάνω πρόγραµµα χρησιµοποιηθεί σαν κοµµάτι υποκώδικα σε κάποια άλλη εφαρµογή. Από το παραπάνω σχεδιάγραµµα φαίνεται επίσης ότι υπάρχουν κάποιες βασικές συναρτήσεις µετατροπής συστηµάτων, οι οποίες χρησιµοποιούν κάποιες άλλες «βοηθητικές» συναρτήσεις προκειµένου να παράγουν αποτέλεσµα (πχ. Η ASCII2HEX χρησιµοποιεί την ASCII2HEXORDER), καθώς επίσης και κάποιες συναρτήσεις οι οποίες χρησιµοποιούν συνδιασµό των βασικών συναρτήσεων προκειµένου να παράγουν κάποιο αποτέλεσµα (πχ. Η DEC2BIN είναι ένας συνδιασµός των DEC2HEX & HEX2BIN). Προκειµένου να γίνει ένας καλύτερος διαχωρισµός των συναρτήσεων που χρησιµοποιώ, τις χωρίζω σε συναρτήσεις επιπέδων(levels). Έτσι σαν συναρτήσεις επιπέδου 0 (level 0) ορίζω τις «βοηθητικές» συναρτήσεις που είναι απαραίτητες για την λειτουργεία των βασικών συναρτήσεων. Σαν συναρτήσεις επιπέδου 1 (level 1) ορίζω τις βασικές συναρτήσεις µετατροπής που χρησιµοποιούν τις συναρτήσεις level 0. Και τέλος σαν συναρτήσεις επιπέδου 2 (level 2) ορίζω τις συναρτήσεις µετατροπής συστηµάτων οι οποίες απλώς χρησιµοποιούν συνδιασµό των βασικών (level 1) συναρτήσεων. Στην επόµενη σελίδα, στο σχήµα 1.2, δίνεται ένα σχηµατικό διαγράµµατα, που φαίνονται όλες οι συναρτήσεις, ανάλογα µε το επίπεδο (level) που ανήκουν.

5 1.Γενικό σχεδιάγραµµα προγράµµατος Σχήµα 1.2: Οι υπορουτίνες του προγράµµατος, διαχωρισµένες σε επίπεδα. Στα επόµενα κεφάλαια, θα γίνει µια παρουσίαση των υπορουτινών που αναφέρονται ποιο πάνω, ξεκινώντας από τις υπορουτίνες επιπέδου 0, και φτάνοντας στις υπορουτίνες επιπέδου 2. 1.2 Κυρίως πρόγραµµα. Το κυρίος πρόγραµµα είναι ο βασικός κώδικας, ο οποίος ανάλογα µε την µετατροπή που πρέπει να γίνει, καλεί τις αντίστοιχες συναρτήσεις. Κατ αρχήν αρχικοποιεί τον SP, στην θέση FFF0H, τον HL στην θέση 5000 Η, και φορτώνει την τιµή αυτής της θέσης µνήµης στον Α. Έπειτα µε µια σειρά από συγκρίσεις, αποφασίζει πιά µετατροπή πρέπει να γίνει, και καλεί την αντίστοιχη υπορουτίνα για εκείνη την µετατροπή. Τέλος καλεί την υποσυνάρτηση CLEARINPUTADDR προκειµένου να µηδενίσει πιθανών µη µηδενικές τιµές στις επόµενες θέσεις µνήµης µετά του αποτελέσµατος. Παρακάτω δίνεται ο κώδικας του κυρίου προγράµµατος.

6 2.1 Υπορουτίνες επιπέδου 0 Κώδικας: Κυρίως πρόγραµµα. LXI SP,FFF0H LXI H,5000H CPI A1H CZ DEC2HEX CPI A2H CZ DEC2BIN CPI A3H CZ DEC2OCT CPI B1H CZ HEX2DEC CPI B2H CZ HEX2BIN CPI B3H CZ HEX2OCT CPI B4H CZ HEX2ASCII CPI C1H CZ BIN2DEC CPI C2H CZ BIN2HEX CPI C3H CZ BIN2OCT CPI D1H CZ OCT2DEC CPI D2H CZ OCT2HEX CPI D3H CZ OCT2BIN CPI E1H CZ ASCII2HEX CALL CLEARINPUTADDR HLT

7 2.Επεξήγηση υπορουτινών προγράµµατος ΚΕΦΑΛΑΙΟ 2 ΕΠΕΞΗΓΗΣΗ ΥΠΟΡΟΥΤΙΝΩΝ ΤΟΥ ΠΡΟΓΡΑΜΜΑΤΟΣ 2.1 Υπορουτίνες επιπέδου 0 Υπορουτίνα ASCII2HEXORDER Καλεί τις: Καµία Καλείται από: ASCII2HEX Λειτουργία: Η υποσυνάρτηση αυτή συγκρίνει τα 4 LSBits του Α µε την τιµή 0Α Η. Αν από την σύγκριση δεν υπάρξει κρατούµενο, τότε αυτά τα τέσσερα bits παριστάνουν αριθµό από Α-F, οπότε προσθέτουµε 7 Η + 30 Η στον Α, και αυξάνοντας τον HL αποθηκεύουµε το νούµερό του Α στην µνήµη. Αν υπάρξει κρατούµενο τότε προστίθεται µόνο το 30 Η, και το αποτέλεσµα µε τον ίδιο τρόπο αποθηκεύεται στην µνήµη. Κώδικας: Υπορουτίνα ASCII2HEXORDER ASCII2HEXORDER: ANI 0FH CPI 0AH JC ASCII2HEXORDERH1 ADI 07H ASCII2HEXORDERH1: ADI 30H Υπορουτίνα ΗΕΧ2ΒΙΝΜΑΚΕ1 Καλεί τις: Καµία. Καλείται από: HEX2BIN Λειτουργία: Αυτή η υποσυνάρτηση πρώτα αντιγράφει τον Α στον Β. Έπειτα κάνει λογικό ΑΝD του Α µε τον D, και µετά σύγκριση του αποτελέσµατος µε τον D. Το τι περιέχει κάθε φορά ο Α και ο D, καθορίζεται από την συνάρτηση HEX2BIN. Αν οι δύο αριθµοί της σύγκρισης είναι ίδιοι, τότε σε κάποια θέση µνήµης που καθορίζεται από τον HL, αποθηκεύεται η τιµή 01 Η, ενώ αν είναι διαφορετικοί, αποθηκεύται η τιµή 00 H. Στο τέλος ξαναβάζει στον Α την αρχική του τιµή που είχε αποθηκευθεί στον B, και αυξάνει τον HL κατά 1.

8 2.1 Υπορουτίνες επιπέδου 0 Κώδικας: Υπορουτίνα HEX2BINMAKE1 HEX2BINMAKE1: MOV B,A MVI E,00H ANA D CMP D JNZ HEX2BINMAKE1P1 MVI E,01H HEX2BINMAKE1P1: MOV A,E MOV A,B Υπορουτίνα CLEARINPUTADDR Καλεί τις: Καµία. Καλείται από: Το κεντρικό πρόγραµµα. Λειτουργία: Μηδενίζει τις επόµενες 15 θέσεις από το τελικό αποτέλεσµα, προκειµένου να υπάρχει ένα καλύτερο οπτικό αποτέλεσµα µέσα από τον simulator8085. Η συνάρτηση αυτή δεν είναι απαραίτητη για την κανονική λειτουργεία του προγράµµατος. Κώδικας: Υπορουτίνα CLEARINPUTADDR CLEARINPUTADDR: MVI C,0FH CLEARINPUTADDRLOOP1: DCR C JNZ CLEARINPUTADDRLOOP1 Υπορουτίνα CLEAROUTPUTADDR Καλεί τις: Καµία. Καλείται από: ΗΕΧ2ΒΙΝ Λειτουργία: Όπως και η προηγούµενη συνάρτηση, έτσι κι αυτή µηδενίζει κάποιες βοηθητικές θέσεις µνήµης, που χρησιµοποιούνται από την HEX2BIN, προκειµένου να µπορέσει να λειτουργήσει. Αυτές οι θέσεις µνήµης αρχίζουν από την 5FB0. Και σ αυτή την περίπτωση, αυτή η υποσυνάρτηση δεν είναι απαραίτητη.

9 2.Επεξήγηση υπορουτινών προγράµµατος Κώδικας: Υπορουτίνα CLEAROUTPUTADDR CLEAROUTPUTADDR: PUSH H MVI C,09H LXI H,5FB0H CLEAROUTPUTADDRLOOP1: DCR C JNZ CLEAROUTPUTADDRLOOP1 POP H 2.2 Υπορουτίνες επιπέδου 1 Υπορουτίνα DEC2HEX Καλεί τις: Καµία Καλείται από: Κυρίως πρόγραµµα, DEC2BIN, DEC2OCT Λειτουργία: Η υπορουτίνα DEC2HEX, µετατρέπει αριθµούς από το 10δικό στο 16ξαδικό, οι οποίο βρίσκονται µέσα στην περιοχή (0 255) D, ή (0 FF) H. Για την υλοποίηση της δεν χρειάζεται να καλέσει άλλες υπορουτίνες είναι αυτόνοµη. Σαν δεδοµένα δέχεται έναν δεκάδικό αριθµό από το 0-255, του οποίο το ψηφίο των εκατοντάδων δίνεται στην θέση µνήµης 5001 Η, ενώ τα ψηφία των δεκάδων και µονάδων δίνονται µαζί στην θέση µνήµης 5002 Η. Πρέπει να ξανασηµειωθεί εδώ ότι αφού στο δεκαδικό σύστηµα, κάθε ψηφίο µπορεί να αναπαρασταθεί µ έναν αριθµό από το 0-9, µπορούµε να αντιστοιχήσουµε το DEC σύστηµα στο BCD σύστηµα. Εποµένως όπου µιλάω για DEC αναπαράσταση ισχύουν ακριβώς τα ίδια για την BCD αναπαράσταση. Η λογική πάνω στην οποία στηρίζεται ο αλγόριθµος προσπαθεί να εξηγηθεί από το επόµενο παράδειγµα. Υποθέτωντας ότι έχουµε τον δεκαδικό αριθµό, πχ. 127. Αυτός θα µπεί, ή θα υπάρχει στην µνήµη ώς εξής: Στην θέση 5001 Η, θα είναι το 01 -> 0000 0001, ενώ στην θέση 5002 Η, θα είναι το 27 -> 0010 0111. (Από εδώ φαίνεται καθαρά ότι η αναπαράσταση DEC και BCD στο πρόγραµµα είναι η ίδια). Κατ αρχήν γίνεται µετρατροπή του αριθµού 27 (0010 0111) σε ΗΕΧ, ενώ αφήνεται το ψηφίο των εκατοντάδων για αργότερα.. Όπως είναι φανερό ο µικροϋπολογιστής, καταλαβαίνει το νούµερο σαν 0010 0111 που είναι το 39 D, ενώ ο άνθρωπος το αντιλαµβανεται σαν 27 D. Πρέπει λοιπόν µε κάποιο τρόπο να δείξουµε στον µικροϋπολογιστή ότι το νούµερό δεν είναι το 39 D, αλλά το 27 D. Παρατηρείται ότι: (39-27) D = 12 D = (2 x 6) D. ηλάδή ο µικροϋπολογιστής έχει προσθέσει στο νούµερό ένα ακέραιο πολλαπλάσιο του 6. Με παρόµοιο τρόπο, κοιτώντας κι άλλα παραδείγµατα σαν κι αυτό, φαίνεται ότι το νούµερο που προσθέτει ο µικροϋπολογιστής είναι το 6 πολλαπλασιασµένο επί τον αριθµό των δεκάδων του αρχικού νούµερου. Στην περίπτωσή αυτή είναι το 27, το νούµερο των δεκάδων είναι 2, και παρατηρείται ότι 39 D = 27 D + (2 x 6) D. Πχ, για το 67 D = 0110 0111, ο µικροϋπολογιστής το βλέπει σαν 0110 0111 = 103 D. Και (103-67) D = 36 D = (6 x 6) D. Σκοπός µας λοιπόν είναι, να αφαιρεθεί από το νούµερο που βλέπει ο µικροϋπολογιστής τόσες φορές το 6, όσες φορές µας δείχνει το ψηφίο των δεκάδων του αριθµού. Έτσι από

10 2.2 Υπορουτίνες επιπέδου 1 το 27 D = 0010 0111 αν αφαιρεθεί το 12 D = 0000 1100 θα είναι: 0010 0111 0000 1100 = 0001 1011 = 1Β Η. Άρα 27 D = 1B H. Τώρα κοιτώντας και το ψηφίο των εκατοντάδων παρατηρούµε ότι 27 D = 1Β Η, το 127 D = 7F H, και το 227 D = E3 H. Η διαφορά µεταξύ 1Β Η και 7F H είναι ίση µε 64 Η = 100 D, και η διαφορά Ε3 Η 7F H = 64 H = 100 D οµοίως. Οπότε το µόνο που µένει είναι να προσθέσουµε στο 16ξαδικό αριθµό που υπολογίστικε µε βάση τα προηγούµενα, τόσες φορές το 64 Η, όσες φορές µας υποδηλώνει το ψηφίο των εκατοντάδων στο δεκαδικό που βρίσκεται στην θέση µνήµης 5001 Η. Και έτσι θα έχουµε την τελική µετατροπή. Βλέπωντας την λογική που ακουλουθώ για αυτήν την µετατροπή, παρακάτω δίνεται και ο κώδικας σε assembly για τον 8085 που την υλοποιεί. O HL δείχνει στην θέση µνήµης 5000 Η, όπου διαβάστηκε το νούµερο επιλογής. Κώδικας: Υπορουτίνα DEC2HEX DEC2HEX: MOV B,A ANI F0H MOV C,A DCR C JM DEX2HEXCONT1 DEX2HEXLOOP1: ADI 06H DCR C JP DEX2HEXLOOP1 DEX2HEXCONT1: MOV C,A MOV A,B SUB C MOV C,A DCX H CPI 01H JNZ DEC2HEX200 MOV A,C ADI 64H JMP DEC2HEXEND DEC2HEX200: CPI 02H JNZ DEC2HEX000 MOV A,C ADI C8H JMP DEC2HEXEND DEC2HEX000: MOV A,C DEC2HEXEND: Υπορουτίνα HEX2DEC Καλεί τις: Καµία. Καλείται από: Κυρίως πρόγραµµα, ΒΙΝ2DEC, OCT2DEC

11 2.Επεξήγηση υπορουτινών προγράµµατος Λειτουργία: Η υπορουτίνα HEX2DEC, µετατρέπει αριθµούς από το 16δικό στο 10αδικό, οι οποίο βρίσκονται µέσα στην περιοχή (0 255) D, ή (0 FF) H. Για την υλοποίηση της δεν χρειάζεται να καλέσει άλλες υπορουτίνες είναι αυτόνοµη. Σαν δεδοµένα δέχεται έναν δεκαεξαδικό αριθµό από το 00-FF, ο οποίος δίνεται στην θέση µνήµης 5001 Η. Η λογική η οποία ακολουθείται εδώ είναι η αντίστροφή της λογικής που ακολούθηθηκε κατά την µετατροπή DEC2HEX. Σε πρώτο βήµα ελένχεται αν το νούµερο που υπάρχει στην µνήµη είναι µεγαλύτερο του 100 D ή του 200 D, και άν όντως είναι µεγαλύτερο τότε του αφαιρείται τόσες φορές το 64 Η, ώστε να γίνει µικρότερο τους. Το πόσσες φορές αφαιρείται το 64 Η είναι το αριθµός των εκατοντάδων στο δεκαδικό, και αποθηκεύεται στην αµέσως επόµενη θέση µνήµης 5002 Η. Οπότε το µόνο που µένει τώρα είναι να µετατραπεί το νούµερο που απέµεινε µετά τις σχετικές αφαιρέσεις σε DEC. Υποθέτωντας ότι το νούµερο ήταν Β0 Η, τότε Β0 Η 64 Η = 4C H < 64 H. Έγινε µια αφαίρεση, άρα εκατοντάδες = 1. Μένει να µετατραπεί το 4C H σε DEC. To 4C H, αντιστοιχεί στο 76 D. Όµως προκειµένου να φανεί σε DEC (σε BCD) ο αριθµός 76 D, θα πρέπει ο υπολογιστής να έχει τον αριθµό 76 Η = 118 D. Όπως και πρίν παρατηρείται ότι 118 D 76 D = 42 D = (7 x 6) D. Συνεπώς στον αριθµό 76 D θα πρέπει να προστεθεί 7 φορές (όσο και το ψηφίο των δεκάδων του) το 6, δηλαδή το 42 D. Ή στο ΗΕΧ να προσθέθεί στο 4C H, το 2Α Η = (06x07) H. Για να βρεθεί πόσσες φορές πρέπει να προσθεθεί λοιπόν το 6, - να βρεθεί το ψηφίο των δεκάδων αφαιρείται από τον αριθµό σε DEC το 10 D, µέχρις ότου αυτός να γίνει < 0. Το πόσσες φορές έγινε η αφαίρεση πλίν µίας, δίνει τον αριθµό των δεκάδων. Στο ΗEX αφαιρείται αντίστοιχα το 0Α Η. Έτσι για το 4C H, µόλις αφαιρέθεί 7 + 1 φορές το 0Α Η, έχουµε αρνητικό αριθµό. Άρα βρίσκεται ότι οι δεκάδες είναι 7. Προκειµένου να βρεθούν τώρα και οι µονάδες µου, αφαιρώ από τον αριθµό σε DEC το 70 D, ή από τον αριθµό σε HEX το 7x0A H = 46 H. ηλαδή 4C H 46 H = 6 H = 6 D. Εποµένως ο αριθµός είναι ο: 1 + 7 + 6 = 176 D. Παρακάτω είναι το πρόγραµµα που πραγµατοποιεί την παραπάνω διαδικασία. Ο HL δείχνει στην θέση µνήµης 5000 Η. Κώδικας: Υπορουτίνα ΗΕΧ2DEC HEX2DEC: MOV C,A MOV D,A DCR C CPI 64H JC HEX2DECHOVER SUI 64H INR D CPI 64H JC HEX2DECHOVER SUI 64H INR D HEX2DECHOVER: MOV B,A HEX2DECLOOP1: INR C SUI 0AH JP HEX2DECLOOP1 MOV A,C CPI 00H JZ HEX2DECBEND MOV A,B HEX2DECLOOP2: ADI 06H

12 2.2 Υπορουτίνες επιπέδου 1 DCR C JNZ HEX2DECLOOP2 JMP HEX2DECEND HEX2DECBEND: MOV A,B HEX2DECEND: MOV M,D Υπορουτίνα ΗΕΧ2ΒΙΝ Καλείς τις: HEX2BINMAKE1, CLEAROUTPUTADDR Καλείται από: Κυρίως πρόγραµµα, DEC2BIN, OCT2BIN Λειτουργία: Η υπορουτίνα HEX2BIN δεν κάνει κάποια µετατροπή σε συστήµατα. Το µόνο που κάνει είναι µετατροπή αναπαραστάσεως!. Οπότε εδώ θα εξηγηθεί η λογική αυτής της µετατροπής. Όπως είναι γνωστό ένας διαδυκός αριθµός των 8-bit µπορεί να παρασταθεί από 2 σύµβολα στο HEX που παίρνουν τιµές 0-F. Το πρώτο σύµβολο, αντιστοιχεί στα 4 πρώτα bit του αριθµού, ενώ το δεύτερο στα υπόλοιπα 4. Έτσι ο αριθµός 1001 0110 ισοδυναµεί µε το 96 Η, ενώ ο 1101 1011 µε το DB H, κτλ. Συνεπώς όταν από τον συγκεκριµένο simulator 8085, βλέπουµε σε µια θέση µνήµης έναν αριθµό σε HEX, πχ τον B8, σηµαίνει ότι σ εκείνη την θέση υπάρχει ο 1011 1000 συνδιασµός άσσων και µηδενικών. Σκοπός λοιπόν αυτής της υπορουτίνας είναι να αναπαραστήσει τους άσσους και τα µηδενικά σαν αριθµούς από το 00 11, σε 4εις θέσεις µνήµης του υπολογιστή, όπως φαίνεται στο σχήµα 2.2α Σχ. 2.2α Σχ. 2.2β Για να γίνει αυτό, κατ αρχήν παίρνονται τα 4 πρώτα bit του αριθµού, δηλαδή τα 1011 = Β Η. Έπειτα γίνεται λογικό ΑΝD για κάθε ψηφίο αυτής της τετράδας των bit, µε το 1000 = 8 Η, 0100 = 4 Η, 0010 = 2 Η και 0001 Η, προκειµένου να ελενχθεί ανα bit, άν είναι το κάθε ένα 0 ή 1. Τα αποτελέσµατα τα µπαίνει σε µια βοηθητική θέση µνήµης στην address: 5FB0 H - 5FB3 H. Γίνεται ακριβώς το ίδιο πράγµα και για τα υπόλοιπα 4 bit του αριθµού, και τα αποτελέσµατα τα αποθηκεύονται στις θέσεις µνήµης: 5FB4 H 4FB7 H. Στο σχήµα 2.2β, δίνεται πως φαίνονται τα αποτελέσµατα σ αυτές τις θέσεις µνήµης ύστερα από την παραπάνω διαδικασία.

13 2.Επεξήγηση υπορουτινών προγράµµατος Αυτή η αναπαράσταση, είναι µια καλή αναπαράσταση για το δυαδικό σύστηµά. Όµως παρουσιάζει ένα µειονέκτηµα. Χρησιµοποιεί διπλάσιο χώρο στην µνήµη, απ ότι θα µπορούσε να έπιανε αν την κάναµε σαν το σχ 2.4α. Επίσης για να µετατραπεί αυτή η αναπαράσταση σε HEX αναπαράσταση (που το κάνει η υπορουτίνα ΒΙΝ2ΗΕΧ), θα χρειαζόταν να έρθει στην µορφή του σχ 2.2α, γιατί µ αυτή την µορφή γίνεται πιό εύκολα αυτή η µετατροπή. Οπότε, µιάς και έπρεπε να επιλεγεί µία από τις δύο µορφές αναπαραστάσεων, προτίµησα την πρώτη (σχ 2.2α). Το θέµα λοιπόν από δώ και πέρα είναι πώς θα µετατρέψουµε την αναπαράσταση από το σχ 2.2β στο σχ 2.2α. Η λογική που ακολουθείται είναι η εξής. Παίρνεται το νούµερο του 5FB0, γίνεται shifting 4 φορές αριστερά. Έπειτα γίνεται λογικό OR µε το νούµερο της θέσης µνήµης 5FB0 + 4 = 5FB4. Το αποτέλεσµα το αποθηκεύεται στην 5FB0. Όµοίως και για τις άλλες θέσεις. Στο σχήµα 2.2γ δίνεται ένα σχηµατικό διάγραµµα αυτής της λογικής: Σχ. 2.4γ Μ αυτόν τον τρόπο λοιπόν γίνεται η αλλαγή αναπαράστασης. Τα αποτελέσµατα στην µνήµη που φαίνονται πάντα σαν ΗΕΧ αναπαράσταση, µπορούν να πάρουν µόνο τιµές 00,01,10,11. Παρακάτω δίνεται και εξηγείται ο κώδικας- η υπορουτίνα που κάνει αυτή την δουλειά. Η υπορουτίνα αυτή χρησιµοποιεί την υπορουτίνα HEX2BINMAKE1 που εκτελεί την διαδικασία των OR µε τα 08 Η, 04 Η, 02 Η και 01 Η, και την CLEAROUTPUT η οποία µηδενίζει τις βοηθητικές θέσης µνήµης 5FBX. Κώδικας: Υπορουτίνα HEX2BIN HEX2BIN: PUSH H ANI F0H LXI H,5FB0H MVI D,08H CALL HEX2BINMAKE1 MVI D,04H CALL HEX2BINMAKE1 MVI D,02H CALL HEX2BINMAKE1 MVI D,01H CALL HEX2BINMAKE1 POP H PUSH H ANI 0FH LXI H,5FB4H

14 2.2 Υπορουτίνες επιπέδου 1 MVI D,08H CALL HEX2BINMAKE1 MVI D,04H CALL HEX2BINMAKE1 MVI D,02H CALL HEX2BINMAKE1 MVI D,01H CALL HEX2BINMAKE1 MVI B,04H LXI H,5FB0H LXI D,5FB4H HEX2BINLOOP1: RLC RLC RLC RLC MOV C,A XCHG ORA C XCHG INX D DCR B JNZ HEX2BINLOOP1 POP H MVI B,04H LXI D,5FB0H HEX2BINLOOP2: XCHG XCHG INX D DCR B JNZ HEX2BINLOOP2 CALL CLEAROUTPUTADDR Υπορουτίνα HEX2OCT Καλεί τις: Καµία. Καλείται από: Κυρίως πρόγραµµα, DEC2OCT, BIN2OCT Λειτουργία: Η υπορουτίνα ΗΕΧ2ΟCT, µετατρέπει αριθµούς από το 16αδικό στο 8αδικό, οι οποίο βρίσκονται µέσα στην περιοχή (0 377) O, ή (0 FF) H. Για την υλοποίηση της δεν χρειάζεται να καλέσει άλλες υπορουτίνες είναι αυτόνοµη. Σαν δεδοµένα δέχεται έναν 8αδικό αριθµό από το 0-FF, ο οποίος δίνεται στην θέση µνήµης 5001 Η. Κατ αρχην συγκρίνεται ο αριθµό σε HEX µε τους αριθµούς C0 Η = 300 O, 80 H = 200 O και 40 H = 100 O. Με αυτό τον τρόπο ελένχεται αν ο αριθµός που δίνεται σε HEX είναι από 0-77 Ο,

15 2.Επεξήγηση υπορουτινών προγράµµατος ή 100-177 Ο, ή 200-277 Ο, ή 300-377 Ο. Με άλλα λόγια µπορεί να βρεθεί το ψηφίο των εκατοντάδων. Αφου βρεθεί αυτό το ψηφίο αποθηκεύεται και αφαιρείται από τον αριθµό σε HEX, ο αντίστοιχος αριθµός εκατοντάδων, προκειµένου στο τέλος να υπάρχει ένας ΗΕΧ αριθµός ο οποίος να είναι <= 77 Ο. Ο αριθµός αυτός θα µετατραπεί σε OCT. Υποθέτωντας ότι ο αριθµός είναι ο ΑD Η, και πρέπει να µετατραπεί σε OCT, γίνονται οι παραπάνω συγκρίσεις από τις οποίες βγαίνει ότι: C0 H <AD H <80 H. Άρα το ψηφίο των εκατοντάδων στο OCT σύστηµα ειναι 2. Αφαιρώντας από τον AD H το 200 Ο = 80 Η έχουµε σαν αποτέλεσµα τον αριθµό: 2D. Οπότε πρέπει να βρεθεί σε ποιόν οκταδικό αριθµό αντιστοιχεί ο 2D. Σε επίπεδο bit, ο 2D H = 0010 1101, και αντιστοιχεί στον 55 O -> 0101 0101 (BCD). Είναι φανερό ότι για να πάµε από το 0010 1101 στο 0101 0101 αρκεί να µετακινηθούν τα ψηφία 3,4,5 &6, του 0010 1101 µια θέση προς τα αριστερά. Ο κώδικας που κάνει αυτή την δουλειά βρίσκεται στην υπορουτίνα HEX2OCT, η οποία δίνεται παρακάτω. Και αυτή η υπορουτίνα δεν χρησιµοποιεί άλλες υπορουτίνες-είναι αυτόνοµη. Κώδικας: Υπορουτίνα HEX2OCT HEX2OCT: MOV B,A MVI C,03H CPI C0H JNC HEX2OCTFIN DCR C CPI 80H JNC HEX2OCTFIN DCR C CPI 40H JNC HEX2OCTFIN DCR C HEX2OCTFIN: MOV A,C MOV A,B DCR C JM HEX2LOOP1NEXT INR C HEX2OCTLOOP1: SUI 40H DCR C JNZ HEX2OCTLOOP1 HEX2LOOP1NEXT: MOV B,A ANI 07H MOV C,A MOV A,B ANI 78H RLC ADD C

16 2.2 Υπορουτίνες επιπέδου 1 Υπορουτίνα ΗΕΧ2ASCII Καλείς τις: Καµία Καλείται από: Κυρίως πρόγραµµα. Λειτουργία: Αυτή η υπορουτίνα παίρνει έναν αριθµό από την θέση µνήµης 5001 Η, και βγάζει στην θέση µνήµης 5002 Η το σύµβολο που αντιστοιχεί σ αυτόν τον HEX αριθµό. Επειδή στον simulator δεν είναι δυνατόν να αναπαρασταθούν σύµβολα πέρα από τα σύµβολα 0-9, και Α-F, αυτή η υπορουτίνα περιορίζεται στο να πάρει αριθµούς από 30-39 &41-46 στο HEX. Η λογική πάνω στην οποία στηρίζεται είναι πως όταν ο HEX αριθµός είναι µεταξύ 30-39, τότε ο αντίστοιχός του ASCII είναι ο ΗΕΧ αριθµός-30 Η. Ενώ άν ο ΗΕΧ είναι µεταξύ 41-46, τότε ο αντίστοιχός του ΑSCII είναι ο ΗΕΧ αριθµός 37 Η. Παρακάτω δίνεται και επεξηγείται η αυτόνοµη υπορουτίνα HEX2ASCII, που κάνει την παραπάνω δουλειά. Κώδικας: Υπορουτίνα HEX2ASCII HEX2ASCII: CPI 3FH JNC HEX2ASCIIATOE SUI 30H HEX2ASCIIATOE: SUI 37 Υπορουτίνα ΒΙΝ2ΗΕΧ Καλεί τις: Καµία. Καλείται από: Κυρίως πρόγραµµα, BIN2DEC, BIN2OCT Λειτουργία: Η υπορουτίνα BIN2HEX δεν κάνει οµοίως κάποια µετατροπή σε συστήµατα. Το µόνο που κάνει είναι µετατροπή αναπαραστάσεως, ακριβώς όπως έκανε και η HEX2BIN. Αυτή η υπορουτίνα χρησιµοποιεί τις θέσεις µνήµης 5001 Η -5004 Η στις οποίες έχει δωθεί κάποιος δυαδικός αριθµός µε την µορφή που δεικνύεται στο σχήµα 2.2α. Σκοπός της είναι να µετατρέψει αυτόν τον αριθµό, από την δυαδική αναπαράσταση στην HEX αναπαράσταση. Η λογική που ακολουθείται για αυτήν την µετατροπή είναι η εξής: Υποθέτωντας ότι το νούµερο που πρέπει να µετατραπεί σε ΗΕΧ δίνεται στις θέσεις µνήµης 5001 Η -5004 Η, στην θέση 5001 Η, θα έχουµε (σύµφωνα µε το σχ 2.4α) 0001 0001 (=11 Η ). Σ αυτό το νούµερο γίνεται 3 φορές shifting προς τ αριστερά, οπότε:

17 2.Επεξήγηση υπορουτινών προγράµµατος 0001 0001 1000 1000. Μετά στο νούµερο από την θέση µνήµης 5002 Η που είναι το: 0000 0000 (=00 Η ), κάνουµε 2 φορες shifting προς τ αριστερα οπότε θα γίνει: 0000 0000 0000 0000. Αυτό και το προηγούµενο αποτέλεσµα τα κάνουµε τώρα OR. Οπότε θα έχουµε 1000 1000. Παίρνωντας το νούµερο που βρίσκεται στην 5003 Η θέση µνήµης που είναι το 0001 0000 = (10 Η ), και κάνοντάς το 1 φορά shfting προς τ αριστερά γίνεται: 0001 0000 0010 0000, και αυτό το κάνουµε ΟR µε το προηγούµενο αποτέλεσµα µας (1000 1000). Το αποτέλεσµα θα είναι: 1010 1000. Τέλος το νούµερο της θέσης µνήµης 5004 Η, που είναι το 0001 0000 (=10 Η ), το κάνουµε απ ευθείας ΟR µε το τελευταίο αποτέλεσµα το 1010 1000. Το αποτέλεσµα θα είναι: 1011 1000. Αυτό το νούµερο αποθηκεύεται στην θέση µνήµης 5005 Η, το οποίο στο HEX είναι το Β8, και έτσι φαίνεται στον simulator 8085. Η παραπάνω διαδικασία γίνεται πολύ εύκολα µέσω της υπορουτίνας BIN2HEX. Ας σηµειωθεί ότι η αναπαράσταση του BIN όπως φαίνεται στο σχ 2.2α είναι καθοριστική για αυτόν τον αλγόριθµο. Σε περίπτωση που είχαµε το BIN σε αναπαράσταση όπως στο σχ 2.2β, τότε θα χρειαζόταν ένα ενδιάµεσο στάδιο µετατροπής από την µία αναπαράσταση στην άλλη προκειµένου να εφαρµοστούν τα παραπάνω. Παρακάτω δίνεται η υπορουτίνα BIN2HEX. Κώδικας: Υπορουτίνα ΒΙN2HEX BIN2HEX: RLC RLC RLC MOV B,A RLC RLC ORA B MOV B,A RLC ORA B MOV B,A ORA B

18 2.2 Υπορουτίνες επιπέδου 1 Υπορουτίνα OCT2HEX Καλεί τις: Καµία Καλείται από: Κυρίως πρόγραµµα, OCT2DEC, OCT2BIN Λειτουργία: Η υπορουτίνα OCT2HEX, µετατρέπει αριθµούς από το 8αδικό στο 16αδικό, οι οποίο βρίσκονται µέσα στην περιοχή (0 377) O, ή (0 FF) H. Για την υλοποίηση της δεν χρειάζεται να καλέσει άλλες υπορουτίνες είναι αυτόνοµη. Σαν δεδοµένα δέχεται έναν 8αδικό αριθµό από το 0-377, του οποίο το ψηφίο των εκατοντάδων δίνεται στην θέση µνήµης 5001 Η, ενώ τα άλλα δύο ψηφία δίνονται µαζί στην θέση µνήµης 5002 Η. Σκοπός είναι πρώτα να µετατραπεί ο αριθµός που βρίσκεται στην θέση µνήµης 5002 Η σε ΗΕΧ, και µετά ανάλογα µε το ψηφίο των εκατοντάδων να προστεθεί σ αυτόν 40 Η =100 Ο, ή 80 Η = 200 Ο, ή C0 H = 300 O, ή τίποτα. Η συµµετρία που παρατήρηθηκε σ αυτή την περίπτωση, σε bit επίπεδο, είναι πως για την µετατροπή ενός OCT αριθµου σε HEX, αρκεί να µετακινήθουν µια θέση προς τα δεξιά τα 6,5,4 & 3 ψηφία του αριθµού, κρατώντας τα άλλα όπως είναι. Πχ. Αν στην θέση µνήµης 5002 Η, υπάρχει ο αριθµός 64, επειδή ο µικροϋπολογιστής τον θεωρεί σε ΗΕΧ, τον παίρνει σαν 0110 0100. Όµως 64 Ο =34 Η =0011 0100. Συνεπώς για να γίνει η µετατροπή από OCT σε HEX πρέπει να βρεθεί πώς συνδέονται οι αριθµοί: 0110 0100 και 0011 0100. Φαίνεται αµέσως πως αυτοί οι αριθµοί συνδέονται µε µια µετατόπιση των ψηφίων 6,5,4 & 3 (θεωρώντας σαν MSB το ψηφίο Νο 7) προς τα δεξιά. Αυτό δεν ισχύει µόνο για το 64, αλλά για κάθε αριθµό από 00 Ο -77 Ο. Με βάση λοιπόν την παραπάνω λογική, παρακάτω δίνεται ο κώδικας της υπορουτίνας OCT2HEΧ. Κώδικας: Υπορουτίνα OCT2HEX OCT2HEX: MOV C,A ANI 07H MOV B,A MOV A,C ANI 78H ADD B MOV E,A DCX H MVI D,00H CPI 03H JNZ OCT2HEXH2 MVI D,C0H OCT2HEXH2: CPI 02H JNZ OCT2HEXH1 MVI D,80H OCT2HEXH1: CPI 01H JNZ OCT2HEXH0 MVI D,40H OCT2HEXH0: MOV A,E ADD D

19 2.Επεξήγηση υπορουτινών προγράµµατος Υπορουτίνα ASCII2HEX Καλεί τις: ASCII2HEXORDER Καλείται από: Κυρίως πρόγραµµα. Λειτουργία: Αυτή η υπορουτίνα παίρνει έναν αριθµό από την θέση µνήµης 5001 Η, και βγάζει στις θέσεις µνήµης 5002 Η και 5003 Η, τον αντίστοιχο ASCII αριθµητικό κώδικα που αντιστοιχεί για τα 4 MSB και 4 LSB αντίστοιχα. Πχ. Άν στην θέση µνήµης 5001 Η βάλουµε τον αριθµό F9 H, τότε µιας και το F στον ASCII είναι το νούµερο 46, και το 9 το 39, θα πάρουµε στην θέση µνήµης 5002 Η το 46 Η, και στην θέση µνήµης 5003 Η το 39 Η. Η λογική που ακολουθείται γι αυτή την υπορουτίνα είναι η εξής. Αφού πάρει τον HEX αριθµό, κοιτάει πρώτα τα 4 MSBits του, και ελένχει άν το νούµερο που αναπαριστούν είναι µικρότερο ή όχι του 9. Άν είναι µικρότερο ή ίσο του 9, τότε του προσθέτει 30 Η, και το νούµερο αυτό το µετατρέπει σε ASCII αναπαράσταση. Αν το νούµερο είναι µεγαλύτερο του 9, του προσθέτει 7 Η + 30 Η και το µετατρέπει πάλι σε ASCII αναπαράσταση. Κώδικας: Υπορουτίνα ASCII2HEX ASCII2HEX: MOV B,M CALL ASCII2HEXORDER MOV A,B CALL ASCII2HEXORDER 2.3 Υπορουτίνες επιπέδου 2 Υπορουτίνα DEC2BIN Καλεί τις: DEC2HEX, HEX2BIN Καλείται από: Κυρίως πρόγραµµα. Λειτουργία: Η υπορουτίνα DEC2BIN, δεν αποτελεί κάποια υπορουτίνα η οποία στηρίζεται σε κάποια νέα λογική από αυτές που παρουσιάστηκαν παραπάνω, αλλά χρησιµοποιεί τις παραπάνω βασικές υπορουτίνες ώστε να δώσει αποτέλεσµα. Τα ίδια ισχύουν και για κάθε άλλη υπορουτίνα που θα αναφέρω από εδώ και µπρός. Πρώτα καλεί την DEC2HEX για να µετατρέψει τον δεκαδικό αριθµό σε 16ξαδικό, και µετά την HEX2BIN για να µετατρέψει τον νέο 16ξαδικό αριθµό σε δυαδικό.

20 2.3 Υπορουτίνες επιπέδου 2 Κώδικας: Υπορουτίνα DEC2BIN DEC2BIN: CALL DEC2HEX DCX H CALL HEX2BIN Υπορουτίνα DEC2OCT Καλεί τις: DEC2HEX, HEX2OCT Καλείται από: Κυρίως πρόγραµµα. Λειτουργία: Παροµοίως µε την υπορουτίνα DEC2BIN η υπορουτίνα αυτή χρησιµοποιεί ήδη αναφερόµενες υπορουτίνες, προκειµένου να δώσει αποτελέσµατα. Καλεί πρώτα την DEC2HEX, και µετά καλεί την HEX2OCT δίνοντάς της σαν είσοδο το αποτέλεσµα της προηγούµενης. Κώδικας: Υπορουτίνα DEC2OCT DEC2OCT: CALL DEC2HEX DCX H CALL HEX2OCT Υπορουτίνα ΒΙΝ2DEC Καλεί τις: ΒΙΝ2HEX, HEX2DEC Καλείται από: Κυρίως πρόγραµµα. Λειτουργία: : Παροµοίως µε την υπορουτίνα DEC2ΒΙΝ η υπορουτίνα αυτή χρησιµοποιεί ήδη αναφερόµενες υπορουτίνες, προκειµένου να δώσει αποτελέσµατα. Καλεί πρώτα την ΒΙΝ2HEX, και µετά καλεί την HEX2DEC δίνοντάς της σαν είσοδο το αποτέλεσµα της προηγούµενης Κώδικας: Υπορουτίνα BIN2DEC BIN2DEC: CALL BIN2HEX DCX H CALL HEX2DEC

21 2.Επεξήγηση υπορουτινών προγράµµατος Υπορουτίνα BIN2OCT Καλεί τις: ΒΙΝ2HEX, HEX2OCT Καλείται από: Κυρίως πρόγραµµα. Λειτουργία: : Παροµοίως µε την υπορουτίνα DEC2ΒΙΝ η υπορουτίνα αυτή χρησιµοποιεί ήδη αναφερόµενες υπορουτίνες, προκειµένου να δώσει αποτελέσµατα. Καλεί πρώτα την ΒΙΝ2HEX, και µετά καλεί την HEX2OCT δίνοντάς της σαν είσοδο το αποτέλεσµα της προηγούµενης Κώδικας: Υπορουτίνα BIN2OCT BIN2OCT: CALL BIN2HEX DCX H CALL HEX2OCT Υπορουτίνα OCT2DEC Καλεί τις: OCT2HEX, HEX2DEC Καλείται από: Κυρίως πρόγραµµα. Λειτουργία: : Παροµοίως µε την υπορουτίνα DEC2ΒΙΝ η υπορουτίνα αυτή χρησιµοποιεί ήδη αναφερόµενες υπορουτίνες, προκειµένου να δώσει αποτελέσµατα. Καλεί πρώτα την OCT2HEX, και µετά καλεί την HEX2DEC δίνοντάς της σαν είσοδο το αποτέλεσµα της προηγούµενης Κώδικας: Υπορουτίνα OCT2DEC OCT2DEC: CALL OCT2HEX DCX H CALL HEX2DEC

22 2.3 Υπορουτίνες επιπέδου 2 Υπορουτίνα OCT2BIN Καλεί τις: OCT2HEX, HEX2BIN Καλείται από: Κυρίως πρόγραµµα. Λειτουργία: : Παροµοίως µε την υπορουτίνα DEC2ΒΙΝ η υπορουτίνα αυτή χρησιµοποιεί ήδη αναφερόµενες υπορουτίνες, προκειµένου να δώσει αποτελέσµατα. Καλεί πρώτα την OCT2HEX, και µετά καλεί την HEX2BIN δίνοντάς της σαν είσοδο το αποτέλεσµα της προηγούµενης Κώδικας: Υπορουτίνα OCT2BIN OCT2BIN: CALL OCT2HEX DCX H CALL HEX2BIN