Download as pdf or txt
Download as pdf or txt
You are on page 1of 173

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ

Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά


Τεχνολογικού Τομέα

Αρχιτεκτονική-Ι

Ιωάννης Έλληνας
Τμήμα Η/ΥΣ

Ενότητα 1: Εισαγωγή στην Αρχιτεκτονική -Ι


Σκοποί ενότητας
• Σκοπός της εισαγωγικής ενότητας είναι η
ανασκόπηση των αριθμητικών συστημάτων
και η εισαγωγή στις βασικές λειτουργίες των
εντολών ενός επεξεργαστή, όπως αριθμητικές
πράξεις, ολισθήσεις, περιστροφές,
μετατροπές αριθμητικών συστημάτων.

Περιεχόμενα ενότητας
• Ορισμοί  Αριθμοί BCD
• Αριθμητικά Συστήματα  Αριθμητικές πράξεις
• Δεκαδικό σύστημα  Λογικές πράξεις
• Δυαδικό σύστημα  Ολίσθηση-Περιστροφή
• Μετατροπή ακέραιου δεκαδικού  Μετατροπές αριθμών BCD
σε δυαδικό  Μετατροπές αριθμητικών
• Μετατροπή κλασματικού συστημάτων (BIN to DEC)
δεκαδικού σε δυαδικό  Μετατροπές αριθμητικών
• Δεκαεξαδικό σύστημα συστημάτων (DEC to BIN)
• Μετατροπή ακέραιου δεκαδικού  Μετατροπές αριθμητικών
σε δεκαεξαδικό συστημάτων (BIN to ASCII)
• Κώδικες  Μετατροπές αριθμητικών
• Κώδικας ASCII συστημάτων (ASCII to BIN)
5
Ορισμοί (1)
•Ένας δυαδικός αριθμός των 4 bits καλείται nibble.

•Ένας δυαδικός αριθμός των 8 bits καλείται byte.

•Ένας δυαδικός αριθμός των 16 bits καλείται word.

•Ένας δυαδικός αριθμός των 32 bits καλείται double word.

•Ένας δυαδικός αριθμός των 64 bits καλείται quad word.

Ορισμοί (2)
• Το πιο αριστερό bit
ενός δυαδικού
αριθμού καλείται
«περισσότερο
σημαντικό» ή MSB
(Most Significant Bit).
• Το πιο δεξιό bit ενός
δυαδικού αριθμού
καλείται «λιγότερο
σημαντικό» ή LSB
(Least Significant Bit).

7
Αριθμητικά Συστήματα
Δεκαδικό – Δυαδικό - Δεκαεξαδικό
BINary (b) HEXadecimal (h) DECimal (d)
0000 0 0
0001 1 1
0010 2 2
0011 3 3
0100 4 4
0101 5 5
0110 6 6
0111 7 7
1000 8 8
1001 9 9
1010 Α 10
1011 Β 11
1100 C 12
1101 D 13
1110 E 14
1111 F 15
8

Δεκαδικό Σύστημα
• Η παράσταση ενός αριθμού D στο δεκαδικό σύστημα δίνεται
από τη σχέση:
D={…d3 d2 d1 d0 .d-1 d-2 d-3…} και η τιμή του D= Σi (di x 10 ͥ).

• Για παράδειγμα το 123.54 μπορεί να γραφτεί σαν:


123.54 = 1 x 10 ² + 2 x 10¹ + 3 x 10° + 5 x 10¯¹ +4 x 10 ¯²

9
Δυαδικό Σύστημα
• To δυαδικό σύστημα μοιάζει με το δεκαδικό με τη διαφορά
ότι αποτελείται από 2 ψηφία και η δυαδική αναπαράσταση
ενός αριθμού πραγματοποιείται με δυνάμεις του δυο ως
εξής:

• Β ={…b3 b2 b1 b0 .b-1 b-2 b-3…} και η τιμή του B= Σi (bi x 2 ͥ).

• Για παράδειγμα το 1011.011 μπορεί να γραφτεί σαν :

• 1011.011 = (1 x 2 ³) + (0 x 2 ²) + (1 x 2¹ ) + (1 x 2°) + (0 x 2¯¹) +(1


x 2 ¯²) + ( 1 x 2 ¯³) = 11.375₁₀
10

Μετατροπή Ακέραιου Δεκαδικού


σε Δυαδικό (1)

11
Μετατροπή Ακέραιου Δεκαδικού
σε Δυαδικό (2)
δυνάμεις του 2  25 24 23 22 21
20

δεκαδικό ισοδύναμο  32 16 8 4 2 1

Αποτέλεσμα  0 1 0 0 0 1
= 17

12

Μετατροπή Κλασματικού
Δεκαδικού σε Δυαδικό
Ο αριθμός που προκύπτει είναι
ο 0.11101 ο οποίος έχει
ισοδύναμο το δεκαδικό
αριθμό:

1*2-1+1*2-2+1*2-3+0*2-4+1*2-
5=0,90625 που είναι μια

προσέγγιση του αρχικού


αριθμού

13
Δεκαεξαδικό Σύστημα
• Οι υπολογιστές βασίζουν τη λειτουργία τους στο δυαδικό
σύστημα, όμως οι δυαδικοί αριθμοί αναπαρίστανται στο
δεκαεξαδικό για να αποφεύγονται πολύ μεγάλοι δυαδικοί. Το
δεκαεξαδικό επιτρέπει την ομαδοποίηση των δυαδικών
ψηφίων ανά τέσσερα.

• Η ={…h3 h2 h1 h0 .h-1 h-2 h-3…} και η τιμή του H= Σi (hi x 16 ͥ).

14

Μετατροπή Ακέραιου Δεκαδικού


σε Δεκαεξαδικό
δυνάμεις του 16  163 162 161 160

δεκαδικό ισοδύναμο  4096 256 16 1

Αποτέλεσμα  0 2 0 13 =
2*256+13*1=525

Ο δεκαεξαδικός αριθμός είναι: 020D h (To «h» πάντα υποδεικνύει τη βάση


αρίθμησης)

15
Κώδικες (1)
• Ο αριθμός που περιέχεται σε ένα byte μπορεί να ερμηνευθεί
με πολλούς τρόπους.

• Για παράδειγμα ο 01001100b μπορεί να είναι ο δεκαδικός 76,


ο δεκαεξαδικός 4Ch ή ο χαρακτήρας “L” στον πίνακα με τους
κωδικούς ASCII.

• Η υπόσταση ενός αριθμού καθορίζεται από το χρήστη, ο


οποίος τους χειρίζεται όπως απαιτεί η εκάστοτε εφαρμογή.

16

Κώδικες (2)
• Δύο από τους πιο συχνά χρησιμοποιούμενους τύπους ή
κώδικες είναι η δεκαδική παράσταση ενός δυαδικού αριθμού
(BCD – Binary Coded Decimal) και ο Αμερικανικός Κώδικας
Αντιστοιχιών (American Standard Code for Information
Interchange) > ASCII.

• Υπάρχουν και άλλοι κώδικες όπως Gray Baudot, EBCDI, κλπ.

17
Κώδικας ASCII (1)
• Κάθε κομμάτι κειμένου που αποθηκεύεται σε έναν
υπολογιστή αναπαριστά τους χαρακτήρες που εμφανίζονται
σε αυτό ως αριθμούς από μια τυποποιημένη λίστα,
ονομαζόμενη ASCII.

• Ο ASCII είναι κώδικας των 7 bits, ο οποίος εκφράζεται σαν


ένα byte όπου το πιο σημαντικό ψηφίο είναι μηδέν ή
χρησιμοποιείται σαν ισοτιμία (parity).

18

Κώδικας ASCII (2)

37h -

37h

0Α 0Β …….. A B …….. Z a b …….. z


0F
41h 42h …….. 5Ah 61h 62h …….. 7Ah
20h
19
Αριθμοί BCD (1)
• Ο κώδικας BCD χρησιμοποιείται
όταν θέλουμε να έχουμε είσοδο,
έξοδο και επομένως εσωτερική
επεξεργασία δεκαδικών αριθμών.
• Ένας δεκαδικός κώδικας:
Δεκαδικοί αριθμοί (0...9)
κωδικοποιούνται
χρησιμοποιώντας διακριτές
δυαδικές λέξεις 4 ων bit.

20

Αριθμοί BCD (2)

• Για την κωδικοποίηση αριθμών με n δεκαδικά ψηφία,


χρειαζόμαστε 4n bits στο BCD
π.χ. (365)₁₀ =(0011.0110.0101)BCD

• Αυτό είναι διαφορετικό από τη μετατροπή σε δυαδικό όπου


(365)₁₀ =(1.0110.1101)2

• Ο κώδικας BCD χρειάζεται περίσσότερα bits. Όμως, παρέχει


μεγαλύτερη ευκολία στην ανάγνωση/ερμηνεία.

21
Αριθμοί BCD (3)
• Packed BCD: Συνεπτυγμένοι
είναι οι αριθμοί BCD οι οποίοι
περιέχουν δυο δυαδικά ψηφία
0 1 1 0 1 0 0 1 69 h – BCD
σε ένα byte. Οι αριθμοί 29h (packed)
(byte), 3629h (word), 17243629h
(double word) είναι BCD σε 0000 0110 0000 1001
0609 h

συνεπτυγμένη μορφή. BCD


(unpacked)
• Unpacked BCD: Μη
συνεπτυγμένοι είναι οι αριθμοί
BCD οι οποίοι περιέχουν ένα
δυαδικό ψηφίο σε ένα byte. Οι
αριθμοί 09h (byte), 0209h
(word), 07040609h (double
word) είναι BCD σε μη
συνεπτυγμένη μορφή.
22

Αριθμητικές Πράξεις (1)


• Οι δυαδικές αριθμητικές πράξεισ εκτελούνται μεταξύ
προσημασμένων ή μη προσημασμένων αριθμών.

• Το πρόσημο ενός προσημασμένου αριθμού βρίσκεται πάντα


στο πιο σημαντικό του bit:
– Ο αριθμός είναι θετικός αν το bit πρόσημου είναι 0, ενώ είναι
αρνητικός αν αυτό είναι 1.

• Τα υπόλοιπα bits δίνουν το μέτρο του αριθμού.

23
Αριθμητικές Πράξεις (2)
Συμπλήρωμα ως Προς 2
• Η παράσταση με
συμπλήρωμα ως προς 2
επιβάλει το χειρισμό του πιο
σημαντικού bit ως
πολλαπλασιαστή τιμής -1 επί
το βάρος που αντιστοιχεί στη
θέση του ψηφίου πρόσημου,
για 8bit αριθμό -2⁷= -128.
• Τα υπόλοιπα bits
προστίθενται με το βάρος
που τους αντιστοιχεί στο
αρνητικό βάρος του πιο
σημαντικού ψηφίου.
• Δεν υπάρχει το πρόβλημα της
διπλής αναπαράστασης του
μηδενός. 24

Αριθμητικές Πράξεις (3)


Αρνητικός Αριθμός

25
Αριθμητικές Πράξεις (4)
Επέκταση Προσήμου

26

Αριθμητικές Πράξεις (5)


Flags ή Σημαίες

27
Αριθμητικές Πράξεις (6)
Πρόσθεση Δυαδικών

282
ή
-230

+ Προσημασμένοι
-128
+
Μη 256 -230
προσημασμένοι 282

28

Αριθμητικές Πράξεις (7)


Αφαίρεση Δυαδικών
• Το OF γίνεται
ένα μόνο εάν
από την
αριθμητική
πράξη δύο
ομόσημων
αριθμών
προκύψει
ετερόσημος
αριθμός.

29
Αριθμητικές Πράξεις (8)
Πράξεις Δεκαεξαδικών

30

Αριθμητικές Πράξεις (9)


Πράξεις Αριθμών BCD
• Όταν 2 κώδικες BCD προστίθενται:
– Εάν το δυαδικό άρθροισμα είναι μικρότερο από 1010₂ (=10₁₀),
το αποτέλεσμα της πρόσθεσης δίνει έγκυρο και ορθό κώδικα
για BCD
– Εάν το δυαδικό άρθροισμα είναι ίσο ή μεγαλύτερο από 1010₂ ,
τότε το αποτέλεσμα της πρόσθεσης δίνει άκυρο ή/και
λανθασμένο κώδικα για BCD. Διορθώνεται με την πρόσθεση
του 0110₂ (=6₁₀) στο αποτέλεσμα της πρόσθεσης, έτσι ώστε να
παραχθεί το σωστό κρατούμενο στο αριστερό ψηφίο.
– Γιατί 6₁₀;

0 1 2 3 4 5 6 7 8 9 A B C D E F

31
Αριθμητικές Πράξεις (10)
Πράξεις Αριθμών pBCD
0100 1000  48 h
+ 1000 1001  89 h Επιθυμητό αποτέλεσμα=01h 37
1100 1 0001  Αριθμός > 9, άρα προσθέτω 6
+ 0110
1100 1 0111 Auxilliary Flag (AF
+ 1
1101 0111  Αριθμός > 9, άρα προσθέτω 6
+ 0110
CF=1 0011 0111  CF=1 και 37h  01h 37h

32

Αριθμητικές Πράξεις (11)


Πράξεις Αριθμών pBCD
• DAA: διορθώνει το αποτέλεσμα μετά από πρόσθεση δυο Packed
BCD τιμών.
– AL= BCD αριθμός (υψηλό – χαμηλό ψηφίο)
– AF= Κρατούμενο από το χαμηλό BCD ψηφίο
– CF = Κρατούμενο από το υψηλό BCD ψηφίo

• Αλγόριθμος:
– Αν AL>9 ή AF=1
AL = AL+6- - AF=1
– Αν AL>9F ή CF=1
AL=AL +60h - - CF=1

33
Αριθμητικές Πράξεις (12)
Πράξεις Αριθμών pBCD

• DAS: διορθώνει αποτέλεσμα μετά από αφαίρεση δυο Packed


BCD τιμών.

• Αλγόριθμος:
– Αν AL>9 ή AF=1
AL = AL-6- - AF=1
– Αν AL>9F ή CF=1
AL=AL -60h - - CF=1

34

Αριθμητικές Πράξεις (13)


Πράξεις Αριθμών pBCD
0000 0100 0000 1000  04h 08h
+ 0000 1000 0000 1001  08h 09h = Επιθυμητό αποτέλεσμα 01h 03h 07
1 0001  Αριθμός > 9, άρα προσθέτω 6
+ 0110
0000 1100 1 0111
+ 1
0000 1101 0000 0111  Αριθμός > 9, άρα προσθέτω 6
+ 0000 0110
CF=1 0000 0011 0000 0111  CF=1 και 03h 07h  01h 03h 07h

35
Αριθμητικές Πράξεις (14)
Πράξεις Αριθμών uBCD
• AAA: Διορθώνει το
αποτέλεσμα μετά από
πρόσθεση δύο uBCD
αριθμών
• Παράδειγμα: 09 08 + 02 09
= 01 02 07
08 + 09 = 01 και AF=1  01
+ 06 = 07
09 + 02 + AF = 0C  0C + 06
= 02 και CF=1  01 02 07

36

Αριθμητικές Πράξεις (15)


Πράξεις Αριθμών uBCD
• AAS: Διορθώνει το
αποτέλεσμα μετά από
αφαίρεση δύο uBCD
αριθμών
• Παράδειγμα: 03 05 -
00 09 = 02 06
03 – 00 = 03 και 05 – 09
= FC  0C – 06 = 06 και
03-01 = 02  02 06

37
Λογικές Πράξεις
• Οι λογικές πράξεις AND, OR, NOT, XOR εκτελούνται bit προς bit μεταξύ
δυο δυαδικών αριθμών ίδιου μήκους (Bitwise).
– H AND χρησιμοποιείται για το μηδενισμό (λογικό 0) ενός ή
περισσότερων bits.
– H OR χρησιμοποιείται για την τοποθέτηση (λογικό 1) ενός ή
περισσότερων bits.
– H NOT χρησιμοποιείται για την αντιστροφή της λογικής κατάστασης
του αριθμού.
– Η XOR χρησιμοποιείται για την αντιστροφή της λογικής κατάστασης
μερικών bits.

38

Ολίσθηση & Περιστροφή


• Η ολίσθηση προς τα αριστερά ενός μη προσημασμένου αριθμού κατά n
θέσεις ισοδυναμεί με πολλαπλασιασμό με 2ᵑ.
• H ολίσθηση προς τα δεξιάενός μη προσημασμένου αριθμού κατά n
θέσεις ισοδυναμεί με διαίρεση δια 2ᵑ.

Αριστερή και Δεξιά


Περιστροφή
39
Μετατροπές αριθμών BCD

pBCD  uBCD uBCD  pBCD

40

Μετατροπές
Αριθμητικών Συστημάτων - BIN  DEC
• Ένας δυαδικός αριθμός μήκους
ενός byte (packed BCD), έχει
εκατοντάδες, δεκάδες και
μονάδες.
• Η μετατροπή γίνεται με τη
μέθοδο των διαδοχικών
διαιρέσεων με το 100d=64h και
10d= 0Ah, προκειμένου να
διαχωριστούν τα ψηφία με το
αντίστοιχο βάρος.

41
Μετατροπές
Αριθμητικών Συστημάτων - DEC  BIN
• Ένας δεκαδικός αριθμός μήκους
ενός byte (packed BCD), έχει
δεκάδες και μονάδες.
• Η μετατροπή γίνεται αν οι δεκάδες
πολλαπλασιαστούν με 10d=0Ah
και στο αποτέλεσμα προστεθούν
μονάδες.

42

Μετατροπές
Αριθμητικών Συστημάτων -BIN ASCII
• Ένας δυαδικός αριθμός
μήκους ενός byte έχει
δύο ψηφία σε hex.
• Αρχικά διαχωρίζονται τα
ψηφία και στη συνέχεια
ελέγχεται αν κάποιο
ψηφίο είναι γράμμα ή
αριθμός ώστε να του
προστεθεί το 30h ή 37 h
αντίστοιχα.

43
Μετατροπές
Αριθμητικών Συστημάτων - ASCII BIN
• Για να μετατρέψουμε
δυο χαρακτήρες ASCII σε
δυαδικό αριθμό ενός
byte, ελέγχουμε αν
καθένας από αυτούς
είναι αριθμός ή όχι, ώστε
να του αφαιρεθεί το 30h
ή 37h αντίστοιχα και
μετά να κάνουμε
σύμπτυξη.

44

Βιβλιογραφία
1. “ΑΡΧΙΤΕΚΤΟΝΙΚΗ ΥΠΟΛΟΓΙΣΤΩΝ-Ο επεξεργαστής
8086”, Ι. Ν. Έλληνας, Π. Δ. Κεντερλής, ISBN: 978-
960-930663-8, Αθήνα 2008.
2. Γ. Δ. Κόγιας, “Αρχιτεκτονική, Οργάνωση και
Προγραμματισμός μικροϋπολογιστών”, Σύγχρονη
Εκδοτική.
3. Κ. Ζ. Πεκμεστζή, “Συστήματα μικροϋπολογιστών”,
Εκδόσεις Συμμετρία.

45
Ενότητα 2: Αριθμητικά Συστήματα

Σκοποί ενότητας
• Στην ενότητα αυτή γίνεται μια εισαγωγή στην
οργάνωση δεδομένων ενός
μικροεπεξεργαστή και στις βασικές έννοιες
των αριθμητικών συστημάτων.

4
Περιεχόμενα ενότητας
 Ορισμοί
 Οργάνωση δεδομένων
 Αριθμητικά συστήματα
 Λογικές πράξεις
 Κώδικας ASCII
 Κώδικας BCD
 Ολίσθηση & Περιστροφή

INTEL 4004
Ο πρώτος μΕ της Intel:

1971
2300 transistors
μέγεθος 12 mm2
ρολόι 108 kΗz, 0.06 MIPS
data bus 4 bits
μνήμη 640 bytes

6
INTEL PENTIUM 4
Πρόσφατος μΕ:
2000
42.000.000 transistors
μέγεθος 224 mm2
ρολόι >1.5 GHz
data bus 64 bits
μνήμη 64 GB

Ορισμοί
• Ένας δυαδικός αριθμός των 4 bits καλείται nibble.

• Ένας δυαδικός αριθμός των 8 bits καλείται byte.

• Ένας δυαδικός αριθμός των 16 bits καλείται word.

• Ένας δυαδικός αριθμός των 32 bits καλείται double word.

• Ένας δυαδικός αριθμός των 64 bits καλείται quad word.

• Το πιο δεξιό bit ενός δυαδικού αριθμού καλείται «λιγότερο σημαντικό» ή


LSB (Least Significant Bit).

• Το πιο αριστερό bit ενός δυαδικού αριθμού καλείται «περισσότερο


σημαντικό» ή MSB (Most Significant Bit).
8
Οργάνωση Δεδομένων (1)

Byte 9

Οργάνωση Δεδομένων (2)

Word
10
Αριθμητικά Συστήματα
Δεκαδικό – Δυαδικό - Δεκαεξαδικό
BINary (b) HEXadecimal (h) DECimal (d)

0000 0 0
0001 1 1
0010 2 2
0011 3 3
0100 4 4
0101 5 5
0110 6 6
0111 7 7
1000 8 8
1001 9 9
1010 Α 10
1011 Β 11
1100 C 12
1101 D 13
1110 E 14
1111 F 15 11

Λογικές Πράξεις
• Οι μΕ μπορούν να κάνουν αριθμητικές ή λογικές πράξεις ΜΟΝΟ με δυαδικούς
αριθμούς.
• 3*163+15*162+2*161+10*160=16170 d  3F2A h  0011 1111 0010 1010 b
• Λογική πράξη AND: 3F2A h AND 00FF h  002A h  0011 1111 0010 1010 b
0000 0000 1111 1111 b
• Λογική πράξη OR: 3F2A h OR 00FF h  3FFF h
• Λογική πράξη XOR: 3F2A h XOR 00FF h  3FD5 h
• Ιδιότητες λογικών πράξεων:
AND  Bit Reset
OR  Bit Set
XOR  Bit Toggle

12
Κώδικας ASCII
• Κώδικας ASCII:

0 1 …….. 9 A B …….. Z a b …….. z


30h 31h …….. 39h 41h 42h …….. 5Ah 61h 62h …….. 7Ah

07h 20h
13

Κώδικας BCD
• Κώδικας BCD:

0 1 1 0 1 0 0 1 69 h – BCD (packed)

0609 h
0 0 0 0 0 1 1 0 0 0 0 0 1 0 0 1
BCD (unpacked)

14
Ολίσθηση & Περιστροφή
• Ολίσθηση & Περιστροφή

Λογική ολίσθηση
Αριστερά Δεξιά

Αριθμητική ολίσθηση δεξιά

Περιστροφή
Αριστερά Δεξιά
15

Ενότητα 3: Μικροϋπολογιστές
Σκοποί ενότητας
• Σκοπός της ενότητας είναι η εισαγωγή στα
μικροϋπολογιστικά συστήματα, τη δομή τους
και τη σύνδεση του μικροεπεξεργαστή με τα
περιφερειακά του.

Περιεχόμενα ενότητας
• Μικροϋπολογιστικό σύστημα
• Αποκωδικοποίηση
• Μνήμες
• Χαρακτηριστικά μνημών
• Πόρτες
• Αρχή λειτουργίας μικροϋπολογιστικού
συστήματος
• Γλώσσα προγραμματισμού Assembly
• Ορολογία εντολών Assembly
5
Μικροϋπολογιστικό σύστημα (1)
• Κύκλοι Μηχανής (ΚΜ) ή κύκλοι διαδρόμου  4Τ για τον 8086

Εγγραφή μνήμης (Write Memory) Εγγραφή πόρτας (Write Otput Port)

Data Bus

Ανάγνωση μνήμης (Read Memory) Ανάγνωση πόρτας (Read Input Port)

Input Output
CPU ROM RAM
Port Port
Ρολόϊ

Control Bus

Address Bus

Παράλληλη σύνδεση - Μία ενέργεια κάθε φορά (Πως γίνεται?)


6

Μικροϋπολογιστικό σύστημα (2)

Απεικόνιση

7
Αποκωδικοποίηση

Η αποκωδικοποίηση της μνήμης

Μνήμες

ROM και RAM

9
Χαρακτηριστικά μνημών

• tACC=Χρόνος προσπέλασης
Μέγιστος χρόνος ανάγνωσης

• tDW= Ελάχιστος χρόνος


που τα δεδομένα πρέπει
να ευρίσκονται στο διάδρομο
για ορθή εγγραφή

• tAW= Ελάχιστος χρόνος


εγγραφής

10

Πόρτες
• Πόρτα εισόδου (Input
Port-I/P)

• Πόρτα εξόδου (Output


Port-O/P)

11
Μικροϋπολογιστικό σύστημα (3)

Απεικόνιση

12

Αρχή λειτουργίας
μικροϋπολογιστικού συστήματος
Data Bus

IP= 0101
0100
0102 h 0100 h B0 B0 h MOV AL,55h
0101 h 55 55 h

Instruction decoder
Address Bus
AL=
ROM

CPU

13
Γλώσσα προγραμματισμού Assembly

Τα διμικά στοιχεία της γλώσσας προγραμματισμού Assembly

14

Ορολογία εντολών Assembly


Τελεστές
Μνημονικό (Operands)

B0 MOV AL, 55 H
Κώδικας μηχανής
55
Machine Code
Object code
Προορισμός Αφετηρία
Destination Source

15
Ενότητα 4: Το Προγραμματιστικό Μοντέλο του 8086

Σκοποί ενότητας
• Στην ενότητα αυτή εξετάζεται το
προγραμματιστικό μοντέλο του
μικροεπεξεργαστή 8086 της Intel, η
εσωτερική του αρχιτεκτονική και οι βασικές
λειτουργίες του επεξεργαστή.

4
Περιεχόμενα ενότητας
• Επεξεργαστής 8086 • Εσωτερική οργάνωση
• Οργάνωση συστήματος • Εσωτερική οργάνωση του
• Τι είναι η διεύθυνση 8086
• Πρόσβαση στη μνήμη • Λειτουργία καταχωρητών
• Οργάνωση μνήμης τμημάτων
• Διαχείριση μνήμης • Μονάδα εκτέλεσης
• Κατάτμηση μνήμης • Καταχωρητής σημαιών
• Διευθυνσιοδότηση • Λειτουργίες CPU
• Τι είναι ο σωρός • Παράδειγμα
• Λογική και Φυσική Διεύθυνση • Ερωτήσεις & Απαντήσεις
• Υπολογισμός Φυσικής
Διεύθυνσης
• Παραδείγματα

Ο Επεξεργαστής 8086

6
8086 Επεξεργαστής των 16 bits/
2 bytes (Ρ1) (1)
Χαρακτηριστικά
• Εμφάνιση το 1978.
• Τροφοδοσία 5V.
• Ρολόϊ έως 4÷10 MHz.
8086
• Data bus 16 bits/2 bytes.
• Address bus 20 bits. Μνήμη μέχρι 1 ΜΒ. Μνήμη άρτιων και
περιττών διευθύνσεων (2 Χ 512 ΚΒ). Χρόνος προσπέλασης
λέξης (2 bytes) σε ένα κύκλο μνήμης (μηχανής) εφ’ όσον η
λέξη είναι σε άρτια διεύθυνση ή σε δυο κύκλους εφ’ όσον
είναι σε περιττή διεύθυνση (ελάττωση της ταχύτητας).
• Κύκλος διαδρόμου (bus cycle) ίσος με 4 περιόδους ρολογιού.
DIP-40 pins • Ταχύτητα διαμεταγωγής (10ΜΗz/4)X2=5MB/s (40 Mbps).

8086 Επεξεργαστής των 16 bits/


2 bytes (Ρ1) (1)
Χαρακτηριστικά
• Μέσος χρόνος εκτέλεσης εντολής 12 Τ.
• Κατάτμηση μνήμης.
• Χρήση 640 ΚΒ για προγράμματα. Δέσμευση των 384 ΚΒ για
το BIOS.
8086
• 6-byte ουρά εντολών (instruction queue), που γεμίζει όταν ο
επεξεργαστής εκτελεί άεργους κύκλους (idle) και υπάρχει
χώρος 2 bytes στην ουρά.
• Τεχνική σωλήνωσης (pipelining-επικάλυψη χρόνου
ανάκλησης και εκτέλεσης των εντολών).
• Binary/Decimal arithmetic με 8-bit ή 16-bit signed/unsigned
αριθμούς (πολλ/σμός και διαίρεση).
DIP-40 pins
• Ολοκληρωμένο 40 pins σε συσκευασία DIP (Dual In Package).

8
8086 Ακροδέκτες (1)
Πολυπλεγμένες γραμμές διεύθυνσης/δεδομένων
GND
(Time multiplexed address/data lines)
AD14
Αποπλέκονται με τη βοήθεια του σήματος ελέγχου ALE AD13

στην πρώτη περίοδο Τ1. AD12


AD11
Κατά την Τ1 φέρουν διεύθυνση. AD10

Κατά τις Τ2, Τ3, Τ4 φέρουν δεδομένα. AD9


AD8
Non Maskable Interrupt (ΙΝΤ 2) : Οδηγεί το πρόγραμμα AD7
8086
στις θέσεις 00008÷0000Β Η, όπου πρέπει να ευρίσκονται AD6
AD5
οι τιμές του CS και του IP για οδήγηση του AD4
προγράμματος στην κατάλληλη ΥΕΔ. AD3

Maskable Interrupt (σημαία ΙΕ=1) : Δίδεται ένα byte n


AD2
AD1
κατά τη διάρκεια του σήματος /INTA και οδηγεί το AD0

πρόγραμμα στις θέσεις 4×n÷4×n+3 Η, όπου πρέπει να NMI

ευρίσκονται οι τιμές του CS και του IP για οδήγηση του INTR


CLK
προγράμματος στην κατάλληλη ΥΕΔ. GND

8086 Ακροδέκτες (2)


• Κατά τη διάρκεια του Τ1 είναι διευθύνσεις, ενώ κατά τη διάρκεια των Τ2,
Τ3, Τ4 είναι δείκτες κατάστασης (status indicators).
• Το BHE (Bus High Enable) γίνεται latch με το σήμα ALE και
χρησιμοποιείται με το Α0 για να καθορίσουν τον τρόπο πρόσβασης στη
μνήμη.
• min mode: ο 8086 χρειάζεται ένα latch και ένα κύκλωμα ρολογιού για να
γίνει cpu με δίαυλο ελέγχου όμοιο με τον 8085.
• max mode: ο 8086 συνεργάζεται με το μαθηματικό συνεπεξεργαστή
8087 και τον περιφερειακό επεξεργαστή Ι/Ο 8089 καθώς επίσης και με το
8288 (bus controller), το οποίο δημιουργεί τα σήματα ελέγχου για μνήμες
και πόρτες.

10
8086 Ακροδέκτες (3)
Vcc
AD15
A16/S3
A17/S4
A18/S5
A19/S6
BHE/S7
MN/MX=1 MN/MX=0
MN/MX
RD HOLD RQ/GT0
HLDA RQ/GT1
8086
WR LOCK
M/IO S2
DT/R S1
DEN S0
ALE QS0
INTA QS1

TEST Εισάγεται περίοδος αναμονής εάν η είσοδος αυτή είναι high κατά την εκτέλεση της εντολής WAIT.
READY Συγχρονίζει τον 8086 με αργά περιφερειακά. Εισάγει περίοδο αναμονής εάν κατά την Τ2 ευρεθεί low.
RESET Επανεκκίνηση και μετάβαση του προγράμματος στη διεύθυνση FFFF0 H.

11

Οργάνωση συστήματος
Διάδρομοι (Buses)

 Διάδρομος διευθύνσεων: Ομάδα γραμμών μέσω των οποίων ο μΕ δίνει


τη διεύθυνση των γραμμών που θα μετακινηθεί στην μνήμη ή στην
πόρτα.

• 8086 : 20 bit – εύρος διαδρόμου διευθύνσεων  220=1048576 bytes ή 1


ΜΒ

 Διάδρομος δεδομένων: Ομάδα γραμμών μέσω των οποίων διακινούνται


τα δεδομένα μεταξύ του μΕ και των περιφερειακών συσκευών

• 8086 : 16 bit – εύρος διαδρόμου δεδομένων

 Διάδρομος ελέγχου: Ομάδα γραμμών μέσω των οποίων εξασφαλίζεται ο


συγχρονισμός των διαφόρων λειτουργιών του μικροϋπολογιστικού
συστήματος

12
Τι είναι η διεύθυνση;
• Η μνήμη ενός μικροϋπολογιστικού
συστήματος χωρίζεται σε μικρά
τμήματα του ενός byte

• Κάθε byte έχει μια ξεχωριστή


ταυτότητα που ονομάζεται
διεύθυνση

• Οι διευθύνσεις είναι αριθμητικές


τιμές μήκους σε bit όσο το address
bus (δίαυλος διευθύνσεων)

13

Πρόσβαση στη μνήμη


• Για να έχουμε πρόσβαση σε ένα ή
περισσότερα bytes, πρέπει να
γνωρίζουμε τις διευθύνσεις τους
στο χάρτη μνήμης

• Στον 80x86 τηρείται η Little Endian


μορφή αποθήκευσης δεδομένων.
Τα χαμηλά bytes αποθηκεύονται
σε χαμηλές (αριθμητικά)
διευθύνσεις.

14
Οργάνωση μνήμης (1)

15

Οργάνωση μνήμης (2)


• 8086: Ο πρώτος επεξεργαστής που δεν θεωρεί τη μνήμη σαν
ένα ενιαίο σύνολο! (γραμμική διευθυνσιοδότηση) γιατί?

• Κατάτμηση μνήμης: Κάθε στιγμή υπάρχουν 4 ενεργά


τμήματα μνήμης, τα τμήματα: κώδικα (CS), σωρού (SS), 2
τμήματα δεδομένων (DS – ES)

• Μέγιστη χωρητικότητα τμήματος: 64 Kbytes

• Καταχωρητές τμημάτων (16-bit): Ένας καταχωρητής ορίζει


την αρχή κάθε τμήματος και δίνει την αρχική φυσική
διεύθυνση κάθε τμήματος (CS, DS, ES, SS)
16
Οργάνωση μνήμης (3)
• Γενικοί καταχωρητές (16-bit): Καταχωρητές γενικής χρήσης
(AX, BX, CX, DX, BP, IP, SP, SI, DI)

• Λογική διεύθυνση (16-bit): Η διεύθυνση μέσα στον


επεξεργαστή. Ορίζεται:

• από έναν καταχωρητή τμήματος και ένα γενικό καταχωρητή

• π.χ. (τμήμα κώδικα : καταχωρητή προγράμματος) ή (CS:IP)

17

Διαχείριση μνήμης στον 8086


Ο 80x86 είναι επεξεργαστής των 16bits με address bus μήκους 20bits
– Διευθυνσιοδοτεί 1Mbyte μνήμης (220bytes)

Πρόβλημα
Ο καταχωρητής διεύθυνσης επόμενης εντολής (IP) έχει μήκος 16bits και
δεν μπορεί να δει ολόκληρη τη μνήμη που προσφέρει το address bus

Λύση
– Η μνήμη διασπάται σε πολλαπλά λογικά τμήματα (segments) των
64kBytes
– Κάθε τμήμα μπορεί να ξεκινά (βάση τμήματος) ανά 16 θέσεις στη
φυσική διεύθυνση της μνήμης (20bit) και να επιτρέπει στον
επεξεργαστή να δει τις επόμενες 64k θέσεις που ακολουθούν

18
Κατάτμηση μνήμης

• Μετατοπίσεις μέσα στο


τμήμα ή offset

• CS=A308 h – DS=2000 h –
ES= C10A h – SS=C90A h

19

Διευθυνσιοδότηση μνήμης –
μετατόπιση
Σωστό  MOV AX,[BX] ή [SI] ή [BP] ή [DI]
Σωστό  MOV AX, [BX+SI] ή [BP+DI] ή [BX+DI] ή [BP+SI]
Σωστό  MOV AX, [BX+SI+128] ή [BP+DI-3] ή [BX+DI+7]
Λάθος  MOV [BX+BP],AX ή MOV AX,[SI+DI] ή MOV AX, [DX] ή [CX]

8 ή 16 bit

BX SI

disp

BP DI

20
Τι είναι ο σωρός
• Περιοχή μνήμης για προσωρινή αποθήκευση δεδομένων. Το
τμήμα σωρού δημιουργείται με τη βοήθεια του SS και έχει
σαν δείκτη τον SP
• Λειτουργεί προς μικρότερες διευθύνσεις γι’ αυτό συνήθως
θέτουμε SP=0000h
CS
• Λειτουργεί με τις εντολές: PUSH, POP, CALL, RET, INT, IRET
• Δείκτης στο σωρό μπορεί να είναι ο καταχωρητής BP
π.χ. SP-1

AX=1234 h, SP=0000 h και εκτελείται η: PUSH AX 34 h


SP-2=FFFE h
SP-1=FFFF h 12 h
SP 0000 h

AH AL Offset FFFF
12 h 34 h h
21

Λογική σε Φυσική διεύθυνση

22
Υπολογισμός φυσικής διεύθυνσης
CS=1234h

IP=5678h

5678h 1234h

05678h 12340h

179B8h

23

Παραδείγματα

MOV AX,[1A5E0h];

24
8086 Εσωτερική οργάνωση (1)
EXECUTION UNIT (EU) BUS INTERFACE UNIT (BIU)
DATA POINTER & SEGMENT REGS &
RELOCATION
REGISTER FILE INDEX REGS INSTRUCTION POINTER
REGISTER FILE
(8 WORDS) (5 WORDS)

/BHE or S7
16 BIT ALU
Διάδρομοι και BUS
4 A16-A19 or S3-S6

εσωτερικοί καταχωρητές FLAGS INTERFASCE 16 AD0-AD15


των 16 bits UNIT 3 /INTA, /RD, /WR

3 DT-/R, /DEN, ALE

Address Bus=20 bits


6-BYTE
Data Bus=16 bits
INSTRUCTION
QUEUE Ουρά εντολών βάθους 6
/TEST bytes
/LOCK
INTR
NMI
2 QS0, QS1
/RG-/GT0,1 2 CONTROL & TIMING
HOLD 3 /S2, /S1, /S0
HLDA

CLK RESET READY MN-/MX GND, GND, V CC

25

8086 Εσωτερική οργάνωση (2)


Προσαρμογή Μνήμης

Σ
C-BUS 6
5
4
6-BYTES
B-BUS BIU 3
2
ΟΥΡΑ ΡΟΗΣ
ES 16
CS 16
1
ΕΝΤΟΛΩΝ
SS 16
DS
ΣΥΣΤΗΜΑ ΕΛΕΓΧΟΥ
16
IP 16

AH AL A-BUS
8 8
BH BL
CH CL ALU
DH DL
SP 16 EU
BP
SI ΟΡΙΣΜΑΤΑ (OPERANDS)
DI ΣΗΜΑΙΕΣ (FLAGS)

26
Εσωτερική οργάνωση του 8086

27

Λειτουργία καταχωρητών τμημάτων

28
Μονάδα εκτέλεσης (EU)

29

Καταχωρητής σημαιών

30
Σημασία του καταχωρητή σημαιών (1)
Zero Flag – Γίνεται 1 όταν το αποτέλεσμα μιας αριθμητικής ή λογικής πράξης
είναι μηδέν.
mov al,01h
dec al ; al=0, ZF=1
mov al,0h ; al=00h
or al,0ffh ; al=FFh, ZF=0
xor al,0ffh ; al=00h, ZF=

31

Σημασία του καταχωρητή σημαιών (2)


Carry Flag – Γίνεται 1 όταν υπάρχει κρατούμενο από πρόσθεση ή δανεικό
από αφαίρεση (υπερχείλιση του καταχωρητή)
mov ax,0ffffh ;al=FFFFh
add ax,1 ;ax=ax+1  ax=0000h, CF=1
clc ;CF=0 – clear carry flag
mov al,2
mov bl,3
sub al,bl ;al=2-3=0000 0010+1111 1101=1111 1111 (-1) 
CF=1, SF=1

32
Σημασία του καταχωρητή σημαιών (3)
Sign Flag – Γίνεται 1 ή 0 όταν το σημαντικότερο bit του αποτελέσματος είναι
1ή0
mov al,7fh
add al,01h ; al=80h (1000 0000), SF=1, OF=1

Overflow Flag – Γίνεται 1 όταν υπάρχει υπερχείλιση των 7 λιγότερο


σημαντικών bits και προκύπτει αριθμός με αντίθετο πρόσημο (π.χ. από την
πρόσθεση 2 θετικών προκύπτει αρνητικός ή από την πρόσθεση 2 αρνητικών
προκύπτει θετικός)

mov al,7fh
mov bl,3
add al,bl ;al=0111 1111+0000 0011=1000 0010  CF=0, SF=1, OF=1
mov al,0ffh
mov bl,80h
add al,bl ;al=1111 1111+1000 0000=0111 1111  CF=1, SF=0, OF=1
33

Σημασία του καταχωρητή σημαιών (4)


Parity Flag – Γίνεται 1 όταν στο αποτέλεσμα υπάρχει άρτιος αριθμός
μονάδων (άρτια ισοτιμία) και 0 όταν υπάρχει περιττός αριθμός μονάδων
(περιττή ισοτιμία)
mov al,7fh
add al,01h ; al=80h (1000 0000), PF=0
Auxiliary Flag – Γίνεται 1 όταν υπάρχει κρατούμενο στα 4 λιγότερο
σημαντικά bits
mov al,7fh
mov bl,01
add al,bl ;al=0111 1111+0000 0001=1000 0000  CF=0,
SF=1, OF=1, AF=1
Direction Flag – Χρησιμοποιείται με τις εντολής διαχείρισης συμβολοσειρών
(movsb/movsw, κλπ)
Γίνεται 0 με την εντολή CLD και σημαίνει αύξουσες διευθύνσεις ή γίνεται 1
με την εντολή STD και σημαίνει φθίνουσες διευθύνσεις.

34
Να θυμόμαστε το εσωτερικό του 8086 !

35

Λειτουργίες CPU
ΣΗΜΕΙΩΣΗ: Κύκλος μηχανής είναι ο χρόνος που παίρνει την CPU για να
εκτελέσει μια από τις προαναφερθείσες λειτουργίες, οι οποίες αφορούν την
επικοινωνία της με ένα εξωτερικό περιφερειακό (μνήμη ή πόρτα). Η
εσωτερική λειτουργία της CPU (π.χ. η τοποθέτηση ενός δεδομένου σε
κάποιον καταχωρητή, η πρόσθεση κλπ) δεν συνιστά κύκλο μηχανής.
Κύκλος εντολής = Χρόνος εκτέλεσης μιας εντολής

Κύκλος μηχανής = Χρόνος εκτέλεσης μιας λειτουργίας Κατάσταση (State) = Μια περίοδος
της CPU ρολογιού

Κύκλος μηχανής  Ανάκληση εντολής (Fetch) 4T


Ανάγνωση δεδομένων από μνήμη (Read Memory) 4T
Εγγραφή δεδομένων σε μνήμη (Write Memory) 4T
Ανάγνωση δεδομένων από πόρτα (Read I/O) 4T
Εγγραφή δεδομένων σε πόρτα (Write I/O) 4T
36
Παράδειγμα

A3 MOV [1000h],AX
00
10

37

Ερωτήσεις και Απαντήσεις

38
Ενότητα 5: H Γλώσσα ASSEMBLY

Σκοποί ενότητας
• Στην ενότητα αυτή εξετάζονται οι τρόποι
διευθυνσιοδότησης, οι ομάδες εντολών του
μικροεπεξεργαστή 8086 και ο τρόπος γραφής
ενός προγράμματος σε γλώσσα Assembly.

4
Περιεχόμενα ενότητας
• Τρόποι διευθυνσιοδότησης • Εντολές λογικών πράξεων
• Άμεσος • Εντολές ολίσθησης
• Απευθείας • Εντολές περιστροφής
• Έμμεσος με καταχωρητή • Εντολές διακλάδωσης
• Με καταχωρητή βάσης και • Εντολές διακλάδωσης με
μετατόπιση προϋποθέσεις
• Με καταχωρητή δείκτη • Εντολές συμβολοσειρών
• Με καταχωρητή βάσης και δείκτη • Εντολές ελέγχου επεξεργαστή
• Τύποι εντολών • Πηγαίο πρόγραμμα
• Εντολές μεταφοράς δεδομένων • Ψευδοεντολές
• Εντολές αριθμητικών πράξεων • Παράδειγμα διαδικασίας
• Διορθωτικές εντολές
αριθμητικών πράξεων

Τρόποι Διευθυνσιοδότησης
Συνοπτικά
• Άμμεσος (Immediate)
– MOV AX, 1234
• Με καταχωρητή (Register)
– MOV AX, DS
• Απευθείας (Direct)
– MOV AX, [1234h]
• Έμμεσος με καταχωρητή (Register Indirect)
– MOV AX, [BX]
• Με καταχωρητή βάσης και μετατόπιση (Base relative)
– MOV AX, [BX+2]
• Με καταχωρητή δείκτη (Direct indexed)
– MOV AX, [SI+2]
• Με καταχωρητή βάσης και δείκτη (Base indexed)
– MOV AX, BX[SI]

6
Άμεσος
Immediate
Τα δεδομένα βρίσκονται
μέσα στην εντολή

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

Τα δεδομένα μπορεί να
έχουν μήκος 8 ή 16bit το
οποίο καθορίζεται στον
κωδικό εντολής και από
το μήκος του
καταχωρητή
προορισμού

Reg[dst]  Imm

Άμεσος
Παραδείγματα

• MOV AX, 1000h ; AH  10h, AL  00h


• MOV AX, 320 ; AH  0000 0001b (01h)
; AL  0100 0000b (40h)
• ADD AL, 10 ; AL  AL + 0Ah
• MOV AL, -40 ; AL  1101 1000b (D8h)

8
Με καταχωρητή Register Direct (1)

• Τα δυο ορίσματα της εντολής είναι καταχωρητές του επεξεργαστή

• Ο καταχωρητής πηγής και ο καταχωρητής προορισμού έχουν πάντα το


ίδιο μήκος σε bits

• Η εντολή αποτελείται μόνο από τον κωδικό εντολής και δεν έχει άλλα
bytes που να την αποτελούν

• Το περιεχόμενο του καταχωρητή πηγής αντιγράφεται στον καταχωρητή


προορισμού (μεταφορά δεδομένων)

Reg[dst]  Reg[src]

Με καταχωρητή Register Direct (2)


Code Segment Data Segment

AH 4Dh AL 23h 0100h 8Eh 1000h

BH BL 0101h D8h 1001h

CH CL 0102h 1002h

DH DL 0103h 1003h

0104h 1004h
SP
0105h 1005h
BP
0106h 1006h
SI
0107h 1007h
DI

Φυσική Διεύθυνση Φυσική Διεύθυνση


IP=0100h Κώδικα Δεδομένων

CS=1234h
Μεταφέρθηκαν
DS 4D23h
Word 4D23h
12440h
SS

ES Byte 4Dh
ΜΟV DL, AH

10
Με καταχωρητή - Παραδείγματα

• MOV DS, AX ; DS  AX
• MOV DL, AL ; DL  AL
• MOV AH, AL ; AH  AL
• MOV BL, AH ; BL  AH
• MOV AX, CX ; AX  CX

11

Απευθείας
Direct
• Η εντολή περιέχει μια 16bit λογική διεύθυνση

• Η λογική διεύθυνση συνδυάζεται με τη βάση του τμήματος που


χρησιμοποιείται για να σχηματίσει τη φυσική διεύθυνση

• Εξ ορισμού, ο καταχωρητής τμήματος είναι ο DS

• Τα 8 ή 16bit δεδομένα που ορίζει ο κωδικός εντολής μεταφέρονται από ή


προς τον καταχωρητή που ορίζει η εντολή

Reg[r] = [ SegReg*16 + Imm + (0/1) ]

12
Απευθείας
Direct
Code Segment Data Segment

AH AL 0100h A1h 1000h

BH BL 0101h 01h 1001h 08h


CH CL 0102h 10h 1002h 23h
DH DL 0103h 1003h

0104h 1004h
SP
0105h 1005h
BP
0106h 1006h
SI
0107h 1007h
DI

Φυσική Διεύθυνση Φυσική Διεύθυνση


IP=0100h Κώδικα Δεδομένων

12440h 57781h
CS=1234h
+ Μεταφέρθηκαν
5678h
DS=5678h

SS Word 2308h
ES
ΜΟV AX, [1001h]
13

Απευθείας
Παραδείγματα
• MOV AX, [1000h] ; AL  DS:[1000h],
; AH  DS:[1001h]

• MOV AX, [Table] ; AL  DS:[Table],


; AH  DS:[Table+1]

• MOV [1000h], AL ; DS:[1000h]  AL

• MOV [1000h], AX ; DS:[1000h]  AL,


; DS:[1001h]  AH

14
Έμμεσος με καταχωρητή
Register Indirect (1)
• Η 16bit λογική διεύθυνση μετατόπισης βρίσκεται αποθηκευμένη σε
κάποιον από τους καταχωρητές SI, DI, BX, BP, ο οποίος εμπεριέχεται στον
κωδικό εντολής

• Η τιμή μετατόπισης προστίθεται κάθε φορά στον εξ ορισμού καταχωρητή


τμήματος για τον χρησιμοποιούμενο καταχωρητή μετατόπισης ή με
καταχωρητή τμήματος προκαθορισμένο από το χρήστη
– DS: BX, SI, DI
– SS: BP
Reg[dst]  [ SegReg * 16 + Reg[offset] + (0/1) ]
[ SegReg * 16 + Reg[offset] + (0/1) ]  Reg[src]

15

Έμμεσος με καταχωρητή
Register Indirect (2)
Code Segment Data Segment

AH 4Dh AL 23h 0100h 89h 1000h

BH 10h BL 04h 0101h 1001h


07h
CH CL 0102h 1002h

DH DL 0103h 1003h

0104h 1004h
SP
0105h 1005h
BP
0106h 1006h
SI
0107h 1007h
DI

Φυσική Διεύθυνση Φυσική Διεύθυνση


IP=0100h Κώδικα Δεδομένων

12440h
57784h
CS=1234h
Μεταφέρθηκαν
DS=5678h
Word 4D23h
SS

ES
ΜΟV [BX], AX
ΜΟV DL, AH 16
Έμμεσος με καταχωρητή
Παραδείγματα
• MOV [BX], AL ; DS:[BX]  AL
• MOV SS:[BX], AL ; SS:[BX]  AL
• MOV [DI], AX ; DS:[DI]  AX
• MOV AH, [SI] ; AH  DS:[SI]
• MOV AH, SS:[SI] ; AH  SS:[SI]
• MOV AX, [BP] ; AX  SS:[BP]
• MOV AX, DS:[BP] ; AX  DS:[BP]
• MOV AX, [BX] ; AX  DS:[BX]

17

Με καταχωρητή βάσης & μετατόπιση


Base Relative
• Επέκταση της έμμεσης με καταχωρητή διευθυνσιοδότησης

• H 16bit λογική διεύθυνση υπολογίζεται από το άθροισμα του


περιεχομένου του καταχωρητή βάσης BX ή BP, και μια ακέραια
σταθερή προσημασμένη τιμή μετατόπισης

• Η μετατόπιση μπορεί να είναι των 8bits (-128 έως + 127) ή των


16bits (-32768 έως + 32767)

• Ο εξ ορισμού καταχωρητής τμήματος είναι ο DS για τον BX και ο


SS για τον BP
Reg[dst]  [ SegReg * 16 + (BX ή BP) + offset + (0/1) ]
[ SegReg * 16 + (BX ή BP) + offset + (0/1) ]  Reg[dst]
18
Με καταχωρητή βάσης & μετατόπιση
Παραδείγματα

MOV [BX + 6], AL ; DS:[BX + 0006h]  AL


MOV [BX + 0Ah], AX ; DS:[BX + 000Ah]  AX
MOV SS:[BX + FFh], CX ; SS:[BX + 00FFh]  CX
MOV AH, [BP + 100] ; AH  SS:[BP + 0064h]
MOV AX, [BP-3] ; AX  SS:[BP + FFFDh]
MOV AX, [BX-100] ; AX  DS:[BX + FF9Ch]

19

Με καταχωρητή δείκτη
Indexed Relative
• Παρόμοια με τη διευθυνσιοδότηση με καταχωρητή βάσης και μετατόπιση

• H 16bit λογική διεύθυνση υπολογίζεται από το άθροισμα του


περιεχομένου ενός εκ των καταχωρητών δείκτη SI ή DI και πιθανώς μια
ακέραια σταθερή προσημασμένη τιμή μετατόπισης (8 ή 16bits)

• Εξ ορισμού χρησιμοποιείται ο καταχωρητής τμήματος DS, ο οποίος μπορεί


να αντικατασταθεί με κάποιον άλλο από το χρήστη

Reg[dst]  [ SegReg * 16 + (SI ή DI) + offset + (0/1) ]


[ SegReg * 16 + (SI ή DI) + offset + (0/1) ]  Reg[dst]

20
Με καταχωρητή δείκτη
Παραδείγματα

MOV AL, [SI + 6] ; AL  DS:[SI + 0006h]


MOV ES:[DI + 100h], AL ; ES:[DI + 0100h]  AL
MOV [SI + 25000], AX ; DS:[SI + 61A8h]  AL,
; DS:[SI + 61A9h]  AH
MOV [SI - 68], AX ; DS:[SI + FFBCh]  AL,
; DS:[SI + FFBDh]  AH
ADD AL, ES:[DI + 10] ; AL  AL + ES:[DI + 000Ah]

21

Με καταχωρητή βάσης & δείκτη


Based Indexed
• Επέκταση της έμμεσης με καταχωρητή διευθυνσιοδότησης
• H 16bit λογική διεύθυνση υπολογίζεται από το άθροισμα του
περιεχομένου ενός εκ των καταχωρητών βάσης BX ή BP, ενός εκ των
καταχωρητών δείκτη SI ή DI και την πιθανή μετατόπιση που δίνεται με την
εντολή
• Τα περιεχόμενα των χρησιμοποιούμενων καταχωρητών θεωρούνται
ακέραιοι προσημασμένοι αριθμοί των 16bits
• Εξ ορισμού χρησιμοποιείται ο καταχωρητής τμήματος DS, ο οποίος μπορεί
να αντικατασταθεί με κάποιον άλλο από το χρήστη
Reg[dst]  [ SegReg * 16 + (BX ή BP) + (SI ή DI) + offset + (0/1) ]
[ SegReg * 16 + (BX ή BP) + (SI ή DI) + offset + (0/1) ]  Reg[dst]

22
Με καταχωρητή βάσης & δείκτη
Παραδείγματα (1)

MOV DX, [BX + DI] ; DH  DS:[BX + DI + 1], DL  DS:[BX + DI]


MOV DX, [BX + SI] ; DH  DS:[BX + SI + 1], DL  DS:[BX + SI]
MOV DX, [BP + DI] ; DH  DS:[BP + DI + 1], DL  DS:[BP + DI]
MOV DX, SS:[BP + DI] ; DH  SS:[BP + DI + 1],
; DL  SS:[BP + DI]
MOV DX, [BP + SI] ; DH  DS:[BP + SI + 1], DL  DS:[BP + SI]
MOV [BP + DI], AX ; DS:[BP + DI + 1]  DH, DS:[BP + DI]  DL
MOV SS:[BP + DI], AX ; SS:[BP + DI + 1]  DH,
; SS:[BP + DI]  DL

23

Με καταχωρητή βάσης & δείκτη


Παραδείγματα (2)

24
Τύποι εντολών
• Μεταφοράς δεδομένων
• Αριθμητικών πράξεων
• Χειρισμού bit
• Διακλάδωσης
• Διακλάδωσης με προϋποθέσεις
• Συμβολοσειρών
• Ελέγχου επεξεργαστή

25

Εντολές Μεταφοράς Δεδομένων (1)


1. mov dst,src ;dst  src (καταχωρητές ή μνήμη – όχι και τα 2
μνήμη)
mov ax,bx mov si,al
mov cl,dl mov cs,ax
mov si,di mov [1000h],[bx]
mov ax,1234h mov ds,1234h
mov ds,ax mov ds,es
mov [bx],ax
mov bl,[si]
mov [1000h],cx

26
Εντολές Μεταφοράς Δεδομένων (2)
2. push src ; (sp-2)  src Low, (sp-1) 
src High
pop dst ; dst Low  (sp), dst High 
(sp+1), sp  sp+2
mov sp,0000h
mov ax,1234h
push ax
pop bx ; bl=34 h, bh=12 h, sp=0000 h
push [bx]; (sp-2)  [bx], (sp-1)  [bx+1
push al

27

Εντολές Μεταφοράς Δεδομένων (3)


3. xchg r1,r2; Ανταλλαγή μεταξύ καταχωρητών, καταχωρητή και μνήμης

xchg al,bl xchg ax,bl


xchg ax,dx xchg [bx],[1000h]
xchg al,[bx]
xchg ax,[1000h]
xchg [bx+si],cx
xchg si,di

28
Εντολές Μεταφοράς Δεδομένων (4)
4. in acc,port ; al ή ax  (διεύθυνση πόρτας) – Άμεσος τρόπος
; al ή ax  (dx) – Έμμεσος τρόπος

out port,acc ; (Διεύθυνση πόρτας)  al ή ax – Άμεσος τρόπος


; (dx)  al ή ax – Έμμεσος τρόπος
in al,80h ; al  (80h)
mov dx,1000h

in ax,dx ; al  (1000h), ah  (1001h)


out 82h,ax ; (82h)  al, (83h)  ah
out dx,al

in bl,80h
out dx,cx

29

Εντολές Μεταφοράς Δεδομένων (5)


5. lea dst,src ; Μεταφέρει τη διεύθυνση μετατόπισης σε καταχωρητή

lea bx, table ; bx=1000h DS


lea si, var ; si=2000h 00h
table=1000h 5Fh

6. xlat ; al  (ds:bx+al) 12h


var=2000h

lea bx, table


mov ax,01h
xlat ; al  (1000h+01h), al=5Fh

30
Εντολές Αριθμητικών Πράξεων (1)
1. add dst, src ; dst  dst+src για 8 ή 16 bit
adc dst,src ; dst  dst+src+CF για 8 ή 16 bit

add ax,bx
add cl,dl
add ax,[bx] ;ax=ax+[bx+1][bx]
add [1000h],3 ;[1001h][1000h]= [1001h][1000h]+3
adc ax,5Fh ;ax=ax+005Fh+CF
2. sub dst, src ; dst  dst-src για 8 ή 16 bit
sbb dst,src ; dst  dst-src-CF για 8 ή 16 bit

31

Εντολές Αριθμητικών Πράξεων (2)


3. inc dst ; dst  dst+1
dec dst ; dst  dst-1
inc ax
dec dl
inc [bx] ; by default [bx]=[bx]+1
dec [1000h]

Σημείωση:
1) Δεν επηρεάζουν το CF.
2) Αν θέλουμε να αυξήσουμε/μειώσουμε λέξη στη μνήμη τότε πρέπει να
χρησιμοποιούμε την εντολή σαν: inc word ptr [bx] ή dec word ptr [1000h].
32
Εντολές Αριθμητικών Πράξεων (3)
4.cmp dst,src ; Μεταβολή μόνο των σημαιών μετά την πράξη dst-src
cmp ax,bx
cmp ax,[bx]
cmp [1000h],dl
cmp ax,1000h
5.mul src ; Πολλαπλασιασμός μη προσημασμένων αριθμών
; al*8 bits=ax (για bytes) ή ax*16 bits=dxax (για words)
mov al,9 ;al=09 h
mov bl,5 ;bl=05h
mul bl ;ax=al*bl=09h*05h=45d=002dh

mul byte ptr [1000h] ;πολλ/σμός του al με το byte στη διεύθυνση ds:1000h

mul 12h
33

Εντολές Αριθμητικών Πράξεων (4)


6.div src ; Διαίρεση μη προσημασμένων αριθμών
; ax/8 bits=al (υπόλοιπο στον ah - για bytes) ή
; ax=dxax/16 bits (υπόλοιπο στον dx - για words)
mov ax,45 ;ax=002dh
mov bl,5 ;bl=05h
div bl ;al=2dh/05h=45d/5d=09d=09h, ah=00
mov ax,46 ;ax=002eh
mov bl,5 ;bl=05h
div bl ;al=2dh/05h=45d/5d=09d=09h, ah=00

div 12h

34
Διορθωτικές Εντολές Αριθμητικών
Πράξεων (1)
1.daa ; Decimal Adjust al after Addition
; Χρησιμοποιείται μετά από πρόσθεση 2 packed BCD για επαναφορά του
αποτελέσματος σε BCD μορφή

mov al,19h
mov bl,15h
add al,bl ; al=2eh (θέλουμε αποτέλεσμα 34h, δηλαδή δεκαδικής εμφάνισης)
daa ; al=2eh
6
24 και AF=1
+1
; al=34h

35

Διορθωτικές Εντολές Αριθμητικών


Πράξεων (2)
2.das ; Decimal Adjust al after Subtraction
; Χρησιμοποιείται μετά από αφαίρεση 2 packed BCD για επαναφορά του
αποτελέσματος σε BCD μορφή
mov al,32h
mov bl,16h
sub al,bl ; al=1ch (θέλουμε αποτέλεσμα 16h, δηλαδή δεκαδικής
εμφάνισης)
das ; al=1ch
-6
16 και AF=0
-0
; al=16h

36
Διορθωτικές Εντολές Αριθμητικών
Πράξεων (3)
3.aaa ; ASCII Adjust al after Addition
; Χρησιμοποιείται μετά από πρόσθεση 2 unpacked BCD για επαναφορά του
αποτελέσματος σε BCD μορφή
mov ax,0109h
mov bx,0105h
add ax,bx ; ax=020eh (θέλουμε αποτέλεσμα 0304h, δηλαδή δεκαδικής
εμφάνισης)
aaa ; al=0eh
6
04 και ah=ah+1  ax=0304h
mov ax,15 ; ax=000fh
aaa ;ax=0105h

37

Διορθωτικές Εντολές Αριθμητικών


Πράξεων (4)
4.aas ; ASCII Adjust al after Subtraction
; Χρησιμοποιείται μετά από αφαίρεση 2 unpacked BCD για επαναφορά του
αποτελέσματος σε BCD μορφή
mov ax,0305h
mov bx,0009h
sub ax,bx; ax=03fch (θέλουμε αποτέλεσμα 0206h, δηλαδή δεκαδικής εμφάνισης)
aas ; al=fch
-6
06 και ah=ah-1  ax=0206h
mov ax,02ffh ; ax=02ffh
aas ;ax=0109h (?)

38
Διορθωτικές Εντολές Αριθμητικών
Πράξεων (5)
5. aam ; ASCII Adjust ax after Multiplication
; Χρησιμοποιείται μετά από πολλ/σμό 2 unpacked BCD για
επαναφορά του αποτελέσματος σε BCD μορφή.  ah=al/10, al=υπόλοιπο

mov ax,0005h
mov bx,0009h
mul bx ; dxax=0000 002d h (θέλουμε αποτέλεσμα 0405h, δηλαδή
δεκαδικής ; εμφάνισης)
aam ; ah=2dh/0ah=45d/10d=04h και al=05h  ax=0405

39

Διορθωτικές Εντολές Αριθμητικών


Πράξεων (6)
6.aad ; ASCII Adjust ax before Division
; Χρησιμοποιείταιπριν τη διαίρεση 2 unpacked BCD για τη μετατροπή του ax
σε δυαδικό αριθμό.  ah=00h, al=ah*10+al

mov ax,0207h
mov bl,09h
aad ; ah=00h, al=02h*10+07=27d=1bh  ax=001bh
div bl ; 001bh/09h  al=03h ,ah=00h  ax=0003h

Σημείωση: Αν γίνει η διαίρεση div bl χωρίς να προηγηθεί η aad, το αποτέλεσμα


είναι 39h.

40
Εντολές Λογικών Πράξεων
• and dst, src ; dst  dst • src
• or dst, src ; dst  dst + src
• xor dst,src ; dst  dst ʘ src
• not dst ; dst  /dst
• test dst, src ; Ενημερώνει τις σημαίες μετά την πράξη dst • src χωρίς να
αλλάξει τους καταχωρητές

mov ax,1234h
mov bx,5678h
and ax,bx
or ax,[bx]
xor [1000h],bx
not [bx] ; Προσοχή στις αμφισημίες (byte ή word?)
test ax,bx ; ax • bx = 1238h (ZF=0, CF=0, …)
not ax ; ax=edcb h
41

Εντολές Ολίσθησης (1)


• shl dst, cl; Λογική ολίσθηση αριστερά cl
φορές
• sal dst, cl; Αριθμητική ολίσθηση αριστερά
cl φορές - Ίδια με την
προηγούμενη
mov ax,1234h
shl ax,8 ;ax=3400h
sal ax,8 ;ax=3400h
shl ax,4 ;ax=2340
Σημείωση:
Κανονικά o αριθμός ολισθήσεων δηλώνεται
από τον cl εκτός αν είναι 1 (επιτρέπεται shl
al,1). Επειδή όμως ο emulator που
χρησιμοποιούμε στο εργαστήριο δέχεται
και τη δήλωση όποιασδήποτε αριθμητικής
τιμής, γι’ αυτόν το λόγο μπορούμε να τον
χρησιμοποιούμε.

42
Εντολές Ολίσθησης (2)
• shr dst, cl ; Λογική
ολίσθηση δεξιά cl φορές
• sar dst, cl ;
Αριθμητική ολίσθηση δεξιά
cl φορές – Χρησιμοποιείται
για ολίσθηση
προσημασμένων αριθμών

mov ax,fffa h ; Ο ax
περιέχει το αριθμό -6
sar ax,1 ; ax=fffd h
 O ax περιέχει τον αριθμό
-3

43

Εντολές Περιστροφής (1)


• rol dst, cl ; Περιστροφή
αριστερά cl φορές
• rcl dst, cl ; Περιστροφή
αριστερά μέσω κρατούμενου cl
φορές

mov ax, 1234h


rol ax,8 ;ax=3412h
rol ax,4 ;ax=2341h

44
Εντολές Περιστροφής (2)
• ror dst, cl ; Περιστροφή δεξιά cl
φορές
• rcr dst, cl ; Περιστροφή δεξιά
μέσω κρατούμενου cl φορές

mov ax, 1234h


ror ax,8 ;ax=3412h
rol ax,4 ;ax=4123h

45

Εντολές Διακλάδωσης (1)


• jmp addr ; short (-128 έως +127)
; near (-32768 έως +32767) ή ενδοτμηματική
; far  jmp cs:addr ή διατμηματική
• loop addr ; cx  cx-1 και πηγαίνει στο addr αν cx ≠ 0
• call addr ; near  Στο σωρό αποθηκεύεται ο ΙΡ της επόμενης εντολής
; far  Στο σωρό αποθηκεύεται ο CS και ο ΙΡ της επόμενης
; Εντολής

46
Εντολές Διακλάδωσης (2)
•int n ; κλήση εξυπηρέτησης διακοπής λογισμικού
; Στο σωρό αποθηκεύονται οι σημαίες (2 bytes), ο CS (2
; bytes) και ο IP (2 bytes) της επόμενης εντολής
• ret ; Επιστροφή από την υπορουτίνα. Ανάκτηση από το σωρό των
; προηγούμενων δεδομένων και επιστροφή στην επόμενη εντολή της
; call addr.
• iret ; Επιστροφή από την υπορουτίνα εξυπηρέτησης της
; διακοπής. Ανάκτηση από το σωρό των προηγούμενων
; δεδομένων και επιστροφή στην επόμενη εντολή της int n.

47

Εντολές Διακλάδωσης
με προϋποθέσεις
• jg ; Άλμα για μεγαλύτερο
• jge ; Άλμα για μεγαλύτερο ή ίσο
• jl ; Άλμα για μικρότερο Προσημασμένοι
• jle ; Άλμα για μικρότερο ή ίσο
• ja ; Άλμα για μεγαλύτερο
• jae ; Άλμα για μεγαλύτερο ή ίσο
• jb ; Άλμα για μικρότερο Μη Προσημασμένοι
• jbe ; Άλμα για μικρότερο ή ίσο

• jz/jnz ; Άλμα για ισότητα/ανισότητα


• je/jne ; Άλμα για ισότητα/ανισότητα
• jc/jnc ; Άλμα εάν CF=1 ή CF=0

48
Εντολές Συμβολοσειρών (1)
• movsb/movsw ; es:di  ds:si (byte/word) – si/di=si/di +/-
1 ή 2 (DF=0/1)
• lodsb/lodsw ; al/ax  ds:si (byte/word) - si=si +/- 1 ή 2
(DF=0/1)
• stosb/stosw ; es:di  al/ax (byte/word) - di=di +/- 1 ή 2
(DF=0/1)
• rep ; Επανέλαβε την εντολή μέχρι cx=0 (π.χ.
rep movsb)

49

Εντολές Συμβολοσειρών (2)


• cmpsb/cmpsw ; Σύγκριση byte/word μεταξύ ds:si και
es:di - si/di=si/di +/- 1 ή 2
• scasb/scasw; al/ax <> es:di (byte/word) - di=di +/- 1 ή 2
(DF=0/1)
• repne/repnz ; Επανάληψη της εντολής μέχρι cx=0 ή τα
υπό σύγκριση στοιχεία
; δεν είναι ίσα
• repe/repz ; Επανάληψη της εντολής μέχρι cx=0 ή τα
υπό σύγκριση στοιχεία
; είναι ίσα

50
Εντολές Ελέγχου Επεξεργαστή
• stc ; CF=1
• clc ; CF=0
• std ; DF=1  ενέργεια εντολής συμβολοσειράς κατά
φθίνουσες διευθύνσεις
• cld ; DF=0  ενέργεια εντολής συμβολοσειράς κατά
αύξουσες διευθύνσεις
• sti ; IF=1  ενεργοποίηση του μηχανισμού διακοπών
• cli ; IF=0  απενεργοποίηση του μηχανισμού διακοπών

51

Πηγαίο πρόγραμμα

Εναλλακτικό παράδειγμα πηγαίου αρχείου

52
Ψευδοεντολές (1)
• db – define byte  Ορισμός μεταβλητής μεγέθους 1 byte
db 13h, 13, 00010011b, ’13’  περνάνε στη μνήμη 
13h,0dh,13h,31h,33h
• dw – define word  Ορισμός μεταβλητής μεγέθους 2 bytes
dw 1234h,1234,’1234’  περνάνε στη μνήμη  34h,12h,
d2h,04h,31h,32h,33h,34h
• equ – Ορισμός σταθεράς
factor equ 16 ; factor=10h

53

Ψευδοεντολές (2)
• end – Τέλος προγράμματος
• endp – Τέλος διαδικασίας
• offset – Υπολογίζει τη σχετική διεύθυνση (μετατόπιση) από
τη φυσική διεύθυνση
• proc – Έναρξη υπορουτίνας ή διαδικασίας
• ptr – Δείκτης μνήμης που μαζί με το byte/word ορίζει το
μέγεθος του δεδομένου

54
Παράδειγμα διαδικασίας

Πρόκειται για ένα παράδειγμα διαδικασίας.

55

Ενότητα 6: Παραδείγματα Προγραμματισμού


Σκοποί ενότητας
• Η ενότητα αυτή έχει σαν σκοπό την εξάσκηση
στην γλώσσα Assembly με την ανάπτυξη
χαρακτηριστικών παραδειγμάτων εφαρμογής
των ομάδων εντολών που έχουν περιγραφεί
στην προηγούμενη ενότητα.

Περιεχόμενα ενότητας
• Παραδείγματα μεταφοράς δεδομένων
• Παραδείγματα αριθμητικών πράξεων
• Παραδείγματα λογικών πράξεων
• Παραδείγματα εντολών διακλάδωσης
• Παραδείγματα συμβολοσειρών

5
Παράδειγμα μεταφοράς δεδομένων (1)

Παράδειγμα μεταφοράς δεδομένων (2)

7
Παράδειγμα αριθμητικών πράξεων (1)

Παραδείγματα αριθμητικών εντολών Α’ μέρος


8

Παράδειγμα αριθμητικών πράξεων (2)

Παραδείγματα αριθμητικών εντολών Β’ μέρος


9
Παράδειγμα αριθμητικών πράξεων (3)

Παραδείγματα αριθμητικών εντολών Γ’ μέρος


10

Παράδειγμα λογικών Πράξεων

11
Παράδειγμα εντολών διακλάδωσης (1)

12

Παράδειγμα εντολών διακλάδωσης (2)

13
Παράδειγμα Συμβολοσειρών

14

Ενότητα 7: Σύνθετα Παραδείγματα


Προγραμματισμού
Σκοποί ενότητας
• Στην ενότητα αυτή αναπτύσσονται πιο
σύνθετα παραδείγματα προγραμματισμού με
σκοπό την εξοικείωση με τη χρήση των
ομάδων εντολών του επεξεργαστή.

Περιεχόμενα ενότητας
• Πίνακες δεδομένων
• Μετατροπές αριθμητικών συστημάτων
• Μετατροπή BCD σε δυαδικό
• Μετατροπή κώδικα Gray σε δυαδικό
• Είσοδος-Έξοδος δεδομένων σε πόρτα
• Πρόσθεση δυαδικών ή δεκαδικών αριθμών
• Πρόσθεση μη συνεπτυγμένων δεκαδικών αριθμών
• Παραδείγματα χρήσης συμβολοσειρών
5
Πίνακες δεδομένων

Μονοδιάστατος Πίνακας

Δισδιάστατος Πίνακας

Στατικός πίνακας δεδομένων

Παράδειγμα

7
Πίνακας εγγραφής δεδομένων (1)

Παράδειγμα

Πίνακας εγγραφής δεδομένων (2)

Παράδειγμα

9
Πίνακας εγγραφής δεδομένων (3)

Παράδειγμα με Καταχωρητή Βάσης και Δείκτη

10

Μετατροπές αριθμητικών συστημάτων (1)

Μετατροπή μορφής δεκαδικών αριθμών.

11
Μετατροπές αριθμητικών συστημάτων (2)

Μετατροπή unpacked BCD σε packed BCD

12

Μετατροπές αριθμητικών συστημάτων (3)

• BIN  pBCD

13
Μετατροπές αριθμητικών συστημάτων (4)

• pBIN  BIN

14

Χρήση διαδικασίας για pBCD  BIN (1)

Παράδειγμα
15
Χρήση διαδικασίας για pBCD  BIN (2)

Παράδειγμα

16

Μετατροπή κώδικα Gray σε δυαδικό

Παράδειγμα

17
Είσοδος ή Έξοδος δεδομένων
σε πόρτα (1)

Παράδειγμα/ Μέρος Α

18

Είσοδος ή Έξοδος δεδομένων


σε πόρτα (2)

Παράδειγμα/ Μέρος Β

19
Είσοδος ή Έξοδος δεδομένων
σε πόρτα (3)

Παράδειγμα/Μέρος Γ

20

Πρόσθεση δυαδικών ή δεκαδικών


αριθμών (1)

Παράδειγμα/Μέρος Α

21
Πρόσθεση δυαδικών ή δεκαδικών
αριθμών (2)

Παράδειγμα/ Μέρος Β

22

Πρόσθεση μη συνεπτυγμένων
δεκαδικών αριθμών (1)

Παράδειγμα/ Μέρος Α

23
Πρόσθεση μη συνεπτυγμένων
δεκαδικών αριθμών (2)

Παράδειγμα/ Μέρος Β

24

Παράδειγμα χρήσης συμβολοσειρών (1)

Παράδειγμα/ Μέρος Α

25
Παράδειγμα χρήσης συμβολοσειρών (2)

Παράδειγμα/ Μέρος Β

26

Μετακίνηση συμβολοσειράς

Παράδειγμα

27
Σύγκριση συμβολοσειρών (1)

Παράδειγμα/ Μέρος Α

28

Σύγκριση συμβολοσειρών (2)

Παράδειγμα/ Μέρος Β

29
Ανίχνευση χαρακτήρα
σε συμβολοσειρά (1)

Παράδειγμα/ Μέρος Α

30

Ανίχνευση χαρακτήρα
σε συμβολοσειρά (2)

Παράδειγμα/ Μέρος Β

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

Οργάνωση Δεδομένων (1/2)
 Bits: Η μικρότερη αριθμητική μονάδα ενός 
υπολογιστικού συστήματος, η οποία δείχνει δύο 
καταστάσεις, 0 ή 1 (αληθές η ψευδές).
 Nibbles: Μονάδα 4 bit που παριστά 1 δεκαεξαδικό 
ψηφίο ή 1 δεκαδικό ψηφίο σε BCD.
 Bytes: Ομάδα από 8 bit, είναι η μικρότερη μονάδα 
δεδομένων που μπορεί να διακινηθεί σε ένα 
υπολογιστικό σύστημα.
Οργάνωση Δεδομένων (2/2)
 Words: Ομάδα από 16 bits (2 bytes ή 4 
nibbles) που παριστά ένα θετικό αριθμό από 0 
ως 65535 ή ένα προσημασμένο από ‐32768 
ως 32767.
 Double Words: διπλή λέξη (2 λέξεις ή 4 bytes).
 Quad Words: τετραπλή λέξη (2 διπλές λέξεις, 
ή τέσσερις λέξεις ή 8 bytes ή 16 nibbles ή 64 
bits).

Λειτουργίες σε bytes, words, dwords 
και qwords
Δεκαδικό σύστημα
 Η παράσταση ενός αριθμού D στο δεκαδικό 
σύστημα δίνεται από τη σχέση: 
D={… d3 d2 d1 d0 .d‐1 d‐2 d‐3 …}, και η τιμή του
D=i (di  10i ).
 Για παράδειγμα το 123.54 μπορεί να γραφτεί 
σαν: 
123.54 = 1102 +2101 +3100 +510‐1 +410‐2

Δυαδικό σύστημα
 Το δυαδικό σύστημα μοιάζει με το δεκαδικό με τη 
διαφορά ότι αποτελείται από 2 ψηφία και η δυαδική 
αναπαράσταση ενός αριθμού πραγματοποιείται με 
δυνάμεις του δυο ως εξής:
 B={… b3 b2 b1 b0 .b‐1 b‐2 b‐3 …} και η τιμή του 
B=i (bi  2i )
 Για παράδειγμα το 1011.011 μπορεί να γραφτεί σαν: 
1011.011 = (1  23)+ (0  22)+(1  21)+(1  20)+
(0  2‐1)+(1  2‐2) +(1  2‐3)= 11.37510
Δεκαεξαδικό σύστημα
 Οι υπολογιστές βασίζουν τη λειτουργία τους 
στο δυαδικό σύστημα, όμως οι δυαδικοί 
αριθμοί αναπαρίστανται στο δεκαεξαδικό για 
να αποφεύγονται πολύ μεγάλοι δυαδικοί. Το 
δεκαεξαδικό επιτρέπει την ομαδοποίηση των 
δυαδικών ψηφίων ανά τέσσερα.   
 Η={… h3 h2 h1 h0 .h‐1 h‐2 h‐3 …} και η τιμή του 
H=i (hi  16i ).

Πίνακας ισοδυναμίας ψηφίων
Σημαντική Σημείωση
 Στη διάρκεια του μαθήματος δεν θα γίνει ξανά 
αναφορά σε πραγματικούς αριθμούς, όπου 
εμφανίζεται το σύμβολο «.», αυτό θα 
χρησιμοποιείται απλά για τον οπτικό 
διαχωρισμό των ψηφίων του αριθμητικού 
συστήματος, με σκοπό τον καλύτερο χειρισμό 
και ευκολότερη ανάγνωση από εσάς.

Κώδικες (1/2)
 O αριθμός που περιέχεται σε ένα byte μπορεί 
να ερμηνευθεί με πολλούς τρόπους.
 Για παράδειγμα το 01001100b μπορεί να είναι 
ο δεκαδικός 76, ο δεκαεξαδικός 4Ch ή ο 
χαρακτήρας “L” στον πίνακα με τους κωδικούς
ASCII.
 H υπόσταση ενός αριθμού καθορίζεται από το 
χρήστη, ο οποίος τους χειρίζεται όπως απαιτεί 
η εκάστοτε εφαρμογή.
Κώδικες (2/2)
 Δύο από τους πιο συχνά χρησιμοποιούμενους 
τύπους ή κώδικες, είναι η δεκαδική 
παράσταση ενός δυαδικού αριθμού (BCD –
Binary Coded Decimal) και ο Αμερικάνικος 
Κώδικας Αντιστοιχιών (American Standard 
Code for Information Interchange).
 Υπάρχουν και άλλοι κώδικες όπως Gray, 
Baudot, EBCDIC κλπ.  

ASCII Character Set
 Κάθε κομμάτι κειμένου που αποθηκεύεται σε
έναν υπολογιστή αναπαριστά τους
χαρακτήρες που εμφανίζονται σε αυτό ως
αριθμούς από μια τυποποιημένη λίστα, 
ονομαζόμενη ASCII.
 Ο ASCII είναι κώδικας των 7 bits, o οποίος 
εκφράζεται σαν ένα byte όπου το πιο 
σημαντικό ψηφίο είναι μηδέν ή 
χρησιμοποιείται σαν ισοτιμία (parity).
ASCII Character Table

Δεκαδικοί με Δυαδική Κωδικοποίηση
(Binary Coded Decimals ‐ BCD)
 Ο κώδικας BCD 
χρησιμοποιείται όταν 
θέλουμε να έχουμε είσοδο, 
έξοδο και επομένως 
εσωτερική επεξεργασία 
δεκαδικών αριθμών.
 Ένας δεκαδικός κώδικας: 
Δεκαδικοί αριθμοί (0..9) 
κωδικοποιούνται 
χρησιμοποιώντας  διακριτές 
δυαδικές λέξεις 4ων bit.
Δεκαδικοί με Δυαδική Κωδικοποίηση

 Για την κωδικοποίηση αριθμών με n δεκαδικά 
ψηφία, χρειαζόμαστε 4n bits στο BCD
π.χ. (365)10 = (0011.0110.0101)BCD

 Αυτό είναι διαφορετικό από την μετατροπή σε 
δυαδικό όπου (365)10 = (1.0110.1101)2

 Ο κώδικας BCD χρειάζεται περισσότερα bits. 
Όμως, παρέχει μεγαλύτερη ευκολία στην 
ανάγνωση/ερμηνεία.

Packed και Unpacked BCD
 Packed BCD: Συνεπτυγμένοι είναι οι αριθμοί BCD 
οι οποίοι περιέχουν δύο δυαδικά ψηφία σε ένα 
byte. Οι αριθμοί 29h (byte), 3629h (word), 
17243629h (double word) είναι BCD σε 
συνεπτυγμένη μορφή.
 Unpacked BCD:  Μη συνεπτυγμένοι είναι οι 
αριθμοί BCD οι οποίοι περιέχουν ένα δυαδικό 
ψηφίο σε ένα byte. Οι αριθμοί 09h (byte), 0209h 
(word), 07040609h (double word) είναι BCD σε μη 
συνεπτυγμένη μορφή.
Πρόσθεση με BCD (1/2)
 Όταν 2 κώδικες BCD προστίθενται:
 Εάν το δυαδικό άθροισμα είναι μικρότερο από 10102
(=1010), το αποτέλεσμα της πρόσθεσης δίνει έγκυρο και 
ορθό κώδικα για BCD 
 Εάν το δυαδικό άθροισμα είναι ίσο ή μεγαλύτερο από 
10102, τότε το αποτέλεσμα της πρόσθεσης δίνει άκυρο 
ή/και λανθασμένο κώδικα για BCD. Διορθώνεται με την 
πρόσθεση του 01102 (=610) στο αποτέλεσμα της 
πρόσθεσης, έτσι ώστε να παραχθεί το σωστό κρατούμενο
στο αριστερό ψηφίο.
Γιατί 610;

Πρόσθεση με BCD (2/2)
 Παράδειγμα: Πρόσθεση 448 & 489 σε BCD.

0100   0100   1000  (448 σε BCD)


0100   1000   1001 (489 σε BCD)
10001   ( > 9, πρόσθεσε 6)
10111 (κρατούμενο 1 στο μεσαίο ψηφίο)
1101  ( > 9, πρόσθεσε 6)
1001 10011 (κρατούμενο 1 στο αριστερότερο ψηφίο)
1001     0011 0111 (κώδικας BCD για  93710)
Διόρθωση Decimal Adjust (ADD)
 DAA: Διορθώνει το αποτέλεσμα μετά από 
πρόσθεση δυο Packed BCD τιμών
 AL = BCD αριθμός (υψηλό‐χαμηλό ψηφίο)
 AF = Κρατούμενο από το χαμηλό BCD ψηφίο
 CF = Κρατούμενο από το υψηλό BCD ψηφίο
 Αλγόριθμος: 
 Αν AL>9 ή AF=1
AL=AL+6 ‐‐ AF=1
 Αν AL>9F ή CF=1
AL=AL+60h ‐‐ CF=1

Διόρθωση Decimal Adjust (SUB)
 DAS: Διορθώνει το αποτέλεσμα μετά από 
αφαίρεση δυο Packed BCD τιμών

 Αλγόριθμος: 
 Αν AL>9 ή AF=1
AL=AL‐6 ‐‐ AF=1
 Αν AL>9F ή CF=1
AL=AL‐60h ‐‐ CF=1
Λογικές Πράξεις (1/2)
 Οι λογικές πράξεις AND, OR, NOT, XOR 
εκτελούνται bit προς bit μεταξύ δυο δυαδικών 
αριθμών ίδιου μήκους (Bitwise).
 Η AND χρησιμοποιείται για το μηδενισμό (λογικό 0) 
ενός η περισσότερων bits.
 Η OR χρησιμοποιείται για την τοποθέτηση (λογικό 1) 
ενός ή περισσότερων bits.
 Η NOT χρησιμοποιείται για την αντιστροφή της 
λογικής κατάστασης του αριθμού.
 Η XOR χρησιμοποιείται για την αντιστροφή της 
λογικής κατάστασης μερικών bits.

Λογικές Πράξεις (2/2)
Αριθμητικές Πράξεις
 Οι δυαδικές αριθμητικές πράξεις εκτελούνται 
μεταξύ προσημασμένων ή μη 
προσημασμένων αριθμών.
 Το πρόσημο ενός προσημασμένου αριθμού 
βρίσκεται πάντα στο πιο σημαντικό του bit:
 ο αριθμός είναι θετικός αν το bit πρόσημου είναι 
0, ενώ είναι αρνητικός αν αυτό είναι 1.
 Τα υπόλοιπα bits δίνουν το μέτρο του 
αριθμού.

Συμπλήρωμα ως προς 1
 Στην παράσταση με συμπλήρωμα ως προς 1, το 
μέτρο του αριθμού αποθηκεύεται αφού έχει 
εφαρμοστεί η δυαδική αντιστροφή (ΝΟΤ) σε 
όλα τα bits αυτού. 
 Βασικό μειονέκτημα και παράδοξο αποτελεί η 
ύπαρξη διπλής απεικόνισης για το μηδέν 
(θετικό και αρνητικό μηδέν, 0000.0000b και 
1111.1111b αντίστοιχα.
Συμπλήρωμα ως προς 2
 Η παράσταση με συμπλήρωμα ως προς 2 
επιβάλει το χειρισμό του πιο σημαντικού bit ως 
πολλαπλασιαστή τιμής ‐1 επί το βάρος που 
αντιστοιχεί στη θέση του ψηφίου πρόσημου, 
για 8bit αριθμό ‐27 = ‐128.
 Τα υπόλοιπα bits προστίθενται με το βάρος 
που τους αντιστοιχεί στο αρνητικό βάρος του 
πιο σημαντικού ψηφίου.
 Δεν υπάρχει το πρόβλημα της διπλής 
αναπαράστασης του μηδενός.

Μετατροπή BCD: (a) packed σε 
unpacked και (b) το αντίθετο
Ολίσθηση και Περιστροφή
 Η ολίσθηση προς τα αριστερά ενός μη 
προσημασμένου αριθμού κατά n θέσεις 
ισοδυναμεί με πολλαπλασιασμό με 2n.
 Η ολίσθηση προς τα δεξιά ενός μη 
προσημασμένου αριθμού κατά n θέσεις 
ισοδυναμεί με διαίρεση δια 2n.
Αριστερή Λογική
Ολίσθηση κατα 1

∆εξιά Λογική
Ολίσθηση κατα 1

Δυαδικό σε 
Δεκαδικό
Ένας δυαδικός αριθμός 
μήκους ενός  byte έχει 
εκατοντάδες, δεκάδες 
και μονάδες. 
Η μετατροπή γίνεται με 
τη μέθοδο των 
διαδοχικών διαιρέσεων, 
με το 100d=64h και
10d=0Ah, προκειμένου
να διαχωριστούν τα 
ψηφία με το αντίστοιχο 
βάρος.
Δεκαδικό σε 
Δεκαεξαδικό
Ένας δεκαδικός 
αριθμός μήκους ενός 
byte (packed BCD), 
έχει δεκάδες και 
μονάδες. 
Η μετατροπή γίνεται 
αν οι δεκάδες 
πολλαπλασιαστούν με
10d=0Ah και στο 
αποτέλεσμα 
προστεθούν οι 
μονάδες.

Δυαδικό σε
ASCII
Ένας δυαδικός 
αριθμός μήκους ενός  
byte έχει δύο ψηφία 
σε hex.
Αρχικά διαχωρίζονται 
τα  ψηφία και στη 
συνέχεια ελέγχεται αν 
κάποιο ψηφίο είναι 
γράμμα ή αριθμός 
ώστε να του 
προστεθεί το 30h ή 
37h αντίστοιχα 
ASCII σε 
Δυαδικό
Για να μετατρέψουμε 
δύο χαρακτήρες ASCII 
σε δυαδικό αριθμό 
ενός byte, ελέγχουμε 
αν καθένας από 
αυτούς είναι αριθμός 
ή όχι, ώστε να του 
αφαιρεθεί το 30h ή 
37h αντίστοιχα και 
μετά κάνουμε 
σύμπτυξη. 

Σημειώσεις για τον 80x86


Τι είναι η διεύθυνση;
16bits 8bits  Η μνήμη ενός
0000h 20h μικροϋπολογιστικού συστήματος
χωρίζεται σε μικρά τμήματα του
0001h 32h
ενός byte
0002h 30h

 Κάθε byte έχει μια ξεχωριστή


216=65,536 bytes ταυτότητα που ονομάζεται
διεύθυνση
FFFEh 30h

FFFFh 36h
 Οι διευθύνσεις είναι αριθμητικές
τιμές μήκους σε bit όσο το
Χάρτης μνήμης ενός τυπικού 8bit address bus (δίαυλος
μικροϋπολογιστικού συστήματος με διευθύνσεων)
16bit address bus

Πρόσβαση στη μνήμη


 Για να έχουμε πρόσβαση σε ένα ή
0018h 32h
περισσότερα bytes, πρέπει να
0019h 30h γνωρίζουμε τις διευθύνσεις τους
στο χάρτη μνήμης
001Ah 30h

001Bh 36h  Στον 80x86 τηρείται η Little


Endian μορφή αποθήκευσης
δεδομένων. Τα χαμηλά bytes
Αποθήκευση κειμένου
«2006» στη μνήμη
αποθηκεύονται σε χαμηλές
(αριθμητικά) διευθύνσεις.

001Ch 06h

001Dh 20h

Αποθήκευση αριθμού
2006h στη μνήμη
Διαχείριση μνήμης στον 80x86
 Ο 80x86 είναι επεξεργαστής των 16bits με address bus
μήκους 20bits
 Διευθυνσιοδοτεί 1Mbyte μνήμης (220bytes)

 Πρόβλημα:
 Ο καταχωρητής διεύθυνσης επόμενης εντολής (IP) έχει μήκος 16bits
και δεν μπορεί να δει ολόκληρη τη μνήμη που προσφέρει το address
bus
 Λύση:
 Η μνήμη διασπάται σε πολλαπλά λογικά τμήματα (segments) των
64kBytes
 Κάθε τμήμα μπορεί να ξεκινά (βάση τμήματος) ανά 16 θέσεις στη
φυσική διεύθυνση της μνήμης (20bit) και να επιτρέπει στον
επεξεργαστή να δει τις επόμενες 64k θέσεις που ακολουθούν

Διαχείριση μνήμης στον 80x86


 Ο προγραμματιστής χρειάζεται να ξέρει μόνο την 16bit
λογική διεύθυνση που δείχνει μέσα στο τμήμα, χωρίς να
χρειάζεται συνήθως να γνωρίζει την 20bit φυσική διεύθυνση

 Το λειτουργικό σύστημα βρίσκει ελεύθερο χώρο στη μνήμη


και εκεί τοποθετεί τα τμήματα ενός προγράμματος όταν το
φορτώνει προς εκτέλεση, κατόπιν ορίζει τους καταχωρητές
τμημάτων, IP και SP
Υπολογισμός φυσικής διεύθυνσης
16bit 16bit

CS
General
Purpose DS
IP=5678h
5678h Register CS=1234h
1234h
SS
File
ES

20bit 0 0 20bit

05678h + 12340h
179B8h

20bit

Φυσική Διεύθυνση

Τρόποι Διευθυνσιοδότησης Συνοπτικά


 Άμμεσος (Immediate)
 MOV AX, 1234
 Με καταχωρητή (Register)
 MOV AX, DS
 Απευθείας (Direct)
 MOV AX, [1234h]
 Έμμεσος με καταχωρητή (Register Indirect)
 MOV AX, [BX]
 Με καταχωρητή βάσης και μετατόπιση (Base relative)
 MOV AX, [BX+2]
 Με καταχωρητή δείκτη (Direct indexed)
 MOV AX, [SI+2]
 Με καταχωρητή βάσης και δείκτη (Base indexed)
 MOV AX, BX[SI]
Άμεσος
Immediate
 Τα δεδομένα βρίσκονται μέσα στην εντολή

 Ο επεξεργαστής διαβάζει τον κωδικό εντολής και τοποθετεί τα δεδομένα


που ακολουθούν στον κατάλληλο καταχωρητή

 Τα δεδομένα μπορεί να έχουν μήκος 8 ή 16bit το οποίο καθορίζεται στον


κωδικό εντολής και από το μήκος του καταχωρητή προορισμού

Reg[dst]  Imm

Code Segment Data Segment

AH AL 0100h B8h 1000h

BH BL 0101h 08h 1001h

CH CL 0102h 23h 1002h

DH DL 0103h 1003h

0104h 1004h
SP
0105h 1005h
BP
0106h 1006h
SI
0107h 1007h
DI

Φυσική Διεύθυνση Φυσική Διεύθυνση


IP=0100h Κώδικα Δεδομένων

12440h
12440h
CS=1234h
Μεταφέρθηκαν
DS

SS Word 2308h

ES
ΜΟV AX, 2308h
Άμεσος
Παραδείγματα
 MOV AX, 1000h ; AH  10h, AL  00h
 MOV AX, 320 ; AH  0000 0001b (01h)
; AL  0100 0000b (40h)
 ADD AL, 10 ; AL  AL + 0Ah
 MOV AL, -40 ; AL  1101 1000b (D8h)

Με καταχωρητή
Register Direct
 Τα δυο ορίσματα της εντολής είναι καταχωρητές του
επεξεργαστή

 Ο καταχωρητής πηγής και ο καταχωρητής προορισμού


έχουν πάντα το ίδιο μήκος σε bits

 Η εντολή αποτελείται μόνο από τον κωδικό εντολής και δεν


έχει άλλα bytes που να την αποτελούν

 Το περιεχόμενο του καταχωρητή πηγής αντιγράφεται στον


καταχωρητή προορισμού (μεταφορά δεδομένων)

Reg[dst]  Reg[src]
Code Segment Data Segment

AH 4Dh AL 23h 0100h 8Eh 1000h

BH BL 0101h D8h 1001h

CH CL 0102h 1002h

DH DL 0103h 1003h

0104h 1004h
SP
0105h 1005h
BP
0106h 1006h
SI
0107h 1007h
DI

Φυσική Διεύθυνση Φυσική Διεύθυνση


IP=0100h Κώδικα Δεδομένων

12441h
12440h
CS=1234h
Μεταφέρθηκαν
DS 4D23h
SS Word
Byte4D23h
4Dh

ES ΜΟV DS,
DL, AH
AX

Με καταχωρητή
Παραδείγματα
 MOV DS, AX ; DS  AX
 MOV DL, AL ; DL  AL
 MOV AH, AL ; AH  AL
 MOV BL, AH ; BL  AH
 MOV AX, CX ; AX  CX
Απευθείας
Direct
 Η εντολή περιέχει μια 16bit λογική διεύθυνση

 Η λογική διεύθυνση συνδυάζεται με τη βάση του τμήματος που


χρησιμοποιείται για να σχηματίσει τη φυσική διεύθυνση

 Εξ ορισμού, ο καταχωρητής τμήματος είναι ο DS

 Τα 8 ή 16bit δεδομένα που ορίζει ο κωδικός εντολής μεταφέρονται από ή


προς τον καταχωρητή που ορίζει η εντολή

Reg[r] = [ SegReg*16 + Imm + (0/1) ]

Code Segment Data Segment

AH AL 0100h A1h 1000h

BH BL 0101h 01h 1001h 08h


CH CL 0102h 10h 1002h 23h
DH DL 0103h 1003h

0104h 1004h
SP
0105h 1005h
BP
0106h 1006h
SI
0107h 1007h
DI

Φυσική Διεύθυνση Φυσική Διεύθυνση


IP=0100h Κώδικα Δεδομένων

12440h + 57781h
CS=1234h
Μεταφέρθηκαν
DS=5678h
5678h
SS Word 2308h

ES
ΜΟV AX, [1001h]
Απευθείας
Παραδείγματα
 MOV AX, [1000h] ; AL  DS:[1000h], AH  DS:[1001h]

 MOV AX, [Table] ; AL  DS:[Table], AH  DS:[Table+1]

 MOV [1000h], AL ; DS:[1000h]  AL

 MOV [1000h], AX ; DS:[1000h]  AL, DS:[1001h]  AH

Έμμεσος με καταχωρητή
Register Indirect
 Η 16bit λογική διεύθυνση μετατόπισης βρίσκεται αποθηκευμένη σε
κάποιον από τους καταχωρητές SI, DI, BX, BP, ο οποίος εμπεριέχεται
στον κωδικό εντολής

 Η τιμή μετατόπισης προστίθεται κάθε φορά στον εξ ορισμού


καταχωρητή τμήματος για τον χρησιμοποιούμενο καταχωρητή
μετατόπισης ή με καταχωρητή τμήματος προκαθορισμένο από το
χρήστη
 DS: BX, SI, DI
 SS: BP

Reg[dst]  [ SegReg * 16 + Reg[offset] + (0/1) ]


[ SegReg * 16 + Reg[offset] + (0/1) ]  Reg[src]
Code Segment Data Segment

AH 4Dh AL 23h 0100h 89h 1000h

BH 10h BL 04h 0101h 07h 1001h

CH CL 0102h 1002h

DH DL 0103h 1003h

0104h 1004h
SP
0105h 1005h
BP
0106h 1006h
SI
0107h 1007h
DI

Φυσική Διεύθυνση Φυσική Διεύθυνση


IP=0100h Κώδικα Δεδομένων

12440h 57784h
CS=1234h
Μεταφέρθηκαν
DS=5678h

SS Word 4D23h

ES
ΜΟV DL,
ΜΟV AH[BX], AX

Έμμεσος με καταχωρητή
Παραδείγματα
 MOV [BX], AL ; DS:[BX]  AL
 MOV SS:[BX], AL ; SS:[BX]  AL
 MOV [DI], AX ; DS:[DI]  AX
 MOV AH, [SI] ; AH  DS:[SI]
 MOV AH, SS:[SI] ; AH  SS:[SI]
 MOV AX, [BP] ; AX  SS:[BP]
 MOV AX, DS:[BP] ; AX  DS:[BP]
 MOV AX, [BX] ; AX  DS:[BX]
Με καταχωρητή βάσης & μετατόπιση
Base Relative
 Επέκταση της έμμεσης με καταχωρητή διευθυνσιοδότησης

 H 16bit λογική διεύθυνση υπολογίζεται από το άθροισμα του


περιεχομένου του καταχωρητή βάσης BX ή BP, και μια ακέραια σταθερή
προσημασμένη τιμή μετατόπισης

 Η μετατόπιση μπορεί να είναι των 8bits (-128 έως + 127) ή των 16bits (-
32768 έως + 32767)

 Ο εξ ορισμού καταχωρητής τμήματος είναι ο DS για τον BX και ο SS για


τον BP

Reg[dst]  [ SegReg * 16 + (BX ή BP) + offset + (0/1) ]


[ SegReg * 16 + (BX ή BP) + offset + (0/1) ]  Reg[dst]

Με καταχωρητή βάσης & μετατόπιση


Παραδείγματα
 MOV [BX + 6], AL ; DS:[BX + 0006h]  AL
 MOV [BX + 0Ah], AX ; DS:[BX + 000Ah]  AX
 MOV SS:[BX + FFh], CX ; SS:[BX + 00FFh]  CX
 MOV AH, [BP + 100] ; AH  SS:[BP + 0064h]
 MOV AX, [BP-3] ; AX  SS:[BP + FFFDh]
 MOV AX, [BX-100] ; AX  DS:[BX + FF9Ch]
Με καταχωρητή δείκτη
Indexed Relative
 Παρόμοια με τη διευθυνσιοδότηση με καταχωρητή βάσης και
μετατόπιση

 H 16bit λογική διεύθυνση υπολογίζεται από το άθροισμα του


περιεχομένου ενός εκ των καταχωρητών δείκτη SI ή DI και πιθανώς μια
ακέραια σταθερή προσημασμένη τιμή μετατόπισης (8 ή 16bits)

 Εξ ορισμού χρησιμοποιείται ο καταχωρητής τμήματος DS, ο οποίος


μπορεί να αντικατασταθεί με κάποιον άλλο από το χρήστη

Reg[dst]  [ SegReg * 16 + (SI ή DI) + offset + (0/1) ]


[ SegReg * 16 + (SI ή DI) + offset + (0/1) ]  Reg[dst]

Με καταχωρητή δείκτη
Παραδείγματα
 MOV AL, [SI + 6] ; AL  DS:[SI + 0006h]
 MOV ES:[DI + 100h], AL ; ES:[DI + 0100h]  AL
 MOV [SI + 25000], AX ; DS:[SI + 61A8h]  AL,
; DS:[SI + 61A9h]  AH
 MOV [SI - 68], AX ; DS:[SI + FFBCh]  AL,
; DS:[SI + FFBDh]  AH
 ADD AL, ES:[DI + 10] ; AL  AL + ES:[DI + 000Ah]
Με καταχωρητή βάσης & δείκτη
Based Indexed
 Επέκταση της έμμεσης με καταχωρητή διευθυνσιοδότησης

 H 16bit λογική διεύθυνση υπολογίζεται από το άθροισμα του


περιεχομένου ενός εκ των καταχωρητών βάσης BX ή BP, ενός εκ των
καταχωρητών δείκτη SI ή DI και την πιθανή μετατόπιση που δίνεται με
την εντολή

 Τα περιεχόμενα των χρησιμοποιούμενων καταχωρητών θεωρούνται


ακέραιοι προσημασμένοι αριθμοί των 16bits

 Εξ ορισμού χρησιμοποιείται ο καταχωρητής τμήματος DS, ο οποίος


μπορεί να αντικατασταθεί με κάποιον άλλο από το χρήστη

Reg[dst]  [ SegReg * 16 + (BX ή BP) + (SI ή DI) + offset + (0/1) ]


[ SegReg * 16 + (BX ή BP) + (SI ή DI) + offset + (0/1) ]  Reg[dst]

Με καταχωρητή βάσης & δείκτη


Παραδείγματα
 MOV DX, [BX + DI] ; DH  DS:[BX + DI + 1], DL  DS:[BX + DI]
 MOV DX, [BX + SI] ; DH  DS:[BX + SI + 1], DL  DS:[BX + SI]
 MOV DX, [BP + DI] ; DH  DS:[BP + DI + 1], DL  DS:[BP + DI]
 MOV DX, SS:[BP + DI] ; DH  SS:[BP + DI + 1], DL  SS:[BP + DI]
 MOV DX, [BP + SI] ; DH  DS:[BP + SI + 1], DL  DS:[BP + SI]
 MOV [BP + DI], AX ; DS:[BP + DI + 1]  DH, DS:[BP + DI]  DL
 MOV SS:[BP + DI], AX ; SS:[BP + DI + 1]  DH, SS:[BP + DI]  DL
Τύποι εντολών
 Μεταφοράς δεδομένων
 Αριθμητικών πράξεων
 Χειρισμού bit
 Διακλάδωσης
 Διακλάδωσης με προϋποθέσεις
 Συμβολοσειρών
 Ελέγχου επεξεργαστή

Εντολές Μεταφοράς Δεδομένων


 mov dst, src
 dst  src
 push src
 (SP-1)  src(MSB), (SP-2)  src(LSB)
 pop dst
 dst(LSB)  (SP), dst(MSB)  (SP+1)
Εντολές Αριθμητικών Πράξεων
 add dst, src
 dst  dst + src
 adc dst, src
 dst  dst + src + CF
 inc dst
 dst  dst + 1
 cmp dst, src
 Ενημέρωση σημαιών από αποτέλεσμα dst - src

Εντολές Λογικών Πράξεων


 and dst, src
 dst  dst • src
 or dst, src
 dst  dst + src
 test dst, src
 Ενημερώνει σημαίες από dst • src χωρίς να αλλάξει το dst
 shr dst, cnt
 Λογική ολίσθηση δεξιά cnt φορές
 ror dst, cnt
 Περιστροφή δεξιά cnt φορές
Εντολές Διακλάδωσης
 jmp addr
 Ενδοτμηματική διακλάδωση
 loop addr
 CX  CX-1 και πηγαίνει στο addr αν CX ≠ 0
 call addr
 ενδοτμηματική κλήση υπορουτίνας
 int n
 κλήση εξυπηρέτησης διακοπής

Εντολές Διακλάδωσης με προϋποθέσεις


 jg/jnle
 Άλμα για μεγαλύτερο
 jz/jnz
 Άλμα για ισότητα/ανισότητα
 je/jne
 Άλμα για ισότητα/ανισότητα
Εντολές Συμβολοσειρών
 scasb/scasw
 Σύγκριση byte/word που βρίσκονται σε συγκεκριμένες
θέσεις
 stosb/stosw
 Αποθήκευση byte/word από καταχωρητή σε συγκεκριμένη
θέση μνήμης
 repne/repz
 Επανάληψη όσο δεν προκύπτει ισότητα μεταξύ byte/word.

Εντολές Ελέγχου Επεξεργαστή


 stc
 CF=1
 clc
 CF=0
 std
 DF=1
 cld
 DF=0
ΕΡΓΑΣΤΗΡΙΟ ΑΡΧΙΤΕΚΤΟΝΙΚΗΣ ΙΙ Εργαστήριο 2ο

ΠΡΟΓΡΑΜΜΑΤΟΣ ΨΕΥΔΟΕΝΤΟΛΕΣ
ΔΟΜΗ ΠΡΟΓΡΑΜΜΑΤΟΣ-
ΜΑΚΡΟΕΝΤΟΛΕΣ- ΔΙΑΔΙΚΑΣΙΕΣ (ΕΙΣΑΓΩΓΗ)

ΔΟΜΗ ΠΡΟΓΡΑΜΜΑΤΟΣ Ι
 Τ ί κύρια
Τρία ύ τμήματα
ή
 Ορισμός μοντέλου τμημάτων μνήμης και σωρού
 Ορισμός
ό και αρχικοποίηση
ί τιμών
ώ μεταβλητών
ώ
 Τμήμα κώδικα

 Καθορίζονται με ένα σύνολο οδηγιών προς τον


συμβολομεταφραστή οι οποίες ξεκινούν με το
πρόθεμα τελεία (.) και δεν μεταφράζονται σε
κώδικα
ώ μηχανής
ή αλλά ά επηρεάζουν
ά τον κώδικα
ώ που
παράγει ο συμβολομεταφραστής.
ΔΟΜΗ ΠΡΟΓΡΑΜΜΑΤΟΣ ΙΙ
.model
model [είδος]
.stack [μέγεθος]
.data
d t

.code

.exit

ΔΟΜΗ ΠΡΟΓΡΑΜΜΑΤΟΣ ΙΙ
.model
model [είδος]
.stack [μέγεθος]
.data
d t

.code

.exit
ΜΟΝΤΕΛΑ ΜΝΗΜΗΣ (.MODEL
( MODEL [ΕΙΔΟΣ])
Είδος Δεδομένα Κώδικας
Tiny Ενιαίο≤64KB Ενιαίο τμήμα δεδομένων και
κώδικα
Small ≤64KB ≤64KB 1 Τμήμα
μήμ δεδομένων,
μ ,
1 Τμήμα κώδικα
Medium ≤64KB ≤64KB/Τμήμα 1 Τμήμα δεδομένων,
>1 Τμήματα κώδικα
Compact ≤64KB/Τμήμα ≤64KB >1 Τμήματα δεδομένων,
1 Τμήμα κώδικα
Large* οποιοδήποτε οποιοδήποτε >1 Τμήματα δεδομένων,
>1 Τμήματα κώδικα

Huge* οποιοδήποτε οποιοδήποτε >1 Τμήματα δεδομένων,


>1 Τμήματα κώδικα

* Στο μοντέλο Large το μεγαλύτερο μέγεθος μεταβλητής πρέπει να είναι ≤64KB ενώ
στο μοντέλο Huge δεν υπάρχει ο παραπάνω περιορισμός

ΔΟΜΗ ΠΡΟΓΡΑΜΜΑΤΟΣ ΙΙ
.model
model small
.stack [μέγεθος]
.data
d t

.code

.exit
ΜΟΝΤΕΛΑ ΣΩΡΟΥ (.STACK)
( STACK)

 Το μέγεθος του σωρού καθορίζεται με


απευθείας
θ ί τιμή.
ή
 Εξ
ξ ορισμού
ρ μ το μ μέγεθος
γ ς του σωρού
ρ είναι 1024
Bytes (δεν αναφέρεται καθόλου το μέγεθος)

ΔΟΜΗ ΠΡΟΓΡΑΜΜΑΤΟΣ ΙΙ
.model
model small
.stack (ισοδυναμεί με .stack 1024)
.data
d t

.code

.exit
ΟΡΙΣΜΟΣ ΜΕΤΑΒΛΗΤΩΝ (.DATA)
( DATA)

 Ορισμός
ρ μ ς σταθερών
ρ και μ
μεταβλητών
β η εντόςς αυτού
του τμήματος

 Για τις μεταβλητές εκτός από τον ορισμό του τύπου


ορίζεται το μέγεθος (π.χ. για πίνακες) και οι
ενδεχόμενες
ό αρχικές
έ τιμές
έ
 Για τις σταθερές ορίζεται η τιμή αντικατάστασης

ΣΤΑΘΕΡΕΣ

 Για τον ορισμό


ό μιας σταθεράς
ά χρησιμοποιείται
ί
το πρόθεμα equ (equal)
ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ - ΜΕΤΑΒΛΗΤΩΝ
Τύπος Λειτουργία
db (define byte) Ορίζεται τύπος μεταβλητής με μέγεθος
κάθε στοιχείου της μεταβλητής ένα byte
dw (define word) Ορίζεται τύπος μεταβλητής με μέγεθος
κάθε στοιχείου της μεταβλητής δύο bytes
dd (define doubleword) Ορίζεται τύπος μεταβλητής με μέγεθος
κάθε στοιχείου της μεταβλητής τέσσερα
bytes

Οδηγία Λειτουργία
dup
p ((duplicate)
p ) Καθορισμός
ρ μ ς πλήθους
ή ς στοιχείων
χ μ
μεταβλητής
β η ής
dup (?) Η τιμή στην παρένθεση καθορίζει την
αρχική τιμή των στοιχείων της μεταβλητής.
Όταν η παρένθεση περιέχει το ? Η αρχική
τιμή των στοιχείων της μεταβλητής είναι
αδιάφορη.

ΔΟΜΗ ΠΡΟΓΡΑΜΜΑΤΟΣ ΙΙ
.model
model small
.stack
.data
d t
len equ 20
var1 db 50 dup (30)
.code

.exit
ΤΜΗΜΑ ΚΩΔΙΚΑ (.CODE)
( CODE)
 ΤΤο Τμήμα
Τ ή αυτό ό περιέχει
έ τις εντολές
λέ του
προγράμματος και κλήσεις προς μακροεντολές και
διαδικασίες
 Στην αρχή του κώδικα πραγματοποιείται
αρχικοποίηση
ί τμημάτων
ά δ δ έ
δεδομένων με
αρχικοποίηση του καταχωρητή DS
(Διαδικασία δύο βημάτων για αποφυγή λάθους!!!)

mov AX, @data mov AX, seg [ον. μεταβλ.]


ή
mov DS,AX mov DS, AX

ΔΟΜΗ ΠΡΟΓΡΑΜΜΑΤΟΣ ΙΙ
.model
model small
.stack
.data
d t
len equ 20
var1 db 50 dup (30)
.code
mov AX, seg var1
mov DS, AX
.exit
ΕΞΟΔΟΣ ΣΤΟ ΛΕΙΤΟΥΡΓΙΚΟ ΣΥΣΤΗΜΑ(.ΕΧΙΤ)
ΣΥΣΤΗΜΑ( ΕΧΙΤ)

 Η συγκεκριμένη
έ οδηγία
ί προς το
συμβολομεταφραστή ισοδυναμεί με το τμήμα
εντολών:
.exit
exit
mov AX,4C00h
Int 21h

δηλαδή με την κλήση της διακοπής λογισμικού που


επιστρέφει τον έλεγχο στο Λ.Σ.

ΔΟΜΗ ΠΡΟΓΡΑΜΜΑΤΟΣ ΙΙ
.model
model small
.stack
.data
d t
len equ 20
var1 db 50 dup (30)
.code
mov AX, seg var1
mov DS, AX
.exit
ΑΛΛΕΣ ΨΕΥΔΟΕΝΤΟΛΕΣ I

Οδηγία Λειτουργία
assume Σ δέ ένα
Συνδέει έ τμήμα
ή με έναν
έ καταχωρητή
ή τμήματος
ή
end Τέλος προγράμματος. Εάν συνοδεύεται από κάποιο όνομα, είναι
ένδειξη εκκίνησης της εκτέλεσής του.
macro Έναρξη μακροεντολής
endm Τέλος μακροεντολής (macro)
proc Έναρξη διαδικασίας
endp Τέλος διαδικασίας
public Επιτρέπει τη χρήση σταθερών ή μεταβλητών από άλλα
προγράμματα, τα οποία πρόκειται να ενσωματωθούν με τον
συνδέτη.

ΑΛΛΕΣ ΨΕΥΔΟΕΝΤΟΛΕΣ II

Οδηγία Λειτουργία
extrn
t Χρήση
Χ ή σταθερών
θ ώ ή μεταβλητών
βλ ώ άλλ
άλλου προγράμματος,
ά στο οποίο
ί
έχουν δηλωθεί με την εντολή public
include Ενσωμάτωση στο πηγαίο αρχείο άλλου αρχείου
offset Υπολογισμός της σχετικής διεύθυνσης από τη φυσική διεύθυνση
org Ορισμός διεύθυνσης εντός του τμήματος, από την οποία θα
τοποθετεί ο συμβολομεταφραστής τον κώδικα και τα δεδομένα που
ακολουθούν
ptr Δείκτης μνήμης ο οποίος μαζί με το πρόθεμα byte ή word καθορίζει
το μήκος
ή του δ
δεδομένου
δ έ που θ
θα δ
διακινηθεί.
θ ί
segment Ορισμός τμήματος
ends Τέλος τμήματος
ΜΑΚΡΟΕΝΤΟΛΕΣ Ι
Ο κώδικας μιας μακροεντολής αντικαθίσταται στα
σημεία εμφάνισης εντός του προγράμματος
κατά
α ά τη
η μετάφραση!
ε άφραση!

 Δομή μακροεντολής

μ μ
[[Όνομα μακροεντολής]
ρ ής] macro [[Παράμετροι]
ρ μ ρ ]
εντολές
Ό
[Όνομα μακροεντολής]
ή endm

ΜΑΚΡΟΕΝΤΟΛΕΣ ΙΙ
.model
d l smallll .code
d
.stack mov AX, seg var1
.data mov DS, AX
msg1 db “arxitektoniki II$” mov ES, AX
msg2 db “earino 2010$” prtnmsg msg1
prtnmsg macro text prtnmsg msg2
mov dx, offset text .exit
mov ah,
ah 09h
Int 21h
prtnmsg endm
ΜΑΚΡΟΕΝΤΟΛΕΣ ΙIΙ
.code
d .code
d
mov AX, seg var1 mov AX, seg var1
mov DS,
DS AX mov DS,
DS AX
mov ES, AX mov ES, AX
mov dx,
dx offset msg1 prtnmsg msg1
mov ah, 09h prtnmsg msg2
Int 21h .exit
mov dx, offset msg2
mov ah, 09h
Int 21h
.exit

ΔΙΑΔΙΚΑΣΙΕΣ I
 Οι διαδικασίες
Ο δ δ ί αποτελούν
λ ύ αυτόνομα
ό τμήματα
ή
κώδικα που καλούνται μέσα από άλλα τμήματα
κώδικα.
κώδικα

 Δομή Διαδικασιας
μ Διαδικασίας]
[[Όνομα ς] p
proc near ή far
εντολές
ret
[Όνομα Διαδικασίας] endp
ΔΙΑΔΙΚΑΣΙΕΣ ΙΙ
model
d l smallll prtnmsg proc near
.stack mov dx, offset msg
.data mov ah, 09h
msg db “arxitektoniki II$” Int 21h
.code ret
mov AX, seg var1 prtnmsg endp
mov DS, AX
mov ES,
ES AX
call prtnmsg
.exit
exit

Emu8086
Παρουσίαση
Τι είναι ο emu8086;
 Είναι ένα περιβάλλον σχεδιασμένο για εκπαιδευτικούς
σκοπούς, το οποίο επιτρέπει την οργανωμένη ανάπτυξη
κώδικα και την εκτέλεση αυτού, με στόχο τον έλεγχο ορθής
λειτουργίας και την αποδοτική αποσφαλμάτωσή του.

 www.emu8086.com
(shareware)

Τι μας προσφέρει;
 Συντακτικός έλεγχος και συμβολομετάφραση του 
κώδικα Assembly.
 Δημιουργία εκτελέσιμου αρχείου προγράμματος (EXE 
ή COM).
 Βηματική ή ευθεία εκτέλεση προγράμματος.
 Επισκόπηση των περιεχομένων της μνήμης.
 Εξομοίωση τερματικού (οθόνη και πληκτρολόγιο) σε 
κατάσταση κειμένου και γραφικών.
 Εισαγωγή σημείων διακοπής εκτέλεσης (breakpoints)
 Χρήση ιδεατών περιφερειακών.

3
Περιβάλλον εργασίας emu8086 #1
Αρχικά εμφανιζόμενο παράθυρο επιλογών εργασίας
 New: Δημιουργία ενός καινούριου έργου ανάπτυξης προγράμματος.
 Code Examples: Έτοιμα παραδείγματα προγραμμάτων για την εκμάθηση 
της γλώσσας Assembly 80x86.

 Quick Start Tutor: Ένας σύντομος οδηγός του emu8086.
 Recent Files: Εμφανίζεται μια λίστα των πιο πρόσφατων προγραμμάτων, 
που επεξεργάστηκε ο χρήστης.
4

Περιβάλλον εργασίας emu8086 #2
Παράθυρο επιλογής μορφής νέου έργου προγράμματος
 COM: Πρότυπο δημιουργίας εκτελέσιμου αρχείου COM.
 EXE: Πρότυπο δημιουργίας εκτελέσιμου αρχείου EXE.
 BOOT: Πρότυπο δημιουργίας αρχείου δισκέτας εκκίνησης
υπολογιστικού συστήματος.
 Empty Workspace: Δημιουργία
προγράμματος εκ του μηδενός. 
 The emulator: Απευθείας
εκτέλεση του εξομοιωτή για
χρήση με ήδη έτοιμο
πρόγραμμα.

5
Περιβάλλον εργασίας emu8086 #3
Βασικό παράθυρο εργασίας και ανάπτυξης
 New: Δημιουργία νέου αρχείου πηγαίου κώδικα προγράμματος.
 Open: Άνοιγμα υπάρχοντος αρχείου προς ανάγνωση και επεξεργασία 
πηγαίου κώδικα προγράμματος.

 Save: Αποθήκευση του πηγαίου κώδικα στο ανοικτό ή νέο αρχείο.
 Compile: Έλεγχος συντακτικών σφαλμάτων και συμβολομετάφραση του 
πηγαίου κώδικα.
6

Περιβάλλον εργασίας emu8086 #4
Βασικό παράθυρο εργασίας και ανάπτυξης

 Emulate: Συμβολομετάφραση του πηγαίου κώδικα και φόρτωσή 
του στον εξομοιωτή για τον έλεγχο της εκτέλεσής του.
 Calculator: Ένα χρήσιμο υποπρόγραμμα που επιτρέπει τις πράξεις 
ανάμεσα σε τελεστές διαφορετικών αριθμητικών συστημάτων.
 Convertor: Ένα υποπρόγραμμα που επιτρέπει την άμεση 
μετατροπή αριθμών ανάμεσα στα τέσσερα βασικά αριθμητικά 
συστήματα.
 Options: Παράθυρο μέσα στο οποίο ορίζονται ειδικές λειτουργίες 
και παράμετροι εμφάνισης του προγράμματος.
 Help: Ανοίγει στον εξ ορισμού περιηγητή ιστοσελίδων τις τοπικά 
αποθηκευμένες ιστοσελίδες παροχής βοήθειας του 
προγράμματος.
 Ascii Codes: Εμφανίζει ένα παράθυρο, το οποίο περιέχει τον πλήρη 
πίνακα χαρακτήρων και συμβόλων ASCII.

7
Περιβάλλον εργασίας emu8086 #5

Παράθυρο υπολογισμού πράξεων σε Παράθυρο μετατροπής αριθμών ανάμεσα σε 
διαφορετικά αριθμητικά συστήματα ποικίλα αριθμητικά συστήματα

Συγγραφή ενός απλού προγράμματος #1
• Ο Χρήστης επιλέγει New Empty Workspace
• Συγγραφή κώδικα (βλ. σχήμα)

• Αποθήκευση από το μενού επιλογών
File Save As
9
Συγγραφή ενός απλού προγράμματος #2

Διαλογικό παράθυρο αποθήκευσης εκτελέσιμου αρχείου

Παράθυρο πληροφοριών μετά από Παράθυρο πληροφοριών μετά από
επιτυχημένη συμβολομετάφραση αποτυχημένη συμβολομετάφραση 10

Εκτέλεση προγράμματος‐Αποσφαλμάτωση #1
 Load: Επιτρέπει τη φόρτωση ενός πηγαίου κώδικα (asm) ή κάποιο αρχείο 
εκτελέσιμου κώδικα (com ή exe), με σκοπό την εξομοίωση του κώδικα που 
περιέχουν.

 Reload: Αναγκάζει τον εξομοιωτή να επανατοποθετήσει τους καταχωρητές και την 
μνήμη στην αρχική τους κατάσταση, την οποία είχαν αμέσως μετά τη φόρτωση 
του κώδικα προς εκτέλεση στην ιδεατή μνήμη του.
11
Εκτέλεση προγράμματος‐Αποσφαλμάτωση #2

 Step Back: Αναγκάζει τον εξομοιωτή να κάνει ένα βήμα μιας εντολής προς τα 
πίσω στην εκτέλεση του προγράμματος.
 Single Step: Αναγκάζει τον εξομοιωτή να κάνει ένα βήμα μιας εντολής προς τα 
εμπρός στην εκτέλεση του προγράμματος (εκτέλεση επόμενης εντολής).
 Run: Θέτει τον εξομοιωτή σε κατάσταση ευθείας εκτέλεσης του προγράμματος, 
σταματώντας μόνο στα σημεία διακοπής, που έχει ορίσει ο χρήστης.
 Συρόμενος επιλογές Step Delay: Ορίζει τη χρονική καθυστέρηση εκτέλεσης 
ανάμεσα σε διαδοχικές εντολές όταν ο εξομοιωτής λειτουργεί σε κατάσταση 
ευθείας εκτέλεσης.
 Αριστερό πλαίσιο: Περιέχει όλους τους καταχωρητές γενικού και ειδικού σκοπού 
του επεξεργαστή 8086.
 Κεντρικό πλαίσιο: Περιέχει τις φυσικές διευθύνσεις και τα περιεχόμενα αυτών σε 
δεκαεξαδική μορφή και δεκαδική αριθμητική μορφή, καθώς και τον αντίστοιχο 
ASCII του χαρακτήρα του byte.
 Δεξιό πλαίσιο: Περιέχει τις συμβολομεταφρασμένες εντολές του πηγαίου κώδικα 
ακριβώς με τη μορφή που τις κατανοεί ο επεξεργαστής.

12

Παράθυρα πληροφοριών κατάστασης του εξομοιωτή

Παράθυρα σημαιών κατάστασης του επεξεργαστή Παράθυρο επεξεργασίας θέσεων
και λεκτικής ανάλυσης των σημαιών του χάρτη μνήμης

Παράθυρο επισκόπησης του χάρτη μνήμης
Παράθυρο επεξεργασίας περιεχομένων 
και λειτουργίας σωρού 13
Σημεία Ελέγχου και Διακοπής (breakpoints)
Τι ονομάζουμε σημεία διακοπής (breakpoints);
Είναι τα σημεία ορισμένα από τον χρήστη και στα οποία η ευθεία εκτέλεση του 
προγράμματος διακόπτεται και επιστρέφει σε αυτόν ο έλεγχος του εξομοιωτή, ώστε να 
παρατηρήσει την κατάσταση του ιδεατού συστήματος ή να εκτελέσει βηματικά τις εντολές 
που επιθυμεί.

Μενού επιλογών για την εκτέλεση του προγράμματος
14

Απευθείας εκτέλεση προγράμματος 
από τον επεξεργαστή
 Εκτέλεση προγράμματος κάτω από το 
λειτουργικό σύστημα DOS
 Εκτέλεση προγράμματος κάτω από το 
λειτουργικό σύστημα Windows
Command Prompt
DOSBOX
 Εκτέλεση προγράμματος χωρίς λειτουργικό 
σύστημα

15
Ι. Έλληνας - Καθηγητής

ΕΡΓΑΣΙΑ – 1: Ανασκόπηση στα ΑΡΙΘΜΗΤΙΚΑ ΣΥΣΤΗΜΑΤΑ


Ονοματεπώνυμο: Α.Μ:
Εξάμηνο: Έτος:

1. Το δεκαδικό σύστημα

Είναι φανερό ότι οι χιλιάδες, εκατοντάδες, δεκάδες, μονάδες και τα δεκαδικά ψηφία είναι δυνάμεις
του δέκα που εξαρτώνται από τη θέση των ψηφίων. Ο αριθμός των συμβόλων που χρησιμοποιεί
ένα αριθμητικό σύστημα δίνεται από τη βάση του (10 για το δεκαδικό σύστημα).

2. Το δυαδικό σύστημα

Η μετατροπή ενός δυαδικού αριθμού σε δεκαδικό φαίνεται στο παραπάνω παράδειγμα.

Η μετατροπή ενός ακέραιου δεκαδικού αριθμού (π.χ. του 17) σε δυαδικό γίνεται ως εξής:

Αρχιτεκτονική Η/Υ-Ι 1
Ι. Έλληνας - Καθηγητής

 ή με τον εξής τρόπο:

δυνάμεις του 2  25 24 23 22 21 20

δεκαδικό ισοδύναμο  32 16 8 4 2 1

Αποτέλεσμα  0 1 0 0 0 1 = 17

Η μετατροπή ενός κλασματικού δεκαδικού αριθμού (π.χ. 0,93) σε δυαδικό γίνεται ως εξής:

Ο αριθμός που προκύπτει είναι ο 0.11101 ο οποίος έχει ισοδύναμο το δεκαδικό αριθμό:

1*2-1+1*2-2+1*2-3+0*2-4+1*2-5=0,90625 που είναι μια προσέγγιση του αρχικού αριθμού

Ορισμοί

 Ένας δυαδικός αριθμός των 4 bits καλείται nibble.


 Ένας δυαδικός αριθμός των 8 bits καλείται byte.
 Ένας δυαδικός αριθμός των 16 bits καλείται word.
 Ένας δυαδικός αριθμός των 32 bits καλείται double word.
 Ένας δυαδικός αριθμός των 64 bits καλείται quad word.

 Το πιο δεξιό bit ενός δυαδικού αριθμού καλείται «λιγότερο σημαντικό» ή LSB (Least Significant
Bit).
 Το πιο αριστερό bit ενός δυαδικού αριθμού καλείται «περισσότερο σημαντικό» ή MSB (Most
Significant Bit).

Αρχιτεκτονική Η/Υ-Ι 2
Ι. Έλληνας - Καθηγητής

Οργάνωση δεδομένων

Αρχιτεκτονική Η/Υ-Ι 3
Ι. Έλληνας - Καθηγητής

Αρχιτεκτονική Η/Υ-Ι 4
Ι. Έλληνας - Καθηγητής

3. Το δεκαεξαδικό σύστημα

Η μετατροπή ενός δεκαεξαδικού αριθμού σε δεκαδικό φαίνεται στο παραπάνω παράδειγμα.

Η αντιστοίχιση δεκαδικού και δεκαεξαδικού συστήματος είναι:

Δεκαδικό (DECimal)  0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Δεκαεξαδικό (HEXadecimal)  0 1 2 3 4 5 6 7 8 9 A B C D E F

 Η αντιστοίχιση δυαδικού, δεκαεξαδικού και δεκαδικού συστήματος είναι:

BINary (b) HEXadecimal (h) DECimal (d)

0000 0 0
0001 1 1
0010 2 2
0011 3 3
0100 4 4
0101 5 5
0110 6 6
0111 7 7
1000 8 8
1001 9 9
1010 Α 10
1011 Β 11
1100 C 12
1101 D 13
1110 E 14
1111 F 15

Η μετατροπή ενός ακέραιου δεκαδικού αριθμού (π.χ. του 525) σε δεκαεξαδικό γίνεται ως εξής:

δυνάμεις του 16  163 162 161 160

δεκαδικό ισοδύναμο  4096 256 16 1

Αποτέλεσμα  0 2 0 13 = 2*256+13*1=525

Ο δεκαεξαδικός αριθμός είναι: 020D h (To «h» πάντα υποδεικνύει τη βάση


αρίθμησης)

Αρχιτεκτονική Η/Υ-Ι 5
Ι. Έλληνας - Καθηγητής

4. Αριθμητικές πράξεις

Αρχιτεκτονική Η/Υ-Ι 6
Ι. Έλληνας - Καθηγητής

Αρχιτεκτονική Η/Υ-Ι 7
Ι. Έλληνας - Καθηγητής

Αρχιτεκτονική Η/Υ-Ι 8
Ι. Έλληνας - Καθηγητής

Αρχιτεκτονική Η/Υ-Ι 9
Ι. Έλληνας - Καθηγητής

5. Λογικές πράξεις

Αρχιτεκτονική Η/Υ-Ι 10
Ι. Έλληνας - Καθηγητής

6. Ολίσθηση και περιστροφή

Αρχιτεκτονική Η/Υ-Ι 11
Ι. Έλληνας - Καθηγητής

7. Κώδικες

Αρχιτεκτονική Η/Υ-Ι 12
Ι. Έλληνας - Καθηγητής

Αρχιτεκτονική Η/Υ-Ι 13
Ι. Έλληνας - Καθηγητής

8. Μετατροπή δυαδικού συστήματος σε ASCII και αντίστροφα

Αρχιτεκτονική Η/Υ-Ι 14
Ι. Έλληνας - Καθηγητής

Αρχιτεκτονική Η/Υ-Ι 15
Ι. Έλληνας - Καθηγητής

Αρχιτεκτονική Η/Υ-Ι 16
Ι. Έλληνας - Καθηγητής
ΕΡΩΤΗΣΕΙΣ

1. Αναλύστε το δεκαδικό αριθμό 1.459,25 σε δυνάμεις της βάσης του.


2. Αναλύστε το δυαδικό αριθμό 10110,101 σε δυνάμεις της βάσης του και υπολογίστε το
δεκαδικό ισοδύναμό του.
3. Γράψτε παραστατικά πως μετατρέπεται ο αριθμός 193 d σε δυαδικό αριθμό (και με τους
δύο τρόπους).
4. Γράψτε παραστατικά πως μετατρέπεται ο αριθμός 0,54 d σε δυαδικό αριθμό.
5. Δείξτε πως ευρίσκεται ο ισοδύναμος δεκαδικός αριθμός του F34B h.
6. Δείξτε πως ευρίσκεται ο ισοδύναμος δεκαεξαδικός αριθμός του 896 d.
7. Δείξτε πως ευρίσκεται ο δυαδικός αριθμός του -124 με συμπλήρωμα ως προς 2.
8. Δείξτε πως γίνεται η πρόσθεση των δυαδικών αριθμών 10000101 (+132 ή -123) και
01100000 (+96). Πως μεταβάλλονται οι σημαίες CF, OF, SF ;
9. Δείξτε πως γίνεται με δυαδικούς αριθμούς η πράξη 4-14. Πως μεταβάλλονται οι σημαίες
CF, OF, SF;
10. Δείξτε πως γίνεται η πρόσθεση των δεκαεξαδικών αριθμών 94 h και 9Α h. Πως
μεταβάλλονται οι σημαίες CF, OF, SF;
11. Δείξτε πως γίνεται η αφαίρεση των δεκαεξαδικών αριθμών 3F h – 1B h.
12. Ποιο είναι το αποτέλεσμα των λογικών πράξεων AND, OR, XOR μεταξύ των δεκαεξαδικών
αριθμών FA h και 18 h.
13. Ολισθείστε λογικά αριστερά και δεξιά τον ισοδύναμο δυαδικό αριθμό του 68 d. Τι
παρατηρείτε μετά τη μία ή την άλλη ολίσθηση?

14. Ολισθείστε αριθμητικά δεξιά τον ισοδύναμο δυδικό αριθμό του -68 d. Τι παρατηρείτε μετά
την ολίσθηση;

15. Περιστρέψατε αριστερά ή δεξιά 4 φορές το δεκαεξαδικό αριθμό 1Α h. Τι παρατηρείτε;

16. Περιστρέψατε αριστερά ή δεξιά 8 φορές το δεκαεξαδικό αριθμό 1ΑF5 h. Τι παρατηρείτε;


17. Γράψτε τους ASCII των αριθμών 0 έως 9, των κεφαλαίων A έως Ζ, των μικρών a έως z.
Ποια είναι η απόσταση του “9 ASCII” από το “A ASCII “ και του “A ASCII “ από το “a
ASCII”;
18. Με ποιο τρόπο μπορούμε να μετατρέψουμε τον κώδικα ASCII ενός μικρού γράμματος σε
κεφαλαίο;
19. Με ποιο τρόπο μπορούμε να μετατρέψουμε τον κώδικα ASCII ενός κεφαλαίου γράμματος
από “Α” έως “F” στον αντίστοιχο αριθμό 0Α h έως 0F h του δεκαεξαδικού συστήματος
(βοήθεια από την απάντηση της 17).

Αρχιτεκτονική Η/Υ-Ι 17
ΛΥΣΕΙΣ ΕΡΓΑΣΙΑΣ-1

1. Αναλύστε το δεκαδικό αριθμό 1.459,25 σε δυνάμεις της βάσης του.

2. Αναλύστε το δυαδικό αριθμό 10110,101 σε δυνάμεις της βάσης του και


υπολογίστε το δεκαδικό ισοδύναμό του.

3. Γράψτε παραστατικά πως μετατρέπεται ο αριθμός 193 d σε δυαδικό αριθμό


(και με τους δύο τρόπους).

1
4. Γράψτε παραστατικά πως μετατρέπεται ο αριθμός 0,54 d σε δυαδικό
αριθμό.

5. Δείξτε πως ευρίσκεται ο ισοδύναμος δεκαδικός αριθμός του F34B h.

6. Δείξτε πως ευρίσκεται ο ισοδύναμος δεκαεξαδικός αριθμός του 896 d.

ή a1*162+a2*161+a3*160 = 3*256+8*16+0*1=896

7. Δείξτε πως ευρίσκεται ο δυαδικός αριθμός του -124 με συμπλήρωμα ως


προς 2.

ή
124=0111 1100  ως προς 1  1000 0011  ως προς 2 1000 0011+0000 0001
 1000 0100 = -124

2
8. Δείξτε πως γίνεται η πρόσθεση των δυαδικών αριθμών 10000101 (+132 ή -
123) και 01100000 (+96). Πως μεταβάλλονται οι σημαίες CF, OF, SF ;

Ο πρώτος αριθμός είναι 133 χωρίς πρόσημο ή -123 με πρόσημο.


Ο δεύτερος αριθμός είναι 96 χωρίς πρόσημο ή +96 με πρόσημο.
Επειδή είναι ετερόσημοι δεν υπάρχει υπερχείλιση του OF και δεν
υπάρχει κρατούμενο. Άρα το αποτέλεσμα είναι 229 χωρίς πρόσημο ή
-27 (συμπλήρωμα ως προς 2 του 1110 0101) με πρόσημο.

9. Δείξτε πως γίνεται με δυαδικούς αριθμούς η πράξη 4-14. Πως


μεταβάλλονται οι σημαίες CF, OF, SF;

10. Δείξτε πως γίνεται η πρόσθεση των δεκαεξαδικών αριθμών 94 h και 9Α h.


Πως μεταβάλλονται οι σημαίες CF, OF, SF;

148 χωρίς πρόσημο ή -108 με πρόσημο


154 χωρίς πρόσημο ή -102 με πρόσημο

Η πρόσθεση δίνει κρατούμενο και επειδή οι αριθμοί είναι αρνητικοί και το


αποτέλεσμα θετικό, το OF=1.

3
Αν τους θεωρήσουμε μη προσημασμένους, το αποτέλεσμα πρέπει να είναι
302. Το αποτέλεσμα όμως προκύπτει 46. Επειδή υπάρχει κρατούμενο, το
τελικό αποτέλεσμα είναι 256+46=302.
Αν τους θεωρήσουμε προσημασμένους, το αποτέλεσμα πρέπει να είναι
αρνητικό και ίσο με -210. Το αποτέλεσμα όμως προκύπτει 0010 1110, πρέπει
να είναι αρνητικός αριθμός και επομένως βρίσκουμε το συμπλήρωμα ως προς
2: 0010 1110  ως προς 1  1101 0001  ως προς 2  1101 0001 + 1  1101
0010  -82. Επειδή υπάρχει OF=1 προσθέτουμε το -128  -128-82=-210.

11. Δείξτε πως γίνεται η αφαίρεση των δεκαεξαδικών αριθμών 3F h – 1B h.

12. Ποιο είναι το αποτέλεσμα των λογικών πράξεων AND, OR, XOR μεταξύ των
δεκαεξαδικών αριθμών FA h και 18 h.

13. Ολισθείστε λογικά αριστερά και δεξιά τον ισοδύναμο δυαδικό αριθμό του 68
d. Τι παρατηρείτε μετά τη μία ή την άλλη ολίσθηση?

14. Ολισθείστε αριθμητικά δεξιά τον ισοδύναμο δυδικό αριθμό του -68 d. Τι
παρατηρείτε μετά την ολίσθηση;

4
15. Περιστρέψατε αριστερά ή δεξιά 4 φορές το δεκαεξαδικό αριθμό 1Α h. Τι
παρατηρείτε;

16. Περιστρέψατε αριστερά ή δεξιά 8 φορές το δεκαεξαδικό αριθμό 1ΑF5 h. Τι


παρατηρείτε;

17. Γράψτε τους ASCII των αριθμών 0 έως 9, των κεφαλαίων A έως Ζ, των
μικρών a έως z. Ποια είναι η απόσταση του “9 ASCII” από το “A ASCII “ και
του “A ASCII “ από το “a ASCII”;
0-9  ASCII  30h – 39h
A-Z  ASCII  41h – 5Ah
a-z  ASCII  61h – 7Ah

Απόσταση ‘9’ έως ‘Α’  41h – 39h=08h


Απόσταση ‘A’ έως ‘a’  61h – 41h=20h

18. Με ποιο τρόπο μπορούμε να μετατρέψουμε τον κώδικα ASCII ενός μικρού
γράμματος σε κεφαλαίο;

Αφαιρούμε το 20h.

19. Με ποιο τρόπο μπορούμε να μετατρέψουμε τον κώδικα ASCII ενός


κεφαλαίου γράμματος από “Α” έως “F” στον αντίστοιχο αριθμό 0Α h έως
0F h του δεκαεξαδικού συστήματος (βοήθεια από την απάντηση της 17).

Αφαιρούμε το 37h. Για παράδειγμα:

‘Α’  41h – 37h  0Ah


‘B’  42h – 37h  0Bh

‘F’  46h – 37h  0Fh

You might also like