Σημειώσεις για τον 80x86
Τι είναι η διεύθυνση; 16bits 0000h 0001h 0002h 8bits 20h 32h 30h Η μνήμη ενός μικροϋπολογιστικού συστήματος χωρίζεται σε μικρά τμήματα του ενός byte FFFEh 30h 2 16 =65,536 bytes Κάθε byte έχει μια ξεχωριστή ταυτότητα που ονομάζεται διεύθυνση FFFFh 36h Χάρτης μνήμης ενός τυπικού 8bit μικροϋπολογιστικού συστήματος με 16bit address bus Οι διευθύνσεις είναι αριθμητικές τιμές μήκους σε bit όσο το address bus (δίαυλος διευθύνσεων)
Πρόσβαση στη μνήμη 0018h 0019h 001Ah 32h 30h 30h Για να έχουμε πρόσβαση σε ένα ή περισσότερα bytes, πρέπει να γνωρίζουμε τις διευθύνσεις τους στο χάρτη μνήμης 001Bh 36h Αποθήκευση κειμένου «2006» στη μνήμη Στον 80x86 τηρείται η Little Endian μορφή αποθήκευσης δεδομένων. Τα χαμηλά bytes αποθηκεύονται σε χαμηλές (αριθμητικά) διευθύνσεις. 001Ch 001Dh 06h 20h Αποθήκευση αριθμού 2006h στη μνήμη
Διαχείριση μνήμης στον 80x86 Ο 80x86 είναι επεξεργαστής των 16bits με address bus μήκους 20bits Διευθυνσιοδοτεί 1Mbyte μνήμης (2 20 bytes) Πρόβλημα: Ο καταχωρητής διεύθυνσης επόμενης εντολής (IP) έχει μήκος 16bits και δεν μπορεί να δει ολόκληρη τη μνήμη που προσφέρει το address bus Λύση: Η μνήμη διασπάται σε πολλαπλά λογικά τμήματα (segments) των 64kBytes Κάθε τμήμα μπορεί να ξεκινά (βάση τμήματος) ανά 16 θέσεις στη φυσική διεύθυνση της μνήμης (20bit) και να επιτρέπει στον επεξεργαστή να δει τις επόμενες 64k θέσεις που ακολουθούν
Διαχείριση μνήμης στον 80x86 Ο προγραμματιστής χρειάζεται να ξέρει μόνο την 16bit λογική διεύθυνση που δείχνει μέσα στο τμήμα, χωρίς να χρειάζεται συνήθως να γνωρίζει την 20bit φυσική διεύθυνση Το λειτουργικό σύστημα βρίσκει ελεύθερο χώρο στη μνήμη και εκεί τοποθετεί τα τμήματα ενός προγράμματος όταν το φορτώνει προς εκτέλεση, κατόπιν ορίζει τους καταχωρητές τμημάτων, IP και SP
Υπολογισμός φυσικής διεύθυνσης 16bit 16bit IP=5678h General Purpose Register File CS DS SS ES CS=1234h 20bit 0 0 20bit 05678h + 179B8h 12340h 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 SP 0104h 1004h BP 0105h 1005h SI 0106h 1006h DI 0107h 1007h IP=0100h Φυσική Διεύθυνση Κώδικα Φυσική Διεύθυνση Δεδομένων CS=1234h 12440h DS Μεταφέρθηκαν SS Word 2308h ES ΜΟV AX, 2308h
Άμεσος Παραδείγματα MOV AX, 1000h MOV AX, 320 ADD AL, 10 MOV AL, -40 ; AH 10h, AL 00h ; AH 0000 0001b (01h) ; AL 0100 0000b (40h) ; AL AL + 0Ah ; 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 SP 0104h 1004h BP 0105h 1005h SI 0106h 1006h DI 0107h 1007h IP=0100h Φυσική Διεύθυνση Κώδικα Φυσική Διεύθυνση Δεδομένων CS=1234h 12440h 12441h DS SS ES 4D23h ΜΟV DS, DL, AH AX Μεταφέρθηκαν Word Byte 4D23h 4Dh
Με καταχωρητή Παραδείγματα MOV DS, AX MOV DL, AL MOV AH, AL MOV BL, AH MOV AX, CX ; DS AX ; DL AL ; AH AL ; BL AH ; 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 SP 0104h 1004h BP 0105h 1005h SI 0106h 1006h DI 0107h 1007h IP=0100h CS=1234h DS=5678h SS ES 5678h Φυσική Διεύθυνση Κώδικα 12440h ΜΟV AX, [1001h] + Μεταφέρθηκαν Word 2308h Φυσική Διεύθυνση Δεδομένων 57781h
Απευθείας Παραδείγματα 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 SP 0104h 1004h BP 0105h 1005h SI 0106h 1006h DI 0107h 1007h IP=0100h Φυσική Διεύθυνση Κώδικα Φυσική Διεύθυνση Δεδομένων CS=1234h 12440h 57784h DS=5678h Μεταφέρθηκαν SS Word 4D23h ES ΜΟV DL, ΜΟV AH [BX], AX
Έμμεσος με καταχωρητή Παραδείγματα MOV [BX], AL MOV SS:[BX], AL MOV [DI], AX MOV AH, [SI] MOV AH, SS:[SI] MOV AX, [BP] MOV AX, DS:[BP] MOV AX, [BX] ; DS:[BX] AL ; SS:[BX] AL ; DS:[DI] AX ; AH DS:[SI] ; AH SS:[SI] ; AX SS:[BP] ; AX DS:[BP] ; 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 MOV [BX + 0Ah], AX MOV SS:[BX + FFh], CX ; DS:[BX + 0006h] AL ; DS:[BX + 000Ah] AX ; SS:[BX + 00FFh] CX MOV AH, [BP + 100] ; AH SS:[BP + 0064h] MOV AX, [BP-3] MOV AX, [BX-100] ; AX SS:[BP + FFFDh] ; 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 MOV [SI + 25000], AX MOV [SI - 68], AX ADD AL, ES:[DI + 10] ; ES:[DI + 0100h] AL ; DS:[SI + 61A8h] AL, ; DS:[SI + 61A9h] AH ; DS:[SI + FFBCh] AL, ; DS:[SI + FFBDh] AH ; 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] MOV DX, [BX + SI] MOV DX, [BP + DI] MOV DX, SS:[BP + DI] MOV DX, [BP + SI] MOV [BP + DI], AX MOV SS:[BP + DI], AX ; DH DS:[BX + DI + 1], DL DS:[BX + DI] ; DH DS:[BX + SI + 1], DL DS:[BX + SI] ; DH DS:[BP + DI + 1], DL DS:[BP + DI] ; DH SS:[BP + DI + 1], DL SS:[BP + DI] ; DH DS:[BP + SI + 1], DL DS:[BP + SI] ; DS:[BP + DI + 1] DH, DS:[BP + DI] DL ; 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