ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα Αρχιτεκτονική-Ι Ενότητα 5: H Γλώσσα ASSEMBLY Ιωάννης Έλληνας Τμήμα Η/ΥΣ
Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύπου άδειας χρήσης, η άδεια χρήσης αναφέρεται ρητώς. 2
Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού έργου του διδάσκοντα. Το έργο «Ανοικτά Ακαδημαϊκά Μαθήματα στο Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα» έχει χρηματοδοτήσει μόνο τη αναδιαμόρφωση του εκπαιδευτικού υλικού. Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους. 3
Σκοποί ενότητας Στην ενότητα αυτή εξετάζονται οι τρόποι διευθυνσιοδότησης, οι ομάδες εντολών του μικροεπεξεργαστή 8086 και ο τρόπος γραφής ενός προγράμματος σε γλώσσα Assembly. 4
Περιεχόμενα ενότητας Τρόποι διευθυνσιοδότησης Άμεσος Απευθείας Έμμεσος με καταχωρητή Με καταχωρητή βάσης και μετατόπιση Με καταχωρητή δείκτη Με καταχωρητή βάσης και δείκτη Τύποι εντολών Εντολές μεταφοράς δεδομένων Εντολές αριθμητικών πράξεων Διορθωτικές εντολές αριθμητικών πράξεων Εντολές λογικών πράξεων Εντολές ολίσθησης Εντολές περιστροφής Εντολές διακλάδωσης Εντολές διακλάδωσης με προϋποθέσεις Εντολές συμβολοσειρών Εντολές ελέγχου επεξεργαστή Πηγαίο πρόγραμμα Ψευδοεντολές Παράδειγμα διαδικασίας 5
Τρόποι Διευθυνσιοδότησης Άμμεσος (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 7
Άμεσος Παραδείγματα 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) 8
Με καταχωρητή Register Direct (1) Τα δυο ορίσματα της εντολής είναι καταχωρητές του επεξεργαστή Ο καταχωρητής πηγής και ο καταχωρητής προορισμού έχουν πάντα το ίδιο μήκος σε bits Η εντολή αποτελείται μόνο από τον κωδικό εντολής και δεν έχει άλλα bytes που να την αποτελούν Το περιεχόμενο του καταχωρητή πηγής αντιγράφεται στον καταχωρητή προορισμού (μεταφορά δεδομένων) Reg[dst] Reg[src] 9
Με καταχωρητή 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 SP 0104h 1004h BP 0105h 1005h SI 0106h 1006h DI 0107h 1007h IP=0100h Φυσική Διεύθυνση Κώδικα Φυσική Διεύθυνση Δεδομένων CS=1234h DS 4D23h SS Μεταφέρθηκαν 12440h Word 4D23h ES ΜΟV DL, AH Byte 4Dh 10
Με καταχωρητή - Παραδείγματα 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 11
Απευθείας Direct Η εντολή περιέχει μια 16bit λογική διεύθυνση Η λογική διεύθυνση συνδυάζεται με τη βάση του τμήματος που χρησιμοποιείται για να σχηματίσει τη φυσική διεύθυνση Εξ ορισμού, ο καταχωρητής τμήματος είναι ο DS Τα 8 ή 16bit δεδομένα που ορίζει ο κωδικός εντολής μεταφέρονται από ή προς τον καταχωρητή που ορίζει η εντολή Reg[r] = [ SegReg*16 + Imm + (0/1) ] 12
Απευθείας Direct AH BH CH AL BL CL 0100h 0101h 0102h Code Segment A1h 01h 10h 1000h 1001h 1002h Data Segment 08h 23h DH DL 0103h 1003h SP 0104h 1004h BP 0105h 1005h SI 0106h 1006h DI 0107h 1007h IP=0100h CS=1234h DS=5678h SS 5678h Φυσική Διεύθυνση Κώδικα 12440h + Μεταφέρθηκαν Word 2308h Φυσική Διεύθυνση Δεδομένων 57781h ES ΜΟV AX, [1001h] 13
Απευθείας Παραδείγματα MOV AX, [1000h] MOV AX, [Table] MOV [1000h], AL MOV [1000h], AX ; AL DS:[1000h], ; AH DS:[1001h] ; AL DS:[Table], ; AH DS:[Table+1] ; DS:[1000h] AL ; 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) AH BH CH 4Dh 10h AL BL CL 23h 04h 0100h 0101h 0102h Code Segment 89h 07h 1000h 1001h 1002h Data Segment 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 ES ΜΟV DL, AH ΜΟV [BX], AX Μεταφέρθηκαν Word 4D23h 16
Έμμεσος με καταχωρητή Παραδείγματα 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] 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 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] 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] MOV DX, [BX + SI] MOV DX, [BP + DI] ; 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] MOV DX, SS:[BP + DI] ; DH SS:[BP + DI + 1], ; DL SS:[BP + DI] MOV DX, [BP + SI] MOV [BP + DI], AX ; DH DS:[BP + SI + 1], DL DS:[BP + SI] ; 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 cl,dl mov si,di mov ax,1234h mov ds,ax mov [bx],ax mov bl,[si] mov [1000h],cx mov si,al mov cs,ax mov [1000h],[bx] mov ds,1234h mov ds,es 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,dx xchg al,[bx] xchg ax,[1000h] xchg [bx+si],cx xchg si,di xchg ax,bl xchg [bx],[1000h] 28
Εντολές Μεταφοράς Δεδομένων (4) 4. in acc,port ; al ή ax (διεύθυνση πόρτας) Άμεσος τρόπος ; al ή ax (dx) Έμμεσος τρόπος out port,acc in al,80h mov dx,1000h in ax,dx out 82h,ax out dx,al ; (Διεύθυνση πόρτας) al ή ax Άμεσος τρόπος ; (dx) al ή ax Έμμεσος τρόπος ; al (80h) ; al (1000h), ah (1001h) ; (82h) al, (83h) ah in bl,80h out dx,cx 29
Εντολές Μεταφοράς Δεδομένων (5) 5. lea dst,src ; Μεταφέρει τη διεύθυνση μετατόπισης σε καταχωρητή lea bx, table ; bx=1000h DS lea si, var ; si=2000h table=1000h 00h 5Fh 6. xlat ; al (ds:bx+al) var=2000h 12h 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 inc ax dec dl inc [bx] dec [1000h] ; dst dst-1 ; by default [bx]=[bx]+1 Σημείωση: 1) Δεν επηρεάζουν το CF. 2) Αν θέλουμε να αυξήσουμε/μειώσουμε λέξη στη μνήμη τότε πρέπει να χρησιμοποιούμε την εντολή σαν: inc word ptr [bx] ή dec word ptr [1000h]. 32
Εντολές Αριθμητικών Πράξεων (3) 4.cmp dst,src cmp ax,bx cmp ax,[bx] cmp [1000h],dl cmp ax,1000h 5.mul src mov al,9 mov bl,5 mul bl ; Μεταβολή μόνο των σημαιών μετά την πράξη dst-src ; Πολλαπλασιασμός μη προσημασμένων αριθμών ; al*8 bits=ax (για bytes) ή ax*16 bits=dxax (για words) ;al=09 h ;bl=05h ;ax=al*bl=09h*05h=45d=002dh mul byte ptr [1000h] ;πολλ/σμός του al με το byte στη διεύθυνση ds:1000h mul 12h 33
Εντολές Αριθμητικών Πράξεων (4) 6.div src mov ax,45 mov bl,5 div bl mov ax,46 mov bl,5 div bl ; Διαίρεση μη προσημασμένων αριθμών ; ax/8 bits=al (υπόλοιπο στον ah - για bytes) ή ; ax=dxax/16 bits (υπόλοιπο στον dx - για words) ;ax=002dh ;bl=05h ;al=2dh/05h=45d/5d=09d=09h, ah=00 ;ax=002eh ;bl=05h ;al=2dh/05h=45d/5d=09d=09h, ah=00 div 12h 34
1.daa Διορθωτικές Εντολές Αριθμητικών ; Decimal Adjust al after Addition Πράξεων (1) ; Χρησιμοποιείται μετά από πρόσθεση 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.das mov al,32h mov bl,16h sub al,bl εμφάνισης) das Διορθωτικές Εντολές Αριθμητικών Πράξεων (2) ; Decimal Adjust al after Subtraction ; Χρησιμοποιείται μετά από αφαίρεση 2 packed BCD για επαναφορά του αποτελέσματος σε BCD μορφή ; al=1ch (θέλουμε αποτέλεσμα 16h, δηλαδή δεκαδικής ; al=1ch - 0-6 ; al=16h 16 και AF=0 36
3.aaa Διορθωτικές Εντολές Αριθμητικών ; ASCII Adjust al after Addition Πράξεων (3) ; Χρησιμοποιείται μετά από πρόσθεση 2 unpacked BCD για επαναφορά του αποτελέσματος σε BCD μορφή mov ax,0109h mov bx,0105h add ax,bx εμφάνισης) aaa mov ax,15 aaa ; ax=020eh (θέλουμε αποτέλεσμα 0304h, δηλαδή δεκαδικής ; al=0eh 6 04 και ah=ah+1 ax=0304h ; ax=000fh ;ax=0105h 37
4.aas Διορθωτικές Εντολές Αριθμητικών ; ASCII Adjust al after Subtraction Πράξεων (4) ; Χρησιμοποιείται μετά από αφαίρεση 2 unpacked BCD για επαναφορά του αποτελέσματος σε BCD μορφή mov ax,0305h mov bx,0009h sub ax,bx ; ax=03fch (θέλουμε αποτέλεσμα 0206h, δηλαδή δεκαδικής εμφάνισης) aas mov ax,02ffh ; al=fch -6 06 και ah=ah-1 ax=0206h ; 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 δεκαδικής aam ; dxax=0000 002d h (θέλουμε αποτέλεσμα 0405h, δηλαδή ; εμφάνισης) ; ah=2dh/0ah=45d/10d=04h και al=05h ax=0405 39
6.aad Διορθωτικές Εντολές Αριθμητικών ; ASCII Adjust ax before Division Πράξεων (6) ; Χρησιμοποιείταιπριν τη διαίρεση 2 unpacked BCD για τη μετατροπή του ax σε δυαδικό αριθμό. ah=00h, al=ah*10+al mov ax,0207h mov bl,09h aad div bl ; ah=00h, al=02h*10+07=27d=1bh ax=001bh ; 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] test ax,bx not ax ; Προσοχή στις αμφισημίες (byte ή word?) ; ax bx = 1238h (ZF=0, CF=0, ) ; 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 rol ax,4 ;ax=3412h ;ax=2341h 44
Εντολές Περιστροφής (2) ror dst, cl ; Περιστροφή δεξιά cl φορές rcr dst, cl ; Περιστροφή δεξιά μέσω κρατούμενου cl φορές mov ax, 1234h ror ax,8 rol ax,4 ;ax=3412h ;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 ret iret ; κλήση εξυπηρέτησης διακοπής λογισμικού ; Στο σωρό αποθηκεύονται οι σημαίες (2 bytes), ο CS (2 ; bytes) και ο IP (2 bytes) της επόμενης εντολής ; Επιστροφή από την υπορουτίνα. Ανάκτηση από το σωρό των ; προηγούμενων δεδομένων και επιστροφή στην επόμενη εντολή της ; call addr. ; Επιστροφή από την υπορουτίνα εξυπηρέτησης της ; διακοπής. Ανάκτηση από το σωρό των προηγούμενων ; δεδομένων και επιστροφή στην επόμενη εντολή της 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 rep movsb) ; Επανέλαβε την εντολή μέχρι cx=0 (π.χ. 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 clc ; CF=1 ; CF=0 std ; DF=1 ενέργεια εντολής συμβολοσειράς κατά φθίνουσες διευθύνσεις cld ; DF=0 ενέργεια εντολής συμβολοσειράς κατά αύξουσες διευθύνσεις sti cli ; IF=1 ενεργοποίηση του μηχανισμού διακοπών ; 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
Βιβλιογραφία 1. ΑΡΧΙΤΕΚΤΟΝΙΚΗ ΥΠΟΛΟΓΙΣΤΩΝ-Ο επεξεργαστής 8086, Ι. Ν. Έλληνας, Π. Δ. Κεντερλής, ISBN: 978-960-930663-8, Αθήνα 2008. 2. Γ. Δ. Κόγιας, Αρχιτεκτονική, Οργάνωση και Προγραμματισμός μικροϋπολογιστών, Σύγχρονη Εκδοτική. 3. Κ. Ζ. Πεκμεστζή, Συστήματα μικροϋπολογιστών, Εκδόσεις Συμμετρία. 56
Τέλος Ενότητας