You are on page 1of 14

ΠΛΗ21 – 4η ΕΡΓΑΣΙΑ – 2012-13 - Ενδεικτικές Απαντήσεις

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


Θεµατική Ενότητα ΠΛΗ 21: Ψηφιακά Συστήµατα
Ακαδηµαϊκό Έτος 2012 – 2013
Γραπτή Εργασία #4
Παράδοση: 12-05-2013

Άσκηση 1 [10 µονάδες]


Δίδεται το παρακάτω πρόγραµµα, το οποίο έχει γραφτεί για το µικροεπεξεργαστή 8085 της Intel.

MVI B, 01
MVI C, 00
K: INR C
INR B
MOV A, C
ADD B
SUI 0Α
JNZ K
HLT

(α) Υποθέτοντας ότι το πρόγραµµα θα αποθηκεύεται στην κύρια µνήµη ξεκινώντας από τη θέση
102416 βρείτε τα περιεχόµενα της µνήµης από τη θέση 102416 έως και το τέλος του προγράµµατος.
Ποιο είναι το µέγεθος του προγράµµατος σε bytes;

Διεύθυνση Περιεχόµενο
Εντολή
Μνήµης Μνήµης
1024
1025
1026
1027
1028
1029
102Α
102Β
102C
102D
102E
102F
….
….
….

(β) Εάν εκτελέσουµε το πρόγραµµα, πόσες φορές θα εκτελεστεί η κάθε εντολή του προγράµµατος;

Εντολή Φορές Εκτέλεσης


MVI B, 01
MVI C, 0

Σελίδα 1 από 14
ΠΛΗ21 – 4η ΕΡΓΑΣΙΑ – 2012-13 - Ενδεικτικές Απαντήσεις

INR C
INR B
MOV A,C
ADD B
SUI 0Α
JNZ K
HLT

(γ) Ποια θα είναι τα περιεχόµενα των καταχωρητών B και C µετά την εκτέλεση των πρώτων 5
επαναλήψεων του προγράµµατος;

Περιεχόµενο του Περιεχόµενο του


καταχωρητή B καταχωρητή C
Αρχικό 01 00
Τέλος 1ης επανάληψης
Τέλος 2ης επανάληψης

(δ) Τι παρατηρείτε σχετικά µε την εκτέλεση του προγράµµατος ;

Λύση:
(α) Τα περιεχόµενα της µνήµης του προγράµµατος µε βάση την κωδικοποίηση των εντολών του
8085 έχουν ως εξής:

Διεύθυνση Περιεχόµενο
Εντολή
Μνήµης Μνήµης
1024 06 MVI B, 01
1025 01
1026 0E MVI C, 0
1027 00
1028 0C INR C
1029 04 INR B
102A 79 MOV A, C
102B 80 ADD B
102C D6 SUI 0A
102D 0A
102E C2 JNZ K
102F 28
1030 10
1031 76 HLT

Το µέγεθος του προγράµµατος είναι 14 bytes.

(β) Αναλύοντας το πρόγραµµα βλέπουµε ότι οι δύο πρώτες εντολές είναι εκτός του βρόχου
επανάληψης ενώ σε κάθε επανάληψη του βρόχου ο έλεγχος γίνεται σε σχέση µε το άθροισµα των Β

Σελίδα 2 από 14
ΠΛΗ21 – 4η ΕΡΓΑΣΙΑ – 2012-13 - Ενδεικτικές Απαντήσεις

και C οποίοι σε κάθε επανάληψη αυξάνονται κατά 1. Έτσι προκύπτει ο παρακάτω πίνακας µε τις
φορές εκτέλεσης των εντολών.

Εντολή Φορές Εκτέλεσης


MVI B, 01 1
MVI C, 0 1
INR C άπειρες
INR B άπειρες
MOV A,C άπειρες
ADD B άπειρες
SUI 0Α άπειρες
JNZ K άπειρες
HLT ποτέ

(γ) Τα περιεχόµενα των δύο καταχωρητών φαίνονται στο παρακάτω πίνακα:

Περιεχόµενο του Περιεχόµενο του


καταχωρητή B καταχωρητή C
Αρχικό 01 0
Τέλος 1ης επανάληψης 02 01
Τέλος 2ης επανάληψης 03 02
Τέλος 3ης επανάληψης 04 03
Τέλος 4ης επανάληψης 05 04
Τέλος 5ης επανάληψης 06 05

(δ) Το πρόγραµµα δεν τερµατίζει ποτέ και µπαίνει σε ένα αέναο βρόχο.

Άσκηση 2: [20 µονάδες]

Θεωρείστε δύο πίνακες Χ = [x0, x1, …, x9] και Υ = [y0, y1, …, y9] που περιέχουν δέκα αριθµούς ο
καθένας και βρίσκονται αποθηκευµένοι στις θέσεις µνήµης µε διευθύνσεις (300016 – 300916) και
(400016 – 400916), αντίστοιχα. Να δώσετε το διάγραµµα ροής και να γράψετε πρόγραµµα assembly
για τον επεξεργαστή 8085 που να υπολογίζει την παρακάτω έκφραση:
⎧ 4 xi + y i αν 2 < xi ≤ 6
y i = ⎨
⎩ xi αλλιώς
και να αποθηκεύει στον καταχωρητή Β πόσες φορές ικανοποιείται η συνθήκη 2 < xi ≤ 6 . Θεωρείστε
ότι οι αριθµοί είναι θετικοί και δε συµβαίνει υπερχείλιση κατά τους υπολογισµούς.
Να επισυνάψετε στη λύση σας το αρχείο µε τον κώδικα assembly.

Λύση

1η Εναλλακτική

Το πρόγραµµα αποτελείται από 5 ρουτίνες που είναι: α) αρχικοποίηση καταχωρητών, β) έλεγχος της
συνθήκης 2 < xi ≤ 6 , γ) υπολογισµός της τιµής yi = 4xi + yi όταν ικανοποιείται η συνθήκη, δ)

Σελίδα 3 από 14
ΠΛΗ21 – 4η ΕΡΓΑΣΙΑ – 2012-13 - Ενδεικτικές Απαντήσεις

αντικατάσταση του yi από το xi δηλαδή, yi = xi, όταν δεν ικανοποιείται η συνθήκη και ε) έλεγχος των
επαναλήψεων ώστε να επεξεργαστούν και οι δέκα αριθµοί των πινάκων X, Y.

Αρχικά γίνεται αρχικοποίηση των ζευγών καταχωρητών (H,L) =300016 και (D,E) =400016, ώστε να
δείχνουν αντίστοιχα στον πρώτο αριθµό των πινάκων Χ και Υ. Επίσης, αρχικοποιούνται: α) ο
καταχωρητής C στην τιµή C=0Α16, ο οποίος θα χρησιµοποιηθεί ως µετρητής επαναλήψεων των
υπολογισµών, και β) ο καταχωρητής Β στην τιµή Β=0016.

Για τον έλεγχο ικανοποίησης της συνθήκης, ο συσσωρευτής Α, φορτώνεται πρώτα µε την τιµή 0216
και συγκρίνεται µε το περιεχόµενο της θέσης µνήµης που αντιστοιχεί στον τρέχοντα αριθµό xi και το
ίδιο επαναλαµβάνεται στη συνέχεια µε Α= 0616. Με βάση τις τιµές της σηµαίας κρατούµενου CY
και της σηµαίας µηδενικού αποτελέσµατος Z, εξάγεται το συµπέρασµα αναφορικά µε την
ικανοποίηση της συνθήκης.

Για τον υπολογισµό της έκφρασης yi = 4xi + yi, που γίνεται στην 3η ρουτίνα, απαιτείται η πράξη του
πολλαπλασιασµού, η οποία δεν περιέχεται στο σύνολο εντολών του επεξεργαστή. Όµως, ο
πολλαπλασιασµός µπορεί να υλοποιηθεί µε διάφορους τρόπους όπως διαδοχικές προσθέσεις ή
ολισθήσεις αριστερά και προσθέσεις. Για λόγους µείωσης του αριθµού των εντολών, ακολουθείται η
δεύτερη προσέγγιση. Έτσι, η πράξη 4xi υλοποιείται εκτελώντας δύο διαδοχικές αριστερές
ολισθήσεις στον αριθµό xi.

Τέλος, στην τελευταία ρουτίνα γίνεται έλεγχος των επαναλήψεων ώστε να υποστούν επεξεργασία οι
δέκα αριθµοί των πινάκων Χ, Υ. Για το σκοπό αυτό µειώνεται ο καταχωρητής C κατά 1. Αν C >
0016, τότε ο έλεγχος µεταφέρεται στη δεύτερη ρουτίνα και η παραπάνω διαδικασία
επαναλαµβάνεται. Για το λόγο αυτό, σε αυτή τη ρουτίνα αυξάνουν επίσης κατά 1 οι τιµές των
ζευγών (H,L) και (D,E) ώστε να δείχνουν στις θέσεις µνήµης που βρίσκονται οι επόµενοι αριθµοί
των πινάκων Χ και Υ. Αν C=0016, σηµαίνει ότι έχουν γίνει δέκα επαναλήψεις (δηλαδή, έχουν
επεξεργαστεί όλοι οι αριθµοί) οπότε το πρόγραµµα τερµατίζει τη λειτουργία του.

Με βάση τα παραπάνω, το διάγραµµα ροής και ο κώδικας assembly έχουν ως εξής:

Σελίδα 4 από 14
ΠΛΗ21 – 4η ΕΡΓΑΣΙΑ – 2012-13 - Ενδεικτικές Απαντήσεις

Αρχικοποίηση
Αρχικοποίηση καταχωρητών
καταχωρητών
(D,E)=4000 16,, (H,L)
(D,E)=400016 (H,L) =3000 16,,
=300016
B=00 16,, C=0A
B=0016 C=0A16
16

A
A =
= 02
02

OXI
(M)=
(M)= xxii >
>AA

A
A =
= 06
06

OXI (M)=
(M)= xxii
<=
<= A
A
yyii =
= xxii

BB =B=B +1
+1
yyii=4x
=4xii+y
+yii

(D,E)
(D,E) =
= (D,E)+1
(D,E)+1
(H,L)
(H,L) =
= (H,L)+1
(H,L)+1
C=C-1
C=C-1

OXI
EXIT
EXIT C=0
C=0

// Ρουτίνα αρχικοποίησης //
LXI D, 4000
LXI H, 3000
LXI B, 000A
// Έλεγχος συνθήκης //
check:
MVI A, 02 // Α= 0216 //
CMP M // Σύγκρινε Α µε το περιεχόµενο της Μ δηλαδή, µε το xi //
JZ no_cond // Αν Ζ=1 τότε xi=2 – Άλµα στη ρουτίνα µη ικανοποίησης συνθήκης //
JNC no_cond // Αν CY=0, τότε xi ≤ 2 . Όµως, αν xi=,2 τότε λόγω της προηγούµενης εντολής θα είχε
ήδη µεταβεί στη ρουτίνα µη ικανοπ. συνθήκης. Εποµένως, xi <2 – Άλµα στη ρουτίνα µη ικανοπ. συνθήκης //
MVI A, 06 // Α= 0616 //
CMP M // Σύγκρινε Α µε το περιεχόµενο της Μ δηλαδή, µε το xi //
JC no_cond // Αν CY=1 τότε xi > 6 – Άλµα στη ρουτίνα µη ικανοποίησης συνθήκης //
// Ικανοποίηση συνθήκης //
INR B // B=B+1, Αύξηση µετρητή επιτυχών ικανοποιήσεων συνθήκης //
MOV A, M // Α= xi //
RLC // Α= 2xi //
RLC // Α= 4xi //
XCHG // (D,E) ßà (H,L), το ζεύγος (Η,L) δείχνει στον αριθµό yi //
ADD M // Α= A+ (M) = 4xi +yi //
XCHG // (D,E) ßà (H,L), επαναφορά τιµών στα ζεύγη, το ζεύγος (D,E) δείχνει στον yi //
STAX D // yi= Α= 4xi + yi //
JMP terminate // Άλµα στον έλεγχο επαναλήψεων //
// Μη ικανοποίηση συνθήκης //
no_cond:
MOV A, M // Α= xi //
STAX D // yi= Α = xi //

Σελίδα 5 από 14
ΠΛΗ21 – 4η ΕΡΓΑΣΙΑ – 2012-13 - Ενδεικτικές Απαντήσεις

// Έλεγχος επαναλήψεων //
terminate:
INX D // (D,E) = (D,E) +1 //
INX H // (H,L) = (H,L) +1 //
DCR C // C = C-1//
JNZ check // Αν Ζ=0 τότε C > 0 – Άλµα για επεξεργασία των επόµενων αριθµών//
HLT

2η Εναλλακτική

// Ρουτίνα αρχικοποίησης //
MVI B,0
LXI D, 3009
LXI H, 4009

// Βρόχος Ελέγχου //
LOOP:
LDAX D
CPI 3
JM STORE
CPI 7
JP STORE

// 1η συνθήκη //
FIRST:
INR B
RLC
RLC
ADD M

// Αποθήκευση Αποτελέσµατος //
STORE:
MOV M,A
DCR E
JM END
DCR L
JMP LOOP

END:
HLT

Άσκηση 3: [25 µονάδες]


Θεωρείστε πίνακα Χ µε οκτώ αριθµούς [x1, x2, …, x8] σε αναπαράσταση συµπληρώµατος ως προς 2
που είναι αποθηκευµένοι στις θέσεις µνήµης µε διευθύνσεις 300016, 300116, …, 300716, αντίστοιχα.
Να δώσετε το διάγραµµα ροής και να γράψετε πρόγραµµα assembly για τον επεξεργαστή 8085 που
α) να επιστρέφει το πλήθος των θετικών αριθµών στον καταχωρητή Β, β) να επιστρέφει το µέγιστο
σε απόλυτη τιµή αρνητικό αριθµό στον καταχωρητή C, και γ) να αποθηκεύει τα αθροίσµατα των
θετικών αριθµών και των απολύτων τιµών των αρνητικών αριθµών στις θέσεις µνήµης 400016 και
400116, αντίστοιχα. Να χειριστείτε τον αριθµό 0016 ως θετικό αριθµό.
Να επισυνάψετε στη λύση σας το αρχείο µε τον κώδικα assembly.

Σελίδα 6 από 14
ΠΛΗ21 – 4η ΕΡΓΑΣΙΑ – 2012-13 - Ενδεικτικές Απαντήσεις

Λύση
Το πρόγραµµα αποτελείται από πέντε ρουτίνες. Στην πρώτη ρουτίνα (ρουτίνα αρχικοποίησης)
γίνεται η εγγραφή του 0016 στις θέσεις µνήµης 400016 και 400116. Επίσης, αρχικοποιείται το ζεύγος
καταχωρητών (B,C) = 000016 καθώς και το ζεύγος καταχωρητών (D,E) = 300016 που θα
χρησιµοποιηθεί για τη διευθυνσιοδότηση του πίνακα Χ.

Στη δεύτερη ρουτίνα γίνεται ανάγνωση του αριθµού από τη µνήµη και ελέγχεται το πρόσηµο του για
να διαπιστωθεί αν ο αριθµός είναι θετικός ή αρνητικός. Για να επιτευχθεί αυτό πρέπει να
αποµονωθεί το περισσότερο σηµαντικό ψηφίο (MSB) και ανάλογα µε την τιµή του να
συµπεράνουµε αν ο αριθµός είναι θετικός (MSB=0) ή αρνητικός (MSB=1). Η αποµόνωση του MSB
µπορεί να γίνει µε διάφορους τρόπους όπως χρήση µάσκας (λογικό AND µε την τιµή 8016 και έλεγχο
της σηµαίας ZERO) ή µε αριστερή ολίσθηση µέσω κρατούµενου και έλεγχο της τιµής της σηµαίας
κρατουµένου CY. Στο συγκεκριµένο κώδικα ακολουθείται η δεύτερη προσέγγιση.

Αν ο τρέχων αριθµός είναι θετικός (CY=0), τότε αυξάνεται κατά 1 η τιµή του καταχωρητή Β και
γίνεται πρόσθεση του αριθµού µε το δεδοµένο της θέσης µνήµης 400016 και αποθήκευση του
αποτελέσµατος στη θέση µνήµης 400016.

Αν ο αριθµός είναι αρνητικός (CY=1), τότε το πρόγραµµα µεταβαίνει στη ρουτίνα χειρισµού των
αρνητικών αριθµών, όπου αρχικά υπολογίζεται η απόλυτη τιµή του αριθµού. Δεδοµένου ότι οι
αριθµοί είναι σε αναπαράσταση συµπληρώµατος ως προς 2, ο υπολογισµός της απόλυτης τιµής
γίνεται υπολογίζοντας το συµπλήρωµα του αριθµού και προσθέτοντας στη συνέχεια 1 (| x | = x’+1).
Στη συνέχεια ο αριθµός συγκρίνεται µε το περιεχόµενο του καταχωρητή C και αν είναι µεγαλύτερος
γράφεται στον καταχωρητή C. Επίσης, σε αυτή την ρουτίνα γίνεται άθροιση της τρέχουσας
απόλυτης τιµής µε το δεδοµένο της θέσης µνήµης 400116 και αποθήκευση του αποτελέσµατος στη
θέση 400116.

Στην τελευταία ρουτίνα, γίνεται αύξηση της τιµής του ζεύγους (D,E) = (D,E)+1 για να
διευθυνσιοδοτηθεί ο επόµενος αριθµός. Επίσης, µε βάση την τιµή του καταχωρητή Ε, ελέγχεται αν
έχουµε επεξεργαστεί και τους 8 αριθµούς του πίνακα, οπότε το πρόγραµµα τερµατίζει τη λειτουργία
του.

Με βάση τα παραπάνω το διάγραµµα ροής και ο κώδικας assembly έχουν ως εξής:

Σελίδα 7 από 14
ΠΛΗ21 – 4η ΕΡΓΑΣΙΑ – 2012-13 - Ενδεικτικές Απαντήσεις

Αρχικοποίηση του δεδοµένου


των θέσεων 400016 και 400116.
Αρχικοποίηση καταχωρητών

A ß xi

OXI Θετικός
?

B = B+1
Υπολογισµός | xi |

OXI
(400016) ß
|xi| > C (400016)+(xi)

(400116) ß
C = |xi|
(400116)+|xi|

(D,E) = (D,E)+1

E= 08 OXI
EXIT
?

// Ρουτίνα αρχικοποίησης //
LXI H, 4000
MVI M, 00
INX H
MVI M, 00 // Εγγραφή της τιµής 0016 στις θέσεις µνήµης 400016 και 400116 //
LXI D, 3000 // Αρχικοποίηση ζεύγους (D,E) //
LXI B, 0000 // Αρχικοποίηση καταχωρητών B, C //

// Ανάγνωση αριθµού και έλεγχος προσήµου //


NEXT_NUMBER:
LDAX D // Φόρτωση αριθµού στον A, A=xi. //
RAL // Αριστερή ολίσθηση µέσω κρατούµενου //
JC NEGATIVE // Αν CY=1, ο αριθµός είναι αρνητικός-άλµα στη ρουτίνα για αρνητικούς //

// Θετικός αριθµός//
INR B // Αύξηση του µετρητή Β, Β=Β+1 //
LDAX D // Φόρτωση αριθµού στον A, A=xi. //
LXI H, 4000 // (H, L)=400016. //
ADD M // Α= Α +(Μ)= xi+(400016), πρόσθεση του xi µε το δεδοµένο της θέσης 400016 //
MOV M, A // Αποθήκευση αποτελέσµατος στη θέση µνήµης 400016 //
JMP TERMINATE // Άλµα στη ρουτίνα ελέγχου επαναλήψεων //

// Αρνητικός αριθµός//
NEGATIVE:
LDAX D // Φόρτωση αριθµού στον A, A=xi. //
CMA
ADI 01 // Υπολογισµός απόλυτης τιµής, Α=|xi| //
CMP C // Σύγκριση της απόλυτης τιµής µε την τιµή του C//
JC STORE_SUM // Αν CY=1, η τιµή του C είναι µεγαλύτερη από την τρέχουσα |xi| //
MOV C, A // Αντικατάσταση της τιµής του C από την τρέχουσα απόλυτη τιµή, C= |xi| //

Σελίδα 8 από 14
ΠΛΗ21 – 4η ΕΡΓΑΣΙΑ – 2012-13 - Ενδεικτικές Απαντήσεις

STORE_SUM:
LXI H, 4001 // (H, L) =400116. //
ADD M // Α= Α + (Μ) = |xi|+ (400116) //
MOV M, A // Αποθήκευση του αποτελέσµατος στη θέση 400116 //

// Έλεγχος τερµατισµού επαναλήψεων //


TERMINATE:
INX D
MVI A, 08
SUB E
JNZ NEXT_NUMBER
HLT

2η Εναλλακτική

LXI H,3007
LXI B,0000 // Β οι θετικοί αριθµοί, C ο µέγιστος αριθµός, D Σύνολο Αρνητικών, Ε Σύνολο θετικών

// Κύριος Βρόχος //
LOOP:
MOV A,M
ORA A ; Updates flags
JM ABS
INR B
ADD E
MOV E , A
JMP NEXT

// Υπολογισµός Απόλυτης τιµής //


ABS:
CMA
INR A
CMP C
JM SKIP
MOV C,A

// Αρνητικός Αριθµός //
SKIP:
ADD D
MOV D,A

// Επόµενο στοιχείο //
NEXT:
DCR L
JP LOOP
XCHG
SHLD 4000
HLT

Άσκηση 4: [20 µονάδες]

Έστω ένας επεξεργαστής στον οποίο ορίζονται οι παρακάτω σηµαίες κατάστασης:

Σελίδα 9 από 14
ΠΛΗ21 – 4η ΕΡΓΑΣΙΑ – 2012-13 - Ενδεικτικές Απαντήσεις

Sign (Πρόσηµο): Η σηµαία παίρνει την τιµή 1 εάν το πιο σηµαντικό δυαδικό ψηφίο του
αποτελέσµατος της εντολής είναι 1.
Zero (Μηδέν): Η σηµαία παίρνει την τιµή 1 εάν το αποτέλεσµα της εντολής είναι 0.

Ο επεξεργαστής αυτός έχει 4 καταχωρητές και υποστηρίζει τις παρακάτω εντολές

Εντολή Εξήγηση Λειτουργίας


Φόρτωσε στον καταχωρητή $x το περιεχόµενο της θέσης µνήµης
LD $x, [Addr]
Addr
Φόρτωσε στη θέση µνήµης Addr το περιεχόµενο του καταχωρητή
ST $x, [Addr]
$x
Αφαίρεσε από το περιεχόµενο του καταχωρητή $y το περιεχόµενο
του καταχωρητή $z, αποθήκευσε το αποτέλεσµα στον καταχωρητή
SUBSET $x, $y, $z
$x και θέσε τις σηµαίες κατάστασης σύµφωνα µε το αποτέλεσµα
της πράξης
Αν η σηµαία προσήµου έχει την τιµή 1, τότε πρόσθεσε το
περιεχόµενο του καταχωρητή $y µε το περιεχόµενο του
ADDSI $x, $y, $z
καταχωρητή $z και αποθήκευσε το αποτέλεσµα στον καταχωρητή
$x. Αλλιώς, µην κάνεις καµία πράξη
Αν η σηµαία µηδέν έχει την τιµή 1 τότε πρόσθεσε το περιεχόµενο
του καταχωρητή $y µε το περιεχόµενο του καταχωρητή $z και
ADDZE $x, $y, $z
αποθήκευσε το αποτέλεσµα στον καταχωρητή $x. Αλλιώς µην
κάνεις καµιά πράξη
Αν η σηµαία προσήµου έχει την τιµή 1, τότε αφαίρεσε από το
περιεχόµενο του καταχωρητή $y το περιεχόµενο του καταχωρητή
SUBSI $x, $y, $z
$z και αποθήκευσε το αποτέλεσµα στον καταχωρητή $x. Αλλιώς
µην κάνεις καµία πράξη
Αν η σηµαία µηδέν έχει την τιµή 1 τότε αφαίρεσε από το
περιεχόµενο του καταχωρητή $y το περιεχόµενο του καταχωρητή
SUBZE $x, $y, $z
$z και αποθήκευσε το αποτέλεσµα στον καταχωρητή $x. Αλλιώς
µην κάνεις καµιά πράξη
END Ολοκλήρωση προγράµµατος
Α.Γράψτε πρόγραµµα για αυτόν τον επεξεργαστή που να υλοποιεί το παρακάτω

If ( a == b) then
c=a+b
else if ( a > b) then
c=a-b
else
c=b-a

όπου το α είναι αποθηκευµένο στη διεύθυνση 10016, το b στη διεύθυνση 20016 και το c στη
διεύθυνση 30016.

B. Γράψτε το ίδιο πρόγραµµα για επεξεργαστή Intel 8085.

Γ. Τι παρατηρείτε αναφορικά µε τον αριθµό των εντολών ;

Λύση:

Α. Για τον επεξεργαστή που αναφέρεται το πρόγραµµα θα είναι το εξής

Σελίδα 10 από 14
ΠΛΗ21 – 4η ΕΡΓΑΣΙΑ – 2012-13 - Ενδεικτικές Απαντήσεις

LD $1, [100] ; Φόρτωσε στον καταχωρητή $1 το a


LD $2, [200] ; Φόρτωσε στον καταχωρητή $2 το b
SUBSET $4, $2, $1 ; Κάνε την αφαίρεση b-a και φόρτωσε τις τιµές στις σηµαίες
ADDZE $3, $1, $2 ; c = a + b (αν ισχύει το a==b)
SUBSI $3, $1, $2 ; c = a - b (αν ισχύει το a > b)
SUBSET $4, $1, $2 ; Κάνε την αφαίρεση a-b και φόρτωσε τις τιµές στις σηµαίες
SUBSI $3, $2, $1 ; c = b - a (αν ισχύει το b > a άρα υλοποιεί το τελευταίο else)
SΤ $3, [300] ; Αποθήκευση στη διεύθυνση του c το $3
END ; Τέλος Προγράµµατος

2η Εναλλακτική

LD $1, [100] ; Φόρτωσε στον καταχωρητή $1 το a


LD $2, [200] ; Φόρτωσε στον καταχωρητή $2 το b
SUBSET $3, $1, $2 ; Κάνε την αφαίρεση a-b και φόρτωσε τις τιµές στις σηµαίες
ADDZE $3, $1, $2 ; c = a + b (αν ισχύει το a==b)
SUBSI $3, $2, $1 ; c = b - a (αν ισχύει το a < b)  
ST $3, [300] ; Αποθήκευση στη διεύθυνση του c το $3
END ; Τέλος Προγράµµατος

B. Για τον επεξεργαστή 8085 το πρόγραµµα θα είναι ως εξής

LXI H 100 ; αρχικοποίηση για να δείχνει στο a


LXI D 200 ; αρχικοποίηση για να δείχνει στο b
LDAX D ; µετέφερε στο Αcc το b
SUB M ; σύγκρινε το b µε το a (Acc = b – a)
JZ Equal ; ισχύει ότι a και b είναι ίσοι
JC A_gr ; αν CY = 1, τότε b-a < 0 δηλαδή, b < a και πάει στο A_gr
JMP Final ; Εκτελείται µόνο αν b > a και o Acc περιέχει ήδη το b-a
Equal: LDAX D ; Εκτελείτε µόνο αν a == b και µετέφερε στον Αcc το b
ADD M ; Acc = b + a
JMP Final ; Ολοκλήρωσε την πράξη
A_gr: LDAX D ; Εκτελείτε µόνο αν a > b και µετέφερε στον Αcc το a
MOV E, A ;
MOV A, M ;
SUB E ; Acc = a - b
Final : LXI H 300 ; Αρχικοποίηση για να δείχνει στο c
MOV M, A ; Αποθήκευση του Acc στο c
HLT ; Τέλος Προγράµµατος

Γ. Παρατηρούµε ότι ο επεξεργαστής 8085 χρειάζεται πολύ περισσότερες (σχεδόν διπλάσιες) εντολές
από τον επεξεργαστή που µας δίνεται, για να εκτελέσει το ίδιο απλό πρόγραµµα. Ο λόγος είναι ότι ο
επεξεργαστής που µας δίνεται υποστηρίζει εντολές υπό συνθήκη και δεν χρειάζονται εντολές
αλλαγής ροής του προγράµµατος (διακλαδώσεις), εν αντιθέσει µε τον 8085, που χρειάζεται εντολές
διακλάδωσης για να εκτελέσει αυτό το πρόγραµµα.

Άσκηση 5: [25 µονάδες]

Σε έναν επεξεργαστή Motorola 6800, συνδέστε ως περιφερειακές µονάδες δύο µνήµες ROM, τις
ROM1 και ROM2, των 8Kbytes και 4KBytes, αντίστοιχα, και δύο µνήµες RAM, τις RAM1 και
RAM2, των 4KBytes και 16KBytes, αντίστοιχα. Οι µνήµες ROM πρέπει να τοποθετηθούν στις

Σελίδα 11 από 14
ΠΛΗ21 – 4η ΕΡΓΑΣΙΑ – 2012-13 - Ενδεικτικές Απαντήσεις

αρχικές διευθύνσεις του πεδίου διευθύνσεων, ενώ οι µνήµες RAM στις αµέσως επόµενες. Οι µνήµες
ROM και οι µνήµες RAM απαιτούν τα σήµατα ελέγχου CS (chip select) και ΟΕ (output enable), τα
οποία πρέπει να έχουν τιµή 1 για να είναι ενεργά, ενώ οι µνήµες RAM απαιτούν επιπλέον και σήµα
ελέγχου R/W’ (read/write), που µε 1 πραγµατοποιεί ανάγνωση ενώ µε 0 εγγραφή. Σχεδιάστε το
παραπάνω σύστηµα. Εξηγείστε τον τρόπο δηµιουργίας των σηµάτων ελέγχου των µονάδων.

Υπόδειξη: Μελετώντας το χρονισµό για τους κύκλους ανάγνωσης και εγγραφής που παρουσιάζονται
στα σχήµατα 5.5 και 5.6 του βιβλίου, να καθορίσετε κατάλληλα τα σήµατα ελέγχου των µονάδων.

Λύση:

Όπως παρατηρούµε στο σχήµα 5.5 κατά τον κύκλο ανάγνωσης τα σήµατα ελέγχου R/W’ και VMA
παίρνουν την τιµή ‘1’, επίσης η τιµή της διεύθυνσης είναι σταθερή στο δίαυλο διευθύνσεων καθ’
όλη τη διάρκεια του κύκλου.

Όπως παρατηρούµε στο σχήµα 5.6, κατά τον κύκλο εγγραφής, το σήµα ελέγχου R/W’ παίρνει τη
τιµή ‘0’, ενώ το σήµα ελέγχου VMA παίρνει την τιµή ‘1’. Επίσης, η τιµή της διεύθυνσης είναι
σταθερή στο δίαυλο διευθύνσεων καθ’ όλη τη διάρκεια του κύκλου, ενώ τα δεδοµένα εµφανίζονται
στο δίαυλο δεδοµένων προς το τέλος του κύκλου, όταν το σήµα ελέγχου DBE είναι ‘1’. Το σήµα
DBE είναι είσοδος στον επεξεργαστή και συνήθως οδηγείται από το σήµα ρολογιού Φ2.

Τα παραπάνω σήµατα ελέγχου θα πρέπει να συνδυαστούν ώστε να δηµιουργηθούν τα κατάλληλα


σήµατα ελέγχου για τις µονάδες µνήµης.

Αρχικά θα πρέπει να υλοποιήσουµε τη διευθυνσιοδότηση των µνηµών. Τοποθετώντας σε διαδοχικές


διευθύνσεις τις µονάδες µνήµης που διαθέτουµε προκύπτει η χαρτογράφηση µνήµης που δίνεται
στον παρακάτω πίνακα:

Διευθύνσεις σε
Μέγεθος Ψηφία Πεδίο
Μνήµη δυαδική µορφή
(bytes) Διεύθυνσης Διευθύνσεων Α15 Α14 … Α2 Α1 Α0
ROM1 8K 13 0000 – 1FFF 0000 0000 0000 0000
0001 1111 1111 1111
ROM2 4K 12 2000 – 2FFF 0010 0000 0000 0000
0010 1111 1111 1111
RAM1 4K 12 3000 – 3FFF 0011 0000 0000 0000
0011 1111 1111 1111
RAM2 16K 14 4000 – 7FFF 0100 0000 0000 0000
0111 1111 1111 1111

Η µνήµη ROM1 καταλαµβάνει τα πρώτα 8 ΚBytes του πεδίου διευθύνσεων και συγκεκριµένα τις
διευθύνσεις 0000-1FFF. Παρατηρούµε ότι τα 13 λιγότερο σηµαντικά ψηφία (Α0 – Α12) της λέξης
διεύθυνσής της παίρνουν όλες τις δυνατές τιµές. Συνεπώς τα ψηφία αυτά χρησιµοποιούνται για την
εσωτερική διευθυνσιοδότηση της µνήµης και εφαρµόζονται στις εισόδους διεύθυνσης της µνήµης,
Τα ψηφία A13, A14,A15 έχουν σταθερή τιµή 0 για όλο το πεδίο διευθύνσεων της ROM1 και άρα θα
χρησιµοποιηθούν για τη δηµιουργία του σήµατος επιλογής (CSROM1) και επειδή η µνήµη επιλέγεται
όταν αυτά είναι ίσα µε 0 έχουµε CS ROM1 = A15 ⋅ A14 ⋅ A13 .

Η µνήµη ROM2 έχει χωρητικότητα 4ΚBytes και καταλαµβάνει τις διευθύνσεις 2000-2FFF.
Παρατηρούµε ότι τα 12 λιγότερο σηµαντικά ψηφία (Α0 – Α11) της λέξης διεύθυνσής της παίρνουν
όλες τις δυνατές τιµές. Συνεπώς τα ψηφία αυτά χρησιµοποιούνται για την εσωτερική

Σελίδα 12 από 14
ΠΛΗ21 – 4η ΕΡΓΑΣΙΑ – 2012-13 - Ενδεικτικές Απαντήσεις

διευθυνσιοδότηση της µνήµης και εφαρµόζονται στις εισόδους διεύθυνσης της µνήµης. Τα ψηφία
A15,A14,A13,A12 έχουν σταθερή τιµή για όλο το πεδίο διευθύνσεων της ROΜ2 (A15=0, A14=0, A13=1,
A12=0) και άρα θα χρησιµοποιηθούν για τη δηµιουργία του σήµατος επιλογής (CSROM2). Συνεπώς
CS ROM2 = A15 ⋅ A14 ⋅ A13 ⋅ A12 .

Η µνήµη RAM1 έχει χωρητικότητα 4ΚBytes και καταλαµβάνει τις διευθύνσεις 3000-3FFF.
Παρατηρούµε ότι τα 12 λιγότερο σηµαντικά ψηφία (Α0 – Α11) της λέξης διεύθυνσής της παίρνουν
όλες τις δυνατές τιµές. Συνεπώς τα ψηφία αυτά χρησιµοποιούνται για την εσωτερική
διευθυνσιοδότηση της µνήµης και εφαρµόζονται στις εισόδους διεύθυνσης της µνήµης. Τα ψηφία
A15,A14,A13,A12 έχουν σταθερή τιµή για όλο το πεδίο διευθύνσεων της RΑΜ1 (A15=0, A14=0, A13=1,
A12=1) και άρα θα χρησιµοποιηθούν για τη δηµιουργία του σήµατος επιλογής (CSRAM1). Συνεπώς
CS RAM1 = A15 ⋅ A14 ⋅ A13 ⋅ A12 .

Η µνήµη RAM2 έχει χωρητικότητα 16ΚBytes και καταλαµβάνει τις διευθύνσεις 4000-7FFF.
Παρατηρούµε ότι τα 14 λιγότερο σηµαντικά ψηφία (Α0 – Α13) της λέξης διεύθυνσής της παίρνουν
όλες τις δυνατές τιµές. Συνεπώς τα ψηφία αυτά χρησιµοποιούνται για την εσωτερική
διευθυνσιοδότηση της µνήµης και εφαρµόζονται στις εισόδους διεύθυνσης της µνήµης. Τα ψηφία
A15, A14 έχουν σταθερή τιµή για όλο το πεδίο διευθύνσεων της RΑΜ2 (A15=0, A14=1) και άρα θα
χρησιµοποιηθούν για τη δηµιουργία του σήµατος επιλογής (CSRAM2). Συνεπώς, CS RAM2 = A15 ⋅ A14 .

Οι δίαυλοι δεδοµένων των µονάδων µνήµης συνδέονται στο δίαυλο δεδοµένων του επεξεργαστή και
οι δίαυλοι διευθύνσεων συνδέονται στα αντίστοιχα ψηφία του δίαυλου διευθύνσεων του
επεξεργαστή, όπως αναφέρθηκε παραπάνω. Τα σήµατα CSROM1, CSROM2, CSRAM1 και CSRAM2
συνδέονται στα αντίστοιχα σήµατα επιλογής των µονάδων µνήµης. Όταν επιλέγεται µια µονάδα
µνήµης για να εξάγει αποτελέσµατα στην έξοδό της (ανάγνωση µνήµης) πρέπει το σήµα ελέγχου
ΟΕ=1. Σε περίπτωση εγγραφής δεδοµένων στη µνήµη πρέπει το σήµα ΟΕ να µένει στο 0 ώστε ο
τρισταθής οδηγητής της εξόδου της µονάδας µνήµης να είναι απενεργοποιηµένος διασφαλίζοντας
την αποφυγή σύγκρουσης δεδοµένων. Οι παραπάνω λειτουργίες σχετικά µε το ΟΕ επιτυγχάνονται
αν οδηγήσουµε στην είσοδο αυτή τον AND συνδυασµό του VMA και του R/W’, όπως προκύπτει
από τα Σχήµατα 4.5 και 4.6. Εποµένως σήµα ΟΕ=1 θα παραχθεί µόνο κατά την ανάγνωση όπου
VMA= R/W’=1 και όχι κατά την εγγραφή όπου R/W’=0.

Στις µνήµες RAM οδηγείται επίσης και το σήµα R/W’ του επεξεργαστή. Παρατηρώντας το Σχ. 4.6
(χρονισµός για εγγραφή) βλέπουµε ότι τα δεδοµένα εµφανίζονται στο δίαυλο όταν Φ2=1. Εποµένως
µε τη συµµετοχή του Φ2 στην παραγωγή του R/W'(memory) της µνήµης αποτρέπεται το να
περάσουν αρχικά "λανθασµένα" δεδοµένα στη µνήµη (και επίσης να ξεκινήσει εγγραφή πριν
σταθεροποιηθεί απόλυτα η διεύθυνση µέσα σε αυτήν) αφού τα σωστά δεδοµένα εµφανίζονται µε την
ανερχόµενη ακµή του Φ2, επίσης για να αποκλείσουµε την περίπτωση εγγραφής λανθασµένης τιµής
στη µνήµη (π.χ. όταν ο επεξεργαστής θέτει τους οδηγητές των διαύλων του σε κατάσταση υψηλής
εµπέδησης, καταστάσεις WAIT, HALT, HOLD) πρέπει να συµµετάσχει και το VMA (που στις
αντίστοιχες καταστάσεις είναι 0) στην παραγωγή του R/W' (memory) της µνήµης. Όταν R/W’=1, πρέπει
να έχουµε R/W' memory=1, ενώ R/W' memory=0 πρέπει να έχουµε µόνο όταν R/W’=0 και VMA=Φ2=1.
Αυτό επιτυγχάνεται µε µια πύλη NAND µε εισόδους R / W ',VMA, Φ 2 .

Το σχήµα της διάταξης δίνεται παρακάτω.

Σελίδα 13 από 14
ΠΛΗ21 – 4η ΕΡΓΑΣΙΑ – 2012-13 - Ενδεικτικές Απαντήσεις

CS ROM1
OE (8K)

13
/ A 12 ... A 0
/ D 7 ... D 0
8

CS ROM2
OE (4K)

12
/ A 11 ... A 0

14 / D 7 ... D 0
/ 8
...

A 15 A 14 A 13A 12 A 11 A0 14 / CS RAM1
8 OE (4K)

/
R/W’
D 7 ... D 0 /
8 12
/ A 11 ... A 0
/ D 7 ... D 0
MOTOROLA 8
6800

CS RAM2
R/W’ (16K)
OE
VMA
DBE Φ2
R/W’

/ A 13 ... A 0
14 / D 7 ... D 0
8

ΑΣΚΗΣΗ ΜΟΝΑΔΕΣ Ο βαθµός σας


1η 10
2η 20
3η 25
4η 20
5η 25
ΣΥΝΟΛΟ 100
Τελικός Βαθµός 10.0

Σελίδα 14 από 14

You might also like