Αρχιτεκτονική-Ι Ενότητα 5: H Γλώσσα ASSEMBLY Ιωάννης Έλληνας Τμήμα Η/ΥΣ ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα
Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύπου άδειας χρήσης, η άδεια χρήσης αναφέρεται ρητώς. 2
Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού έργου του διδάσκοντα. Το έργο «Ανοικτά Ακαδημαϊκά Μαθήματα στο Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα» έχει χρηματοδοτήσει μόνο τη αναδιαμόρφωση του εκπαιδευτικού υλικού. Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους. 3
Σκοποί ενότητας Στην ενότητα αυτή εξετάζονται οι τρόποι διευθυνσιοδότησης, οι ομάδες εντολών του μικροεπεξεργαστή 8086 και ο τρόπος γραφής ενός προγράμματος σε γλώσσα Assembly. 4
Περιεχόμενα ενότητας Τρόποι διευθυνσιοδότησης Άμεσος Απευθείας Έμμεσος με καταχωρητή Με καταχωρητή βάσης και μετατόπιση Με καταχωρητή δείκτη Με καταχωρητή βάσης και δείκτη Τύποι εντολών Εντολές μεταφοράς δεδομένων Εντολές αριθμητικών πράξεων Διορθωτικές εντολές αριθμητικών πράξεων Εντολές λογικών πράξεων Εντολές ολίσθησης Εντολές περιστροφής Εντολές διακλάδωσης Εντολές διακλάδωσης με προϋποθέσεις Εντολές συμβολοσειρών Εντολές ελέγχου επεξεργαστή Πηγαίο πρόγραμμα Ψευδοεντολές Παράδειγμα διαδικασίας 5
Τρόποι Διευθυνσιοδότησης Συνοπτικά 6 Άμμεσος (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]
Τα δεδομένα βρίσκονται μέσα στην εντολή Ο επεξεργαστής διαβάζει τον κωδικό εντολής και τοποθετεί τα δεδομένα που ακολουθούν στον κατάλληλο καταχωρητή Τα δεδομένα μπορεί να έχουν μήκος 8 ή 16bit το οποίο καθορίζεται στον κωδικό εντολής και από το μήκος του καταχωρητή προορισμού Reg[dst] Imm 7 Άμεσος Immediate
Άμεσος Παραδείγματα MOV AX, 1000h ; AH 10h, AL 00h MOV AX, 320 ; AH b (01h) ; AL b (40h) ADD AL, 10 ; AL AL + 0Ah MOV AL, -40 ; AL b (D8h) 8
Με καταχωρητή Register Direct (1 ) 9 Τα δυο ορίσματα της εντολής είναι καταχωρητές του επεξεργαστή Ο καταχωρητής πηγής και ο καταχωρητής προορισμού έχουν πάντα το ίδιο μήκος σε bits Η εντολή αποτελείται μόνο από τον κωδικό εντολής και δεν έχει άλλα bytes που να την αποτελούν Το περιεχόμενο του καταχωρητή πηγής αντιγράφεται στον καταχωρητή προορισμού (μεταφορά δεδομένων) Reg[dst] Reg[src]
Με καταχωρητή Register Direct (2) 10 ΜΟV DL, AH 8Eh Word 4D23h D8h 23h 4Dh 23h 4D23h 12440h 4Dh Byte 4Dh
Με καταχωρητή - Παραδείγματα 11 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) ] 12
Απευθείας Direct 13 ΜΟV AX, [1001h] 08h 23h A1h 01h01h 10h 57781h + 01h01h 10h 5678h 08h 23h Word 2308h
Απευθείας Παραδείγματα 14 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 (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) 16 ΜΟV DL, AH 89h Word 4D23h 07h 23h 4Dh 23h ΜΟV [BX], AX 4Dh 10h 04h 57784h
Έμμεσος με καταχωρητή Παραδείγματα 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 ( έως ) Ο εξ ορισμού καταχωρητής τμήματος είναι ο 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 h] 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 h] 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 h] MOV ES:[DI + 100h], AL ; ES:[DI h] AL MOV [SI ], 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,blxchg ax,bl xchg ax,dxxchg [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 lea si, var; si=2000h 6. xlat; al (ds:bx+al) lea bx, table mov ax,01h xlat; al (1000h+01h), al=5Fh 30 00h 12h table=1000h var=2000h DS 5Fh
Εντολές Αριθμητικών Πράξεων (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 και 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 και 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= d h (θέλουμε αποτέλεσμα 0405h, δηλαδή δεκαδικής; εμφάνισης) aam; ah=2dh/0ah=45d/10d=04h και al=05h ax=
Διορθωτικές Εντολές Αριθμητικών Πράξεων (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 ( έως ) ή ενδοτμηματική ; 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, b, ’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: , Αθήνα Γ. Δ. Κόγιας, “Αρχιτεκτονική, Οργάνωση και Προγραμματισμός μικροϋπολογιστών”, Σύγχρονη Εκδοτική. 3.Κ. Ζ. Πεκμεστζή, “Συστήματα μικροϋπολογιστών”, Εκδόσεις Συμμετρία. 56
Τέλος Ενότητας