4. Τι είναι η διεύθυνση;
16bits 8bits Η μνήμη ενός
0000h 20h μικροϋπολογιστικού συστήματος
χωρίζεται σε μικρά τμήματα του
0001h 32h
ενός byte
0002h 30h
Κάθε byte έχει μια ξεχωριστή
16
2 =65,536 bytes
ταυτότητα που ονομάζεται
διεύθυνση
FFFEh 30h
FFFFh 36h
Οι διευθύνσεις είναι αριθμητικές
τιμές μήκους σε bit όσο το
Χάρτης μνήμης ενός τυπικού 8bit address bus (δίαυλος
μικροϋπολογιστικού συστήματος με
16bit address bus
διευθύνσεων)
5. Πρόσβαση στη μνήμη
Για να έχουμε πρόσβαση σε ένα ή
0018h 32h
περισσότερα bytes, πρέπει να
0019h 30h γνωρίζουμε τις διευθύνσεις τους
στο χάρτη μνήμης
001Ah 31 h
001Bh 30 h Στον 80x86 τηρείται η Little
Endian μορφή αποθήκευσης
δεδομένων. Τα χαμηλά bytes
Αποθήκευση κειμένου
«2010 » στη μνήμη
αποθηκεύονται σε χαμηλές
(αριθμητικά) διευθύνσεις.
001Ch 10 h
001Dh 20h
Αποθήκευση αριθμού
2010 h στη μνήμη
6. Διαχείριση μνήμης στον 80x86
Ο 80x86 είναι επεξεργαστής των 16bits με address bus
μήκους 20bits
Διευθυνσιοδοτεί 1Mbyte μνήμης (220bytes)
Πρόβλημα:
Ο καταχωρητής διεύθυνσης επόμενης εντολής (IP) έχει μήκος 16bits
και δεν μπορεί να δει ολόκληρη τη μνήμη που προσφέρει το address
bus
Λύση:
Η μνήμη διασπάται σε πολλαπλά λογικά τμήματα (segments) των
64kBytes
Κάθε τμήμα μπορεί να ξεκινά (βάση τμήματος) ανά 16 θέσεις στη
φυσική διεύθυνση της μνήμης (20bit) και να επιτρέπει στον
επεξεργαστή να δει τις επόμενες 64k θέσεις που ακολουθούν
7.
8. Διαχείριση μνήμης στον 80x86
Ο προγραμματιστής χρειάζεται να ξέρει μόνο την 16bit
λογική διεύθυνση που δείχνει μέσα στο τμήμα, χωρίς να
χρειάζεται συνήθως να γνωρίζει την 20bit φυσική διεύθυνση
Το λειτουργικό σύστημα βρίσκει ελεύθερο χώρο στη μνήμη
και εκεί τοποθετεί τα τμήματα ενός προγράμματος όταν το
φορτώνει προς εκτέλεση, κατόπιν ορίζει τους καταχωρητές
τμημάτων, IP και SP
9. Υπολογισμός φυσικής διεύθυνσης
16bit 16bit
CS
General
Purpose DS
IP=5678h
5678h Register CS=1234h
1234h
SS
File
ES
20bit 0 0 20bit
05678h + 12340h
179B8h
20bit
Φυσική Διεύθυνση
10. Τρόποι Διευθυνσιοδότησης Συνοπτικά
Άμμεσος (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]
11. Άμεσος
Immediate
Τα δεδομένα βρίσκονται μέσα στην εντολή
Ο επεξεργαστής διαβάζει τον κωδικό εντολής και τοποθετεί τα δεδομένα
που ακολουθούν στον κατάλληλο καταχωρητή
Τα δεδομένα μπορεί να έχουν μήκος 8 ή 16bit το οποίο καθορίζεται στον
κωδικό εντολής και από το μήκος του καταχωρητή προορισμού
Reg[dst] Imm
12. 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
12440 h
CS=1234h
Μεταφέρθηκαν
DS
SS
Word 2308h
ES
ΜΟV AX, 2308h
13. Άμεσος
Παραδείγματα
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)
14. Με καταχωρητή
Register Direct
Τα δυο ορίσματα της εντολής είναι καταχωρητές του
επεξεργαστή
Ο καταχωρητής πηγής και ο καταχωρητής προορισμού
έχουν πάντα το ίδιο μήκος σε bits
Η εντολή αποτελείται μόνο από τον κωδικό εντολής και δεν
έχει άλλα bytes που να την αποτελούν
Το περιεχόμενο του καταχωρητή πηγής αντιγράφεται στον
καταχωρητή προορισμού (μεταφορά δεδομένων)
Reg[dst] Reg[src]
15. 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=0101h
IP=0100h Κώδικα Δεδομένων
12441h
12440h
CS=1234h
Μεταφέρθηκαν
DS 4D23h
SS
Word 4D23h
Byte 4Dh
ES
ΜΟV DS, AH
DL, AX
16. Με καταχωρητή
Παραδείγματα
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
17. Απευθείας
Direct
Η εντολή περιέχει μια 16bit λογική διεύθυνση
Η λογική διεύθυνση συνδυάζεται με τη βάση του τμήματος που
χρησιμοποιείται για να σχηματίσει τη φυσική διεύθυνση
Εξ ορισμού, ο καταχωρητής τμήματος είναι ο DS
Τα 8 ή 16bit δεδομένα που ορίζει ο κωδικός εντολής μεταφέρονται από ή
προς τον καταχωρητή που ορίζει η εντολή
Reg[r] = [ SegReg*16 + Imm + (0/1) ]
18. 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 Κώδικα Δεδομένων
12440 h + 57781h
CS=1234h
Μεταφέρθηκαν
5678h
DS=5678h
SS
Word 2308h
ES
ΜΟV AX, [1001h]
20. Έμμεσος με καταχωρητή
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]
21. 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 Κώδικα Δεδομένων
12440 h 57784h
CS=1234h
Μεταφέρθηκαν
DS=5678h
SS
Word 4D23h
ES
ΜΟV DL, AH
ΜΟV [BX], AX
23. Με καταχωρητή βάσης & μετατόπιση
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]
25. Με καταχωρητή δείκτη
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]
27. Με καταχωρητή βάσης & δείκτη
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]
32. Εντολές Λογικών Πράξεων
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 φορές
33. Εντολές Διακλάδωσης
jmp addr
Ενδοτμηματική διακλάδωση
loop addr
CX CX-1 και πηγαίνει στο addr αν CX ≠ 0
call addr
ενδοτμηματική κλήση υπορουτίνας
int n
κλήση εξυπηρέτησης διακοπής
34. Εντολές Διακλάδωσης με προϋποθέσεις
jg/jnle
Άλμα για μεγαλύτερο
jz/jnz
Άλμα για ισότητα/ανισότητα
je/jne
Άλμα για ισότητα/ανισότητα
35. Εντολές Συμβολοσειρών
scasb/scasw
Σύγκριση byte/word που βρίσκονται σε συγκεκριμένες
θέσεις
stosb/stosw
Αποθήκευση byte/word από καταχωρητή σε συγκεκριμένη
θέση μνήμης
repne/repz
Επανάληψη όσο δεν προκύπτει ισότητα μεταξύ byte/word.
37. Οι Διακοπές στον 8086
Είναι τριών τύπων
προκαλούμενες από το υλικό
(hardware interrupts)
προκαλούμενες από τον επεξεργαστή
(processor interrupts)
προκαλούμενες από την εντολή INT n
(software interrupts)