Άσκηση 1η: Αναφέρατε τα στάδια εκτέλεσης της εντολής ADC [6789], DH µε εντολές µικροπρογράµµατος περιγράφοντας και εξηγώντας αναλυτικά το κάθε στάδιο καθώς και τις τιµές ψηφιακών λέξεων που εµφανίζονται στους διαύλους δεδοµένων και διευθύνσεων σε κάθε στάδιο. Υποθέστε ότι ο IP ήδη δείχνει την διεύθυνση µνήµης που είναι αποθηκευµένη η εντολή (IP=0200). Επίσης υποθέστε ότι το opcode της εντολής είναι 1 byte (36 H ), ότι στη θέση DS:6789 υπάρχει ο αριθµός 45 H και ότι ο DH πριν την εκτέλεση της εντολής έχει την τιµή 12 H. Λύση 1η: Φάση Εξωτερική Λειτουργία ΑΒ DB Εσωτερική Μικρο-λειτουργία 1 ιάβασµα opcode 0100:0200 36 MAR IP; IP IP+1(0201); wait; MDR DB; ΙR MDR 2 ιάβασµα low byte παραµέτρου διεύθυνσης 0100:0201 89 MAR IP; IP IP+1(0202); wait; MDR DB; ADR L MDR 3 ιάβασµα high byte 0100:0202 67 MAR IP; IP IP+1(0203); wait; MDR DB; ADR H MDR 4 Ανάγνωση δεδοµένων από την µνήµη και πρόσθεση 5 Εκτέλεση εντολής αποθήκευση δεδοµένων 0100:6789 45 MAR ADR; wait;mdr DB; SCR L DH+MDR+CY 0100:6789 57 MAR ADR;MDR SCR L ; wait; (εγγραφή στην µνήµη και τέλος διαδικασίας) στην µνήµη 6 Επόµενη εντολή 0100:0203 (0003) MAR IP; IP IP+1(0204); wait; MDR DB; ΙR MDR Άσκηση 2η: Σχεδιάστε και περιγράψτε την διάταξη αποκωδικοποίησης διευθύνσεων µνήµης σε ένα υπολογιστικό σύστηµα µε address bus των 20 bit, που έχει 1MB µνήµη εκ των οποίων τα 768 ΚΒ είναι RAM και τα 256 είναι ROM. Και η µνήµη RAM και η ROM υλοποιούνται µε chip µνήµης των 64 ΚΒ, και επιπλέον η µνήµη ROM χαρτογραφείται στις υψηλότερες διευθύνσεις και η RAM στις χαµηλότερες.. Λύση 2η: Chip RAM = 768Kb / 64Kb = 12 Chip ROM = 256Kb / 64Kb = 4 Σύνολο chip = 16 Άρα οι 4 πιο σηµαντικές γραµµές (υψηλότερης τάξης) του Address Bus Α16,Α17,Α18,Α19 θα οδηγηθούν στον αποκωδικοποιητή (2 4 =16). Οι 16 λιγότερες σηµαντικές γραµµές διευθύνσεων Α0..Α15 οδηγούνται σε όλα τα; chip µνήµης (2 16 =64Kb)
Άσκηση 3η: Εξηγήστε τι ακριβώς κάνει ο παρακάτω κώδικας assembly 8088 στο σύνολό του, σχολιάζοντας επεξηγηµατικά όλες τις γραµµές του κώδικα, αλλά και τις µεταβλητές [0100], [0102] και [0104] : MOV CL,[0102] MOV BL,[0100] MOV AX,1 loop1: CMP CL,00 JE telos MUL BL DEC CL JMP loop1 telos: MOV [0104],AX Λύση 3η:
Ο κώδικας υπολογίζει την δύναµη B E όπου B είναι το περιεχόµενο της [0100] και E το περιεχόµενο της [0102], Το αποτέλεσµα σώζεται στην [0104]. MOV CL,[0102] MOV BL,[0100] MOV AX,1 loop1: CMP CL,00 JE telos MUL BL DEC CL Φορτώνει τον εκθέτη στον CL Φορτώνει την Βάση στον BL Αρχικοποιεί τον ΑΧ που θα υπολογίζει την δύναµη µε το 1 που είναι το ουδέτερο στοιχείο στον πολλαπλασιασµό. Συγκρίνει το CL µε το 0 για να τερµατιστεί ο βρόχος και τότε διακλαδίζει το πρόγραµµα στο telos αλλιώς κάνει AX=AX * BL µειώνει τον CL που είναι µετρητής Άσκηση 4η: JMP loop1 και ξαναγυρνάει στο Loop1 για να εκτελέσει την επόµενη επανάληψη telos: MOV [0104],AX Αποθηκεύει το αποτέλεσµα (AX) στην [0104] Σχεδιάστε και περιγράψτε αναλυτικά την διάταξη αποκωδικοποίησης διευθύνσεων µνήµης σε ένα υπολογιστικό σύστηµα µε Μ/Ε 80286 που έχει address bus των 24 bit, το οποίο έχει 16MB µνήµη εκ των οποίων τα 12 ΜΒ είναι RAM και τα 4ΜΒ είναι ROM. Και η µνήµη RAM και η ROM υλοποιούνται µε chip µνήµης των 512 ΚΒ, και επιπλέον η µνήµη ROM χαρτογραφείται στις υψηλότερες διευθύνσεις και η RAM στις χαµηλότερες. Λύση 4η: Chip RAM = 12Μb / 512Kb = 24 Chip ROM = 4Μb / 512Kb = 8 Σύνολο chip = 32 Άρα οι 5 πιο σηµαντικές γραµµές (υψηλότερης τάξης) του Address Bus Α19, Α20, Α21, Α22, Α23 θα οδηγηθούν στον αποκωδικοποιητή (2 5 =32). Οι 19 λιγότερες σηµαντικές γραµµές διευθύνσεων Α0..Α18 οδηγούνται σε όλα τα; chip µνήµης (2 19 =512Kb)
Άσκηση 5η: ίνονται οι τιµές των καταχωρητών κατά την έναρξη ενός προγράµµατος γλώσσας µηχανής του 8088 : CS=0100, DS=0200, SS=0400, ES=0600, IP=1111, SP=1FFF, SI=0001, DI=2222 Καθώς και το ίδιο το πρόγραµµα : MOV AL,[1234] PUSH AL MOVSB Αναφέρατε αιτιολογηµένα σε δεκαεξαδικό και δεκαδικό σύστηµα την πραγµατική διεύθυνση µνήµης που: Α. Ξεκινάει το πρόγραµµα Β. Το περιεχόµενό της φορτώνεται στον AL Γ. Αποθηκεύεται ο AL στο Stack (Στοίβα). ιαβάζεται ο χαρακτήρας του string µε την MOVSB E. Αποθηκεύεται ο χαρακτήρας του string µε την MOVSB Λύση 5η: Α. Ξεκινάει το πρόγραµµα στην CS:IP = 010016:111116 = 010016*1610+111116 = 100016+111116 = 211116 = 846510 Β. Το περιεχόµενό της φορτώνεται στον AL DS:123416 = 020016:123416 = 020016*1610+123416 = 200016+123416 = 323416 = 1285210 Γ. Αποθηκεύεται ο AL στο Stack (Στοίβα) SS:SP = 040016:1FFF16 = 040016*1610+1FFF16 = 400016+1FFF16 = 5FFF16 = 2457510. ιαβάζεται ο χαρακτήρας του string µε την MOVSB DS:SI = 020016:000116 = 020016*1610+000116 = 200016+000116 = 200116 = 819310 E. Αποθηκεύεται ο χαρακτήρας του string µε την MOVSB
ES:DI = 060016:222216 = 060016*1610+222216 = 600016+222216 = 822216 = 3331410 Άσκηση 6η: Εξηγήστε τι ακριβώς κάνει ο παρακάτω κώδικας assembly 8088 στο σύνολό του, σχολιάζοντας επεξηγηµατικά όλες τις γραµµές του κώδικα, αλλά και την µεταβλητή [0200] και τον πίνακα που αρχίζει στην διεύθυνση [0208] : 0100:0000 MOV AL, 80 0100:0002 MOV SI, 00 0100:0005 TEST AL, [0200] 0100:0008 JNZ 0012 0100:000Α MOV BY[0208+SI], 00 0100:000F JMP 0017 0100:0012 MOV BY[0208+SI], 01 0100:0017 SHR AL,1 0100:0019 INC SI 0100:001A CMP SI,08 0100:001D JNE 0005 0100:001F INT 3 Λύση 6η: Ο κώδικας µετατρέπει έναν αριθµό του 1 ος byte που βρίσκεται στην διεύθυνση µνήµης 0200 σε «δυαδικό» νούµερο, βάζοντας τα αντίστοιχα 0 και 1 σε ένα πίνακα που αρχίζει στην διεύθυνση µνήµης 208 και τελειώνει στην 020F. 0100:0000 MOV AL, 80 Βάζει στον AL την µάσκα 10000000 0100:0002 MOV SI, 00 Αρχικοποιεί τον µετρητή/δείκτη SI σε 0 0100:0005 TEST AL, [0200] Κάνει λογικό AND µεταξύ µάσκας και αριθµού 0100:0008 JNZ 0012 Αν βρέθηκε «1» στην αντίστοιχη θέση του αριθµού, τότε πήγαινε στην 0012 0100:000Α MOV BY[0208+SI], 00 αλλιώς («0») βάλε στον πίνακα και στην θέση «SI» την τιµή 0 0100:000F JMP 0017 πήγαινε στο κοινό σηµείο συνέχειας 0100:0012 MOV BY[0208+SI], 01 βάλε στον πίνακα και στην θέση SI την τιµή 1 0100:0017 SHR AL,1 Ολίσθησε την µάσκα δεξιά µία θέση, για να ελέγξεις το επόµενο bit (10000000 01000000) 0100:0019 INC SI Αύξησε τον SI κατά 1 0100:001A CMP SI,08 Σύγκρινέ τον µε το 8 0100:001D JNE 0005 Αν δεν έφτασε στο 8 ξανα-πήγαινε στην 001D 0100:001F INT 3 Τέλος Προγράµµατος Άσκηση 7η: Αναφέρατε τα στάδια εκτέλεσης της εντολής ΧΟR CX, [ABCD] µε εντολές µικροπρογράµµατος περιγράφοντας και εξηγώντας αναλυτικά το κάθε στάδιο καθώς και τις τιµές ψηφιακών λέξεων που εµφανίζονται στους διαύλους δεδοµένων και διευθύνσεων σε κάθε στάδιο. Υποθέστε ότι ο IP ήδη δείχνει την διεύθυνση µνήµης που είναι αποθηκευµένη η εντολή (IP=0200). Επίσης υποθέστε ότι το opcode της εντολής είναι 1 byte (33 H ), ότι στη θέση DS:ABCD υπάρχει ο αριθµός 54 H και στην επόµενη θέση µνήµης ο 76 H. Υπόδειξη : πρέπει να χρησιµοποιηθεί ο ScratchPad register.
Λύση 7η: Φάση Εξωτερική Λειτουργία ΑΒ DB Εσωτερική Μικρο-λειτουργία 1 ιάβασµα opcode 0100:0200 33 MAR IP; IP IP+1; wait; MDR DB; ΙR L MDR 2 ιάβασµα low byte παραµέτρου διεύθυνσης 0100:0201 CD MAR IP; IP IP+1; wait; MDR DB; ADR L MDR 3 ιάβασµα high byte 0100:0202 AB MAR IP; IP IP+1; wait; MDR DB; ADR H MDR 4 ιάβασµα τελικών δεδοµένων 1o byte 0100:ABCD 54 MAR ADR; wait; MDR DB; SCR L MDR 5 ιάβασµα τελικών δεδοµένων 2o byte 0100:ABCE 76 EAR ADR+1; MAR EAR; wait; MDR DB; SCR H MDR 6 Εκτέλεση εντολής - τοποθέτηση στον CX - - CX CΧ XOR SCR 7 Επόµενη εντολή 0100:0203 (0203) MAR IP; IP IP+1; wait; MDR DB; ΙR MDR Άσκηση 8η: Με το δεδοµένο ότι οι συνηθισµένοι ακροδέκτες σε chip µνήµης RAM είναι οι παρακάτω: 1. Ακροδέκτες ιεύθυνσης (Α0, Α1,..., Αn) : 2. Ακροδέκτες εδοµένων (D0, D1,, Dκ) 3. CS (Chip Select) 4. WE (Write Enable) 5. RE (Read Enable) να περιγράψετε αιτιολογηµένα τις τιµές που θα πάρουν οι σχετικοί ακροδέκτες του chip RAM που θα εµπλακεί στην διαδικασία εκτέλεσης της εντολής MOV AL,[1234h]. Υποθέστε ότι στην διεύθυνση [1234h] υπάρχει ο αριθµός FFh. Υποθέστε ότι οι ακροδέκτες ενεργοποιούνται µε την τιµή 1 και απενεργοποιούνται µε την τιµή 0 (positive logic). (h=hex/δεκαεξαδικό, d=decimal/δεκαδικό, b=binary/δυαδικό) Λύση 8η: 1. Ακροδέκτες ιεύθυνσης (Α0, Α1,..., Αn) : Θα πάρουν την τιµή της διεύθυνσης DS:1234. Αν υποθέσουµε ότι ο DS έχει την τιµή 0100 (εξ ορισµού τιµή για τον BGC-8088) τότε η διεύθυνση θα είναι (h=hex/δεκαεξαδικό, d=decimal/δεκαδικό, b=binary/δυαδικό) : DS:1234h = 0100h:1234h = 0100h X 16d + 1234h = 0100h X 10h + 1234h = 1000h + 1234h = 2234h = 8756d = 10001000110100b 2. Ακροδέκτες εδοµένων (D0, D1,, Dκ) :
Θα πάρουν την τιµή FFh = 255d = 11111111b που είναι και το περιεχόµενο της [1234] που θα διαβαστεί. 3. CS (Chip Select) Θα πάρει την τιµή 1 εφόσον το chip θα ενεργοποιηθεί για την ανάγνωση µνήµης 4. WE (Write Enable) Θα πάρει την τιµή 0 εφόσον δεν πρόκειται για εγγραφή µνήµης αλλά για ανάγνωση. 5. RE (Read Enable) Θα πάρει την τιµή 1 εφόσον πρόκειται για ανάγνωση µνήµης. Άσκηση 9η: Με το δεδοµένο ότι οι συνηθισµένοι ακροδέκτες σε chip µνήµης RAM είναι οι παρακάτω: 6. Ακροδέκτες ιεύθυνσης (Α0, Α1,..., Αn) : 7. Ακροδέκτες εδοµένων (D0, D1,, Dκ) 8. CS (Chip Select) 9. WE (Write Enable) 10. RE (Read Enable) να περιγράψετε αιτιολογηµένα τις τιµές που θα πάρουν οι σχετικοί ακροδέκτες του chip RAM που θα εµπλακεί στην διαδικασία εκτέλεσης της εντολής MOV [5678h], DH. Υποθέστε ότι στον καταχωρητή DH υπάρχει ο αριθµός 12h. Υποθέστε ότι οι ακροδέκτες ενεργοποιούνται µε την τιµή 1 και απενεργοποιούνται µε την τιµή 0 (positive logic). (h=hex/δεκαεξαδικό, d=decimal/δεκαδικό, b=binary/δυαδικό) Λύση 9η: 6. Ακροδέκτες ιεύθυνσης (Α0, Α1,..., Αn) : Θα πάρουν την τιµή της διεύθυνσης DS:5678. Αν υποθέσουµε ότι ο DS έχει την τιµή 0100 (εξ ορισµού τιµή για τον BGC-8088) τότε η διεύθυνση θα είναι (h=hex/δεκαεξαδικό, d=decimal/δεκαδικό, b=binary/δυαδικό) : DS:5678h = 0100h:5678h = 0100h X 16d + 5678h = 0100h X 10h + 5678h = 1000h + 5678h = 6678h = 26232d = 110011001111000b 7. Ακροδέκτες εδοµένων (D0, D1,, Dκ) : Θα πάρουν την τιµή 12h = 18d = 00010010b που είναι και το περιεχόµενο του DH που θα εγγραφεί στην µνήµη. 8. CS (Chip Select) Θα πάρει την τιµή 1 εφόσον το chip θα ενεργοποιηθεί για την εγγραφή µνήµης 9. WE (Write Enable)
Θα πάρει την τιµή 1 εφόσον πρόκειται για εγγραφή µνήµης. 10. RE (Read Enable) Θα πάρει την τιµή 0 εφόσον δεν πρόκειται για ανάγνωση µνήµης αλλά για εγγραφή. Άσκηση 10η: Με πόσους τρόπους µπορεί να αναπαρασταθεί (ως segment:offset) η απόλυτη διεύθυνση µνήµης 33d=0021h. Λύση 10η: Segment Offset (hex) Απόλυτη ιεύθυνση (dec) 0002 0001 0000 000F 000E. 0001 0000 000F 000E. 0001 0000 000F 000E. 0001 0000 47 46 33 32 31 30 17 16 15 14 1 0 Άρα 0021h = 33d = Α) 0002 : 0001 Β) 0001 : 0011
Γ) 0000 : 0021 Άσκηση 11η: Με πόσους τρόπους µπορεί να αναπαρασταθεί (ως segment:offset) η απόλυτη διεύθυνση µνήµης 62d=003Εh. Λύση 11η: Segment Offset (hex) Απόλυτη ιεύθυνση (dec) 0003 0002 0001 0000 000F 000E. 0001 0000 000F 000E. 0001 0000 000F 000E. 0001 0000 000F 000E. 0001 0000 63 62 49 48 47 46 33 32 31 30 17 16 15 14 1 0 Άρα 003Εh = 62d =
Α) 0003 : 000Ε Β) 0002 : 001Ε Γ) 0001 : 002Ε ) 0000 : 003 Ε Άσκηση 12η: είξτε τον τρόπο µε τον οποίο θα κωδικοποιηθεί η λέξη δεδοµένων : 10110101 µε εφαρµογή του κώδικα Hamming. Επίσης δείξτε τις τιµές που θα πάρουν τα control bits H0, H1, H2 και H3. Λύση 12η: Είδος Bit A/A Θέσης υαδική Α/Α D7 = 1 12 1 1 0 0 D6 = 0 11 1 0 1 1 D5 = 1 10 1 0 1 0 D4 = 0 9 1 0 0 1 H3 = 0 8 1 0 0 0 D3 = 1 7 0 1 1 1 D2 = 1 6 0 1 1 0 D1 = 0 5 0 1 0 1 H2 = 1 4 0 1 0 0 D0 = 1 3 0 0 1 1 H1 = 0 2 0 0 1 0 H0 = 0 1 0 0 0 1 P3 P2 P1 P0 µορφή P0 = D6 D4 D3 D1 D0 H0 = 0 0 1 0 1 H0 άρα H0=0 P1 = D6 D5 D3 D2 D0 H1 = 0 1 1 1 1 H1 άρα H1=0 P2 = D7 D3 D2 D1 H2 = 1 1 1 0 H2 άρα H2=1 P3 = D7 D6 D5 D4 H3 = 1 0 1 0 H3 άρα H3=0
Άσκηση 13η: ίνεται η λέξη των 12 bit: 010110000100 Η οποία είναι κωδικοποιηµένη µε τον κώδικα Hamming και διαβάστηκε από µία Περιφερειακή Συσκευή. είξτε αν η λέξη διαβάστηκε σωστά ή αν περιέχει σφάλµα και που βρίσκεται αυτό. Λύση 13η: Είδος Bit A/A Θέσης υαδική Α/Α D7 = 0 12 1 1 0 0 D6 = 0 11 1 0 1 1 D5 = 1 10 1 0 1 0 D4 = 0 9 1 0 0 1 H3 = 0 8 1 0 0 0 D3 = 0 7 0 1 1 1 D2 = 0 6 0 1 1 0 D1 = 1 5 0 1 0 1 H2 = 1 4 0 1 0 0 D0 = 0 3 0 0 1 1 H1 = 1 2 0 0 1 0 H0 = 0 1 0 0 0 1 P3 P2 P1 P0 µορφή P0 = D6 D4 D3 D1 D0 H0 = 0 0 0 0 1 0 = περιττή ισοτιµία (1) P1 = D6 D5 D3 D2 D0 H1 = 0 1 0 0 0 1 = άρτια ισοτιµία (0) P2 = D7 D3 D2 D1 H2 = 0 0 0 1 1 = άρτια ισοτιµία (0) P3 = D7 D6 D5 D4 H3 = 0 0 1 0 0 = περιττή ισοτιµία (1) Άρα P3 P2 P1 P0 = 1 0 0 1 Άρα υπάρχει σφάλµα στη θέση 1001b = 9d Εποµένως το bit D4 έχει σφάλµα και πρέπει να γίνει 1
Άσκηση 14η: Σχεδιάστε την υλοποίηση µίας πύλης NOT µε πύλες NAND, µίας πύλης OR µε πύλες NOR και µίας πύλης OR µε πύλες NAND. Λύση 14η: Πύλη ΝΟΤ µε πύλη NAND : Πύλη OR µε πύλες NOR : Πύλη OR µε πύλες NAND : Άσκηση 15η: Συµπληρώστε τα αποτελέσµατα µετά την εκτέλεση της πράξης για τις διάφορες περιπτώσεις. ADD AL,BL α/α AL BL AL=AL+BL CY ZF SF OF PF AF 1 8F 83 2 2E 41 3 7F 03 4 FF 01 5 FF 02
Λύση 15η: α/α AL BL AL=AL+BL CY ZF SF OF PF AF 1 8F 83 12 1 0 0 1 1 1 2 2E 41 6F 0 0 0 0 1 0 3 7F 03 82 0 0 1 1 1 1 4 FF 01 00 1 1 0 0 1 1 5 FF 02 01 1 0 0 0 0 1 Άσκηση 16η: Συµπληρώστε τα αποτελέσµατα µετά την εκτέλεση της πράξης για τις διάφορες περιπτώσεις. SUB CH,DH α/α CH DH CH=CH-DH CY ZF SF OF PF AF 1 6F 70 2 FF 02 3 80 01 4 01 02 5 01 FF Λύση 16η: α/α CH DH CH=CH-DH CY ZF SF OF PF AF 1 6F 70 FF 1 0 1 0 1 0 2 FF 02 FD 0 0 1 0 0 0 3 80 01 7F 0 0 0 1 0 1 4 01 02 FF 1 0 1 0 1 1 5 01 FF 02 1 0 0 0 0 1 Άσκηση 17η: Μετατρέψτε τους παρακάτω δεκαδικούς αριθµούς σε κωδικοποιηµένη µορφή αριθµών κινητής υποδιαστολής (Sign-Exponent-Mantissa) σύµφωνα µε το ισχύον πρότυπο IEEE754: A/A Αριθµός Sign Exponent Mantissa 1 143,83984375 2-0,044921875 3 1744619.75 4-498586546601984.0 5 0,000000476837158203125 Τα τµήµατα Exponent και Mantissa να είναι σε ακέραια και δυαδική µορφή. Υποθέστε ότι ο τύπος των κωδικοποιούµενων αριθµών θα είναι «απλής ακρίβειας» (single precision) δηλαδή των 32 bit.
Λύση 17η: α/α Αριθµός Sign Exponent Mantissa 1 143,83984375 0 10000110=(127+7) 000111111010111 = 4055 2-0,044921875 1 1111010 = (127-5) 0111 = 7 3 1744619.75 0 10010011=(127+20) 1010100111101110101111=2784175 4-498586546601984.0 1 10101111=(127+48) 11000101011101100011101 = 6470429 5 0,000000476837158203125 0 1101010 = (127-21) 0 Εξήγηση: 1. 143,83984375 = 143 215/256 = 10001111.11010111b = 1.000111111010111b x 2^7 άρα M=000111111010111b (το 1.xxxx δεν αποθηκεύεται), Ε=7 αλλά µε το +127 offset γίνεται E=127+7=134 = 10000110b. Το πρόσηµο είναι θετικό άρα S=0 2. -0,044921875 = -23/512 = 0.000010111b = 1.0111b x 2^-5 άρα M=0111 (το 1.xxxx δεν αποθηκεύεται), E=-5 αλλά µε το +127 offset γίνεται Ε=127-5=122 = 1111010b. Το πρόσηµο είναι αρνητικό άρα S=1. 3. 1744619.75 = 1744619 ¾ = 110101001111011101011.11b = 1.1010100111101110101111b x 2^20 άρα Μ=1010100111101110101111b (το 1.xxxx δεν αποθηκεύεται), Ε=20 αλλά µε το +127 offset γίνεται E=127+20=147 = 10010011b. Το πρόσηµο είναι θετικό άρα S=0 4. -498586546601984.0 = 1110001010111011000111010000000000000000000000000b = 1.110001010111011000111010000000000000000000000000 x 2^48 άρα Μ=11000101011101100011101b (23 ψηφία), E=48 αλλά µε το +127 offset γίνεται Ε=127+48=175 = 10101111b. Το πρόσηµο είναι αρνητικό άρα S=1. 5. 0,000000476837158203125 = 524288 / 1099511627776 = 0.0000000000000000000010000000000000000000 = 1.00 x 2^-21 άρα Μ=0 (το 1.xxxx δεν αποθηκεύεται), Ε=-21 αλλά µε το +127 offset γίνεται E=127-21=106 = 1101010b. Το πρόσηµο είναι θετικό άρα S=0 Άσκηση 18η: Πόσους «κύκλους µηχανής» χρειάζεται για να εκτελεστεί η εντολή : ADD [1234],DX µε το δεδοµένο ότι το Opcode της αποτελείται από 2 bytes. Λύση 18η: Η εντολή ADD [1234],DX χρειάζεται 8 «κύκλους µηχανής» για την εκτέλεσή της που είναι : 1. 1 κύκλος για διάβασµα του 1 ου opcode 2. 1 κύκλος για διάβασµα του 2 ου opcode 3. 1 κύκλος για διάβασµα του 1 ου byte της παραµέτρου διεύθυνσης (34) 4. 1 κύκλος για διάβασµα του 2 ου byte της παραµέτρου διεύθυνσης (12) 5. 1 κύκλος για προσπέλαση της διεύθυνσης [1234] και προσκόµισης του 1 ου byte των δεδοµένων
6. 1 κύκλος για προσπέλαση της διεύθυνσης [1235] και προσκόµισης του 2 ου byte των δεδοµένων 7. Μετά την πρόσθεση 1 κύκλος για προσπέλαση της διεύθυνσης [1234] και αποθήκευσης του 1 ου byte του αποτελέσµατος 8. Και τελικά 1 κύκλος για προσπέλαση της διεύθυνσης [1235] και αποθήκευσης του 2 ου byte του αποτελέσµατος Άσκηση 19η: Πόσους «κύκλους µηχανής» χρειάζεται για να εκτελεστεί η εντολή : AND WO[5678],ABCD µε το δεδοµένο ότι το Opcode της αποτελείται από 2 bytes. Λύση 19η: Η εντολή AND WO[5678],ABCD χρειάζεται 10 «κύκλους µηχανής» για την εκτέλεσή της που είναι : 1. 1 κύκλος για διάβασµα του 1 ου opcode 2. 1 κύκλος για διάβασµα του 2 ου opcode 3. 1 κύκλος για διάβασµα του 1 ου byte της παραµέτρου διεύθυνσης (78) 4. 1 κύκλος για διάβασµα του 2 ου byte της παραµέτρου διεύθυνσης (56) 5. 1 κύκλος για διάβασµα του 1 ου byte της παραµέτρου δεδοµένων (CD) 6. 1 κύκλος για διάβασµα του 2 ου byte της παραµέτρου δεδοµένων (AB) 7. 1 κύκλος για προσπέλαση της διεύθυνσης [5678] και προσκόµισης του 1 ου byte των δεδοµένων 8. 1 κύκλος για προσπέλαση της διεύθυνσης [5679] και προσκόµισης του 2 ου byte των δεδοµένων 9. Μετά την AND 1 κύκλος για προσπέλαση της διεύθυνσης [5678] και αποθήκευσης του 1 ου byte του αποτελέσµατος 10. Και τελικά 1 κύκλος για προσπέλαση της διεύθυνσης [5679] και αποθήκευσης του 2 ου byte του αποτελέσµατος Άσκηση 20η: Χρειάζεται να σχηµατίσουµε µια µνήµη χωρητικότητας 8 Giga διευθύνσεων, όπου κάθε διεύθυνση αντιστοιχεί σε κελί µεγέθους 32 Bit, µε chip µνήµης διάταξης 512Μ Χ 1. Πόσα τέτοια chip θα χρειαστούµε και γιατί. Λύση 20η: Για µια µνήµη χωρητικότητας 8 Giga διευθύνσεων, όπου κάθε διεύθυνση αντιστοιχεί σε κελί µεγέθους 32 Bit, µε chip µνήµης διάταξης 512Μ Χ 1 θα χρειαστούµε: 32 chip για να σχηµατίσουµε µνήµη 512Μ λέξεων των 32 Bit καθώς 512Μ Χ 32 = (512Μ Χ 1) Χ 32 και, προφανώς 16Χ32 chip για να σχηµατίσουµε µνήµη 8 G λέξεων των 32 Bit καθώς 8 G Χ32 = (512Μ Χ32) Χ 16 Άρα θα χρειαστούν συνολικά 16Χ32 = 512 τέτοια chip
Άσκηση 21η: ίνεται ο παρακάτω κώδικας ανίχνευσης σφαλµάτων : Αριθµός Κωδικοποίηση 0 000000 1 000011 2 001100 3 001111 4 110000 5 110011 6 111100 7 111111 Ποια είναι η απόσταση Hamming του κώδικα? Λύση 21η: Η απόσταση Hamming του κώδικα είναι 2 γιατί αν πάρουµε δύο οποιουσδήποτε αποδεκτούς συνδυασµούς η ελάχιστη απόσταση Hamming µεταξύ τους είναι 2. Άσκηση 22η: Σε µία cache µνήµη Άµεσης Χαρτογράφησης µε µέγεθος 1Κ byte είναι οργανωµένη σε 32 γραµµές όπου κάθε γραµµή έχει χωρητικότητα 32 bytes. Η µνήµη αυτή χρησιµοποιείται ως ενδιάµεση µνήµη για προσπέλαση αργής RAM συνολικού µεγέθους 4 Kbyte Αν η CPU προσπελάσει διαδοχικά τις µνήµες 28 515 2583 3781 1000 3045 233 1250 4000 να επισηµάνεται σε ποιες περιπτώσεις συµβαίνει σύγκρουση κρυφής µνήµης (cache collision). Λύση 22η: Η µνήµη cache θα είναι ως εξής : Εγγραφή Valid Tag Data 31 30 29 28 27 26 25 2016-992 - 1023 2047 1984-960 - 991 2015 1952-928 - 959 1983 1920-896 - 927 1951 1888-864 - 895 1919 1856-832 - 863 1887 1824-800 - 831 1855 Αντίστοιχες ιευθύνσεις RAM 3040-3071 3008-3039 2976-3007 2944-2975 2912-2943 2880-2911 2848-2879 4064-4095 4032-4063 4000-4031 3968-3999 3936-3967 3904-3935 3872-3903
24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 768-799 736-767 704-735 672-703 640-671 608-639 576-607 544-575 512-543 480-511 448-479 416-447 384-415 352-383 320-351 288-319 256-287 224-255 192-223 160-191 128-159 96-127 64-95 32-63 0-31 1792-1823 1760-1791 1728-1759 1696-1727 1664-1695 1632-1663 1600-1631 1568-1599 1536-1567 1504-1535 1472-1503 1440-1471 1408-1439 1376-1407 1344-1375 1312-1343 1280-1311 1248-1279 1216-1247 1184-1215 1152-1183 1120-1151 1088-1119 1056-1087 1024-1055 2816-2847 2784-2815 2752-2783 2720-2751 2688-2719 2656-2687 2624-2655 2592-2623 2560-2591 2528-2559 2496-2527 2464-2495 2432-2463 2400-2431 2368-2399 2336-2367 2304-2335 2272-2303 2240-2271 2208-2239 2176-2207 2144-2175 2112-2143 2080-2111 2048-2079 3840-3871 3808-3839 3776-3807 3744-3775 3712-3743 3680-3711 3648-3679 3616-3647 3584-3615 3552-3583 3520-3551 3488-3519 3456-3487 3424-3455 3392-3423 3360-3391 3328-3359 3296-3327 3264-3295 3232-3263 3200-3231 3168-3199 3136-3167 3104-3135 3072-3103
ιεύθυνση RAM Αντίστοιχη Γραµµή cache Cache Collision? 28 0 OXI 515 16 OXI 2583 16 NAI 3781 22 OXI 1000 31 OXI 3045 31 NAI 233 7 OXI 1250 7 NAI 4000 29 OXI Άσκηση 23η: ίνονται οι τιµές των καταχωρητών κατά την έναρξη ενός προγράµµατος γλώσσας µηχανής του 8088 : CS=0400, DS=0600, SS=0800, ES=1000, IP=1234, SP=2FED, SI=5566, DI=9876 Καθώς και το ίδιο το πρόγραµµα : MOV [4567],BL POP CX ADD AL,[5000+DI] CALL 0500 Αναφέρατε αιτιολογηµένα σε δεκαεξαδικό και δεκαδικό σύστηµα την πραγµατική διεύθυνση µνήµης που: Α. Ξεκινάει το πρόγραµµα Β. Θα αποθηκευτεί το περιεχόµενο του BL Γ. Ανακαλείται από το Stack (Στοίβα) η τιµή του CX. Το περιεχόµενό της προστίθεται στον AL E. Ξεκινάει η υπορουτίνα µε την CALL Λύση 23η: Α. Ξεκινάει το πρόγραµµα στην CS:IP = 040016:123416 = 040016*1610+123416 = 400016+123416 = 523416 = 2104410 Β. Θα αποθηκευτεί το περιεχόµενο του BL DS:456716 = 060016:456716 = 060016*1610+456716 = 600016+456716 = A56716 = 4234310 Γ. Ανακαλείται από το Stack (Στοίβα) η τιµή του CX SS:SP = 080016:2FED16 = 080016*1610+2FED16 = 800016+2FED16 = AFED16 = 4503710. Το περιεχόµενό της προστίθεται στον AL DS:5000+DI = 060016:5000+987616 = 060016*1610+E87616 = 600016+E87616 = 1487616 = 8408610 E. Ξεκινάει η υπορουτίνα µε την CALL CS:0500 = 040016:050016 = 040016*1610+050016 = 400016+050016 = 450016 = 1766410
Άσκηση 24η: Αναφέρατε τα στάδια εκτέλεσης της εντολής CMP [2345], 6677 µε εντολές µικροπρογράµµατος περιγράφοντας και εξηγώντας αναλυτικά το κάθε στάδιο καθώς και τις τιµές ψηφιακών λέξεων που εµφανίζονται στους διαύλους δεδοµένων και διευθύνσεων σε κάθε στάδιο. Υποθέστε ότι ο IP ήδη δείχνει την διεύθυνση µνήµης που είναι αποθηκευµένη η εντολή (IP=0000). Επίσης υποθέστε ότι το opcode της εντολής είναι 2 byte (81h kαι 06h), ότι στη θέση DS:2345 υπάρχει ο αριθµός AA και στην επόµενη θέση µνήµης ο BB. Υπόδειξη : πρέπει να χρησιµοποιηθεί ο ScratchPad register αλλά και δεύτερος ScratchPad SCR2. Λύση 24η: Φάση Εξωτερική Λειτουργία ΑΒ DB Εσωτερική Μικρο-λειτουργία 1 ιάβασµα opcode 0100:0000 81 MAR IP; IP IP+1; wait; MDR DB; ΙR L MDR 2 ιάβασµα 2 ου opcode 0100:0001 06 MAR IP; IP IP+1; wait; MDR DB; ΙR Η MDR 3 ιάβασµα low byte παραµέτρου διεύθυνσης 0100:0002 45 MAR IP; IP IP+1; wait; MDR DB; ADR L MDR 4 ιάβασµα high byte 0100:0003 23 MAR IP; IP IP+1; wait; MDR DB; ADR H MDR 5 ιάβασµα low byte 0100:0004 77 MAR IP; IP IP+1; wait; MDR DB; παραµέτρου αριθµού SCR L MDR 6 ιάβασµα high byte 0100:0005 66 MAR IP; IP IP+1; wait; MDR DB; 7 ιάβασµα τελικών δεδοµένων 1o byte 8 ιάβασµα τελικών δεδοµένων 2o byte 9 Εκτέλεση εντολής CMP SCR H MDR 0100:2345 (2345)=AA MAR ADR; wait; MDR DB; SCR2 L MDR 0100:2346 (2346)=BB EAR ADR+1; MAR EAR; wait; MDR DB; SCR2 H MDR - - Flags SCR ~ SCR2 12 Επόµενη εντολή 0100:0006 (0006) MAR IP; IP IP+1; wait; MDR DB; ΙR MDR Άσκηση 25η: Χρειάζεται να σχηµατίσουµε µια µνήµη χωρητικότητας 4 Giga διευθύνσεων, όπου κάθε διεύθυνση αντιστοιχεί σε κελί µεγέθους 16 Bit, µε chip µνήµης διάταξης 256Μ Χ 8. Πόσα τέτοια chip θα χρειαστούµε και γιατί. Λύση 25η: Για µια µνήµη χωρητικότητας 4 Giga διευθύνσεων, όπου κάθε διεύθυνση αντιστοιχεί σε κελί µεγέθους 16 Bit, µε chip µνήµης διάταξης 256Μ Χ 8 θα χρειαστούµε: 2 chip για να σχηµατίσουµε µνήµη 256Μ λέξεων των 16 Bit καθώς 256Μ Χ 16 = (256Μ Χ 8) Χ 2 και, προφανώς 16Χ2 chip για να σχηµατίσουµε µνήµη 4 G λέξεων των 16 Bit καθώς 4 G Χ 16 = (256Μ Χ 16) Χ 16 Άρα θα χρειαστούν συνολικά 16Χ2 = 32 τέτοια chip
Άσκηση 26η: Εξηγήστε τι ακριβώς κάνει ο παρακάτω κώδικας assembly 8088 στο σύνολό του, σχολιάζοντας επεξηγηµατικά όλες τις γραµµές του κώδικα, αλλά και και τον πίνακα που αρχίζει στην διεύθυνση [0200] : 0100:0000 MOV BL,00 0100:0002 MOV SI,0000 0100:0005 MOV AL,[0200+SI] 0100:0009 INC SI 0100:000A CMP AL,[0200+SI] 0100:000E JBE 001A 0100:0010 XCHG AL,[0200+SI] 0100:0014 XCHG AL,[01FF+SI] 0100:0018 INC BL 0100:001A CMP SI,9 0100:001D JNE 0005 0100:001F CMP BL,00 0100:0022 JNE 0000 0100:0024 INT 3 Λύση 26η: Ο κώδικας ταξινοµεί τον πίνακα 9 θέσεων του 1ος byte που ξεκινάει στην διεύθυνση µνήµης 0200 µε την µέθοδο BubbleSort 0100:0000 MOV BL,00 Μηδενισµός του µετρητή swap 0100:0002 MOV SI,0000 Μηδενισµός του δείκτη προσπέλασης του πίνακα 0100:0005 MOV AL,[0200+SI] Φόρτωση ενός στοιχείου του πίνακα στον AL 0100:0009 INC SI Αύξηση του δείκτη για προσπέλαση του επόµενου στοιχείου 0100:000A CMP AL,[0200+SI] Σύγκριση µε το επόµενο στοιχείο 0100:000E JBE 001A Αν είναι µικρότερο φύγε 0100:0010 XCHG AL,[0200+SI] Αλλιώς ενάλλαξε AL και 2ο 0100:0014 XCHG AL,[01FF+SI] Και ενάλλαξε AL και 1ο 0100:0018 INC BL Κατέγραψε το Swap στον BL 0100:001A CMP SI,9 Έλεγξε για τέλος του πίνακα 0100:001D JNE 0005 Αν όχι ξανα-πήγαινε στην 0005 0100:001F CMP BL,00 Έλεγξε αν έγιναν swap 0100:0022 JNE 0000 Αν ναι πήγαινε ξανά από την αρχή 0100:0024 INT 3 Αν όχι τέλος του προγράµµατος
Άσκηση 27η: Από τις παρακάτω λέξεις των 8 bit στις οποίες χρησιµοποιείται η µέθοδος της ισοτιµίας για έλεγχο σφάλµατος, δείξτε ποιες έχουν διαβαστεί σωστά και ποιες λάθος, µε το σκεπτικό ότι χρησιµοποιείται άρτια ισοτιµία : Α/Α Λέξη Parity Bit Σωστή ή Λάθος 1 00111011 1 2 10110100 1 3 11111110 0 4 10110010 0 5 10011100 1 Λύση 27η: Α/Α Λέξη Parity Bit Σωστή ή Λάθος 1 00111011 1 Σωστή 2 10110100 1 Λάθος 3 11111110 0 Λάθος 4 10110010 0 Σωστή 5 10011100 1 Λάθος Άσκηση 28η: Σε µία cache µνήµη Άµεσης Χαρτογράφησης µε µέγεθος 512 bytes είναι οργανωµένη σε 16 γραµµές όπου κάθε γραµµή έχει χωρητικότητα 32 bytes. Η µνήµη αυτή χρησιµοποιείται ως ενδιάµεση µνήµη για προσπέλαση αργής RAM συνολικού µεγέθους 2 Kbyte Αν η CPU προσπελάσει διαδοχικά τις µνήµες 72 1090 680 1925 410 900 1420 608 1024 να επισηµάνεται σε ποιες περιπτώσεις συµβαίνει σύγκρουση κρυφής µνήµης (cache collision).
Λύση 28η: Η µνήµη cache θα είναι ως εξής : Εγγραφή Valid Tag Data 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Αντίστοιχες ιευθύνσεις RAM 1504-480 - 511 992-1023 1535 1472-448 - 479 960-991 1503 1440-416 - 447 928-959 1471 1408-384 - 415 896-927 1439 1376-352 - 383 864-895 1407 1344-320 - 351 832-863 1375 1312-288 - 319 800-831 1343 1280-256 - 287 768-799 1311 1248-224 - 255 736-767 1279 1216-192 - 223 704-735 1247 1184-160 - 191 672-703 1215 1152-128 - 159 640-671 1183 1120-96 - 127 608-639 1151 1088-64 - 95 576-607 1119 1056-32 - 63 544-575 1087 1024-0 - 31 512-543 1055 2016-2047 1984-2015 1952-1983 1920-1951 1888-1919 1856-1887 1824-1855 1792-1823 1760-1791 1728-1759 1696-1727 1664-1695 1632-1663 1600-1631 1568-1599 1536-1567 ιεύθυνση RAM Αντίστοιχη Γραµµή cache Cache Collision? 72 2 ΟΧΙ 1090 2 ΝΑΙ 680 5 ΟΧΙ 1925 12 ΟΧΙ 410 12 ΝΑΙ 900 12 ΝΑΙ 1420 12 ΝΑΙ 608 3 ΟΧΙ 1024 0 ΟΧΙ
Άσκηση 29η: ίνεται ο παρακάτω κώδικας ανίχνευσης σφαλµάτων : Αριθµός Κωδικοποίηση 0 111111111111 1 000111111111 2 111000111111 3 000000111111 4 111111000111 5 000111000111 6 111000000111 7 000000000111 8 111111111000 9 000111111000 Α 111000111000 B 000000111000 C 111111000000 D 000111000000 E 111000000000 F 000000000000 Ποια είναι η απόσταση Hamming του κώδικα? Λύση 29η: Η απόσταση Hamming του κώδικα είναι 3 γιατί αν πάρουµε δύο οποιουσδήποτε αποδεκτούς συνδυασµούς η ελάχιστη απόσταση Hamming µεταξύ τους είναι 3. Άσκηση 30η: Αναφέρατε τα στάδια εκτέλεσης της εντολής JMP [6789] µε εντολές µικροπρογράµµατος περιγράφοντας και εξηγώντας αναλυτικά το κάθε στάδιο καθώς και τις τιµές ψηφιακών λέξεων που εµφανίζονται στους διαύλους δεδοµένων και διευθύνσεων σε κάθε στάδιο. Υποθέστε ότι ο IP ήδη δείχνει την διεύθυνση µνήµης που είναι αποθηκευµένη η εντολή (IP=0000). Επίσης υποθέστε ότι το opcode της εντολής είναι 2 byte (FFh kαι 26h). Λύση 30η: Φάση Εξωτερική Λειτουργία ΑΒ DB Εσωτερική Μικρο-λειτουργία 1 ιάβασµα opcode 0100:0000 FF MAR IP; IP IP+1; wait; MDR DB; ΙR L MDR 2 ιάβασµα 2 ου opcode 0100:0001 26 MAR IP; IP IP+1; wait; MDR DB; ΙR Η MDR 3 ιάβασµα low byte παραµέτρου διεύθυνσης 0100:0002 89 MAR IP; IP IP+1; wait; MDR DB; ADR L MDR 4 ιάβασµα high byte 0100:0003 67 MAR IP; IP IP+1; wait; MDR DB; ADR H MDR
5 ιάβασµα τελικής διεύθυνσης 1o byte 6 ιάβασµα τελικής διεύθυνσης 2o byte 7 Εκτέλεση εντολής - τοποθέτηση της τελικής 0100:6789 (6789) MAR ADR; wait; MDR DB; SCR L MDR 0100:678Α (678Α) EAR ADR+1; MAR EAR; wait; MDR DB; SCR H MDR - - IP SCR διεύθυνσης στον IP 8 Επόµενη εντολή 0100:0004 (0004) MAR IP; IP IP+1; wait; MDR DB; ΙR MDR