ΛΥΣΕΙΣ ΘΕΜΑΤΩΝ ΑΡΧΙΤΕΚΤΟΝΙΚΗΣ 1. CS1=0100H, CS2=1100H, DS=2100H, SS=3100H. α) Να σχεδιαστεί ο χάρτης μνήμης με λογικές και φυσικές διευθύνσεις. β) Στη διεύθυνση CS1:0100H υπάρχει η εντολή: 9A IP IP CS CS CALL 11200H. Να συμπληρωθούν τα πεδία ΙΡ και CS της εντολής. γ) Εάν SP=0000H, τι γράφεται στο σωρό με την εκτέλεση της εντολής CALL; α) 00000 H ΑΡΧΗ SEGMENT CS1 01000 H (01000 + 0000) ΤΕΛΟΣSEGMENT CS1 10FFF H (01000+ FFFF) ΑΡΧΗ SEGMENT CS2 11000 H (11000 + 0000) ΤΕΛΟΣSEGMENT CS2 20FFF H (11000+ FFFF) ΑΡΧΗ SEGMENT DS 21000 H (21000 + 0000) ΤΕΛΟΣSEGMENT DS 30FFF H (21000+ FFFF) ΑΡΧΗ SEGMENT SS 31000 H (31000 + 0000) ΤΕΛΟΣSEGMENT SS 40FFF H (31000+ FFFF) FFFFF H β) Η φυσική διεύθυνση 11200 Η ευρίσκεται στο CS2. Επομένως η λογική διεύθυνση είναι: 1100 0 xxx x 0200 H 11200 Επομένως η εντολή είναι: 9A IPL IPH CS2L CS2H CALL 11200H ή 9A 00 02 00 11 CALL 11200H. γ) Επειδή η εντολή CALL καλεί υπορουτίνα σε άλλο τμήμα, διατμηματική κλήση, θα αποθηκεύσει στο σωρό το τμήμα και τον ΙΡ της επόμενης εντολής. Η επόμενη εντολή ευρίσκεται στη θέση CS1:0105H. Άρα: 1
31000 H 3100H:FFFCH 3100H:FFFFH IPL=05H IPH=01H CS1L=00H CS1H=01H 40FFF H 2. Στη διεύθυνση του παραπάνω χάρτη μνήμης CS1:0105Η υπάρχει η εντολή CD 12 ΙΝΤ 12Η. α) Τι πρέπει να υπάρχει στον πίνακα των διανυσμάτων διακοπής, εάν η ΥΕΔ ευρίσκεται στη διεύθυνση 1AF52H. β) Εάν SP=0000H, τι γράφεται στο σωρό με την εκτέλεση της εντολής INT; α) Η φυσική διεύθυνση 1AF52 Η ευρίσκεται στο CS2. Επομένως η λογική διεύθυνση είναι: 1100 0 xxx x 9F52 H 1AF52 Το διάνυσμα διακοπής θα είναι CS2:IP 1100:9F52 και θα ευρίσκεται στη διεύθυνση 4*12Η=00048Η. 00000 H IPL=52H IPH=9FH CS1L=00H CS1H=11H 00048 H 00049 H 0004A H 0004B H β) Η επόμενη εντολή ευρίσκεται σε διεύθυνση offset 0107H. Σε διακοπή αποθηκεύονται και τα flags. 31000 H 3100H:FFFAH 3100H:FFFFH IPL=07H IPH=01H CS1L=00H CS1H=01H FLAGS LOW FLAGS HIGH 40FFF H 2
3. Μία κύρια μνήμη 16 ΜΒ «κασάρεται» σε μία κρυφή μνήμη 32 ΚΒ με τη μέθοδο της άμεσης αντιστοίχισης. Να σχεδιαστεί η κύρια μνήμη μόνο και τα μπλοκ στα οποία διαιρείται για το κασάρισμα (σχεδιαστικά και αριθμητικά). Η κάθε γραμμή της κρυφής μνήμης είναι 8 Bytes. Η κρυφή μνήμη αποτελείται από n γραμμές, όπου κάθε γραμμή έχει χωρητικότητα 8 bytes. Επομένως: 32 ΚΒ=n*8 n=4096 γραμμές. Η κρυφή μνήμη στην άμεση αντιστοίχιση γεμίζει με ένα μπλοκ της κύριας μνήμης, το οποίο φυσικά θα έχει την ίδια χωρητικότητα, δηλαδή 32 ΚΒ. Άρα η κύρια μνήμη διαιρείται σε m μπλοκ των 32 ΚΒ 16 ΜΒ=m*32 KB m=512. Το κάθε μπλοκ των 32 ΚΒ διαιρείται σε q μπλοκ των 8 bytes, επειδή κάθε μπλοκ των 8 bytes γεμίζει μία γραμμή της κρυφής. Επομένως: 32ΚΒ=q*8 q=4096. Άρα η κύρια μνήμη χωρίζεται σε: 512 μπλοκ των 32 ΚΒ και κάθε μπλοκ των 32 ΚΒ χωρίζεται σε: 4096 μπλοκ των 8 bytes 4. Δημιουργείστε τις συνδέσεις ώστε ο επεξεργαστής να έχει 20 γραμμές Address Bus και 16 γραμμές Data Bus. Συμπληρώστε τα σήματα που δεν υπάρχουν. (LE=Latch Enable=Active High). D0-D15 AD0-AD7 Latch LE A0-A7 AD8-AD15 8086 Latch LE A8-A15 ALE A0-A19 A16-A19 5. Σημειώστε τα σήματα για τον παρακάτω κύκλο μηχανής. Συμπληρώστε το σήμα το οποίο διακρίνει αυτόν τον κύκλο μηχανής από έναν αντίστοιχο κύκλο ανάγνωσης για περιφερειακό εισόδου. [1] Clock ALE AD0-AD15 A16-A19 A0-A15 D0-D15 RD WR M/IO 3
6. ΑΧ=4433Η και DX=0100H. Εκτελείται η εντολή OUT DX,AX η οποία αποτελείται μόνο από τον κώδικα εντολής EF. Σε πόσους κύκλους μηχανής και σε πόσες περιόδους ρολογιού θα εκτελεστεί αυτή η εντολή; ΚΥΚΛΟΣ ΕΝΤΟΛΗΣ = FETCH + ΕΓΓΡΑΦΗ ΤΗΣ ΛΕΞΗΣ ΑΧ ΣΤΗΝ ΠΟΡΤΑ ΜΕ ΔΙΕΥΘΥΝΣΗ 0100Η=8Τ Η εγγραφή μίας λέξης (4433Η) στις πόρτες 0100Η και 0101Η (33Η 0100Η και 44Η 0101Η) θα γίνει σε έναν κύκλο μηχανής γιατί η διέυθυνση είναι άρτια. 7. Ποιά είναι η διαφορά ενός καταχωρητή τμήματος του 8086 από τον αντίστοιχο στην προστατευμένη λειτουργία του 80386; Στον 8086, ο καυαχωρητής τμήματος ορίζει την αρχή του τμήματος, ενώ στον 80386 και στην προστατευμένη λειτουργία δείχνει τη θέση του περιγραφέα του τμήματος σε έναν πίνακα που ορίζει ο γενικός πίνακας περιγραφέων (GDTR) ή ο τοπικός πίνακας περιγραφέων (LDTR). Ο περιγραφέας τμήματος αποτελείται από 8 bytes και ορίζει την αρχή (φυσική διεύθυνση μνήμης) και το μήκος του τμήματος. 8. DS=1ΑF0H. Από τη φυσική διεύθυνση 1C36AΗ και μετά ευρίσκονται αποθηκευμένα τα δεδομένα: 11Η, 22Η, 33Η, 44Η, 55Η, 66Η. α) Εάν ο ΒΧ δείχνει το δεδομένο 44Η, ποια είναι η τιμή του; β) Εκτελείται η εντολή MOV[BX+1],AL. Εάν ΑΧ=00AAH, τι θα αλλάξει στον πίνακα δεδομένων; Σε πόσους κύκλους μηχανής και σε πόσες περιόδους ρολογιού θα εγγραφούν τα δεδομένα; Εξηγείστε τους λόγους. α) 1C36A-1AF00=146A H ΒΧ=146D H. β) Θα γραφτεί στη διεύθυνση 1C36E H ή σε offset 146E H, η τιμή ΑΑ Η. Το 55 Η θα αντικατασταθεί από το ΑΑ Η. Αυτό θα γίνει σε έναν κύκλο μηχανής ή 8 Τ επειδή πρόκειται για εγγραφή ενός byte σε μία θέση μνήμης. 9. Εκτελείται η εντολή PUSH AX, όπου ΑΧ=052BΗ και SP=FF2BH. Σε πόσες περιόδους ρολογιού θα αποθηκευτεί ο ΑΧ στο σωρό και γιατί; Εάν μετά εκτελεστεί η εντολή POP AX, σε πόσες περιόδους ρολογιού θα ανακτηθούν τα δεδομένα και γιατί; Η λειτουργία του σωρού είναι (SP-1) AH και (SP-2) AL. Δηλαδή: (FF2A) 05 και (FF29) 2B. Κανονικά θα απαιτούσε 2 κύκλους μηχανής επειδή πρόκειται για 2 λειτουργίες εγγραφής δεδομένων στη μνήμη. Όμως, επειδή η διεύθυνση εγγραφής είναι άρτια, η αποθήκευση θα γίνει σε 1 κύκλο μηχανής (θα αποθηκευτεί λέξη). Η εντολή POP AX λειτουργεί ως εξής: AL (SP) και AH (SP+1). Δηλαδή: AL (FF29) και AH (FF2A). Επειδή πρόκειται για ανάγνωση λέξης από περιττή διεύθυνση, η ανάκτηση θα γίνει σε 2 κύκλους μηχανής ή 8 Τ. 4
1. Να γραφτεί πρόγραμμα το οποίο θα αποθηκεύει στη μεταβλητή CON1 τον αριθμό των λέξεων που περιέχει η συμβολοσειρά STR1 και στη μεταβλητή CON2 τον αύξοντα αριθμό που η λέξη STR2 ευρίσκεται στην STR1. Να χρησιμοποιηθεί η εντολή CMPSW. STR1 DB ABCDEFGHIJKLMN STR2 DB CD CON1 DB 00H CON2 DB 00H STR1 DB 'ABCDEFGHIJKLMN' STR2 DB 'CD' CON1 DB 00H CON2 DB 00H START: MOV AX,SEG STR1 MOV SI,OFFSET STR1 CLD MOV BX,OFFSET CON1 MOV DX,0 MOV CX,STR2-STR1 SHR CX,1 MOV [BX],CL LL1: MOV DI,OFFSET STR2 CMPSW JNZ LL2 INC DX LL2: LOOP LL1 INC BX MOV [BX],DL 2. Δίνεται το ακόλουθο τμήμα δεδομένων: INDEX DB 4 LEN DB 10 VAR1 DB 1234567890 VAR2 DB ABCDEFGHIJ Να γραφτεί πρόγραμμα το οποίο θα μετακινεί τη συμβολοσειρά από το στοιχείο INDEX του VAR1 έως το τέλος του VAR1 στις θέσεις από το στοιχείο INDEX του VAR2 έως το τέλος του VAR2. Στη συγκεκριμένη περίπτωση, το αποτέλεσμα του προγράμματος θα είναι: VAR2 DB ABC4567890. (θέμα ίδιο με Α ΠΕΡΙΟΔΟΥ ΧΕΙΜΕΡΙΝΟΥ 2006-2007) INDEX DB 4 LEN DB 10 VAR1 DB 1234567890 VAR2 DB ABCDEFGHIJ START: 5
NEXT: MOV AX,SEG LEN MOV SI,OFFSET VAR1 MOV DI,OFFSET VAR2 MOV CL,[LEN] ;Συνολικό μήκος (10) MOV BL,[INDEX] ;Δείκτης θέσης (4) MOV BH,00H SUB CL,BL INC CL ;Πραγματικό μήκος μετακίνησης (5) MOV AL,[SI+BX-1] MOV [DI+BX-1],AL INC BL LOOP NEXT ;Loop μετακίνησης 3. Εισάγεται από το πληκτρολόγιο πάντα ένας αριθμός 0 ή 1 (δεν χρειάζεται περιορισμός αποκλεισμού άλλων χαρακτήρων). Να γραφτεί το πρόγραμμα το οποίο θα εκτυπώνει στην οθόνη τον αριθμό επαναλήψεων του 0 ή 1 στη συμβολοσειρά του παρακάτω τμήματος δεδομένων. LEN DB 20 VAR1 DB 0,1,2,1,3,0,3,0,7,1,1,8,9,0,0,1,0,4,5,1 LEN DB 20 VAR1 DB 0,1,2,1,3,0,3,0,7,1,1,8,9,0,0,1,0,4,5,1 START: MOV AX,SEG LEN MOV AH,08H INT 21H SUB AL,30H ;AL=00 ;H 01 MOV BX,OFFSET VAR1 MOV CL,[LEN] MOV CH,0 MOV SI,0 MOV DL,0 L2: CMP AL,[BX+SI] JNZ L1 INC DL L1: INC SI LOOP L2 ADD DL,30H MOV AH,02H INT 21H 6
4. Να γραφτεί πρόγραμμα το οποίο να προσθέτει τους δεκαδικούς αριθμούς 345 και 149 και να αποθηκεύει το δεκαδικό αποτέλεσμα στη μνήμη. Να δημιουργηθεί το τμήμα δεδομένων. BCD DW 0345H,0149H RES DW 0 START: MOV AX,SEG BCD MOV BX,OFFSET BCD MOV AX,[BX] MOV DX,[BX+2] ADD AX,DX DAA ADC AH,0 MOV [BX+4],AX 5. Δώστε το αποτέλεσμα του παρακάτω προγράμματος: VAR DB 55,'3A2', 10H, 5BCDE, 00101011B MOV AX,SEG VAR LEA BX,VAR ;BX=OFFSET VAR MOV DL,[BX] ;DL=37H MOV AX,[BX+2] ;AX=3241H SUB AL,37H ;AL=41-37=0AH XLAT ;BX+AL=ADDRESS OF 00101011B AL=00101011B=2BH MOV [BX+4],AX ;AL=2BH REPLACES 10H & AH=32H REPLACES 5 6. Να γραφτεί πρόγραμμα το οποίο θα κάνει έξοδο στην πόρτα με διεύθυνση PORT, τις λέξεις που ευρίσκονται στη διεύθυνση TABLE και έχουν μήκος που ευρίσκεται στη διεύθυνση LEN. LEN DB 05H PORT DW 0802H TABLE DW 1122H, ABCD,1024H,345EH, EFKL LEN DB 05H PORT DW 0802H TABLE DW 1122H, ABCD,1024H,345EH, EFKL START: MOV AX,SEG LEN MOV CL,[LEN] MOV CH,0 MOV DX,[PORT] MOV BX,OFFSET TABLE MOV SI,0 NEXT: 7
MOV AX,[BX+SI] OUT DX,AX INC SI INC SI LOOP NEXT 8