ΑΡΙΣΟΣΕΛΕΙΟ ΠΑΝΕΠΙΣΗΜΙΟ ΘΕΑΛΟΝΙΚΗ ΑΝΟΙΚΣΑ ΑΚΑΔΗΜΑΙΚΑ ΜΑΘΗΜΑΣΑ Σχεδίαση Γλωσσών & Μεταγλωττιστζς Ενότητα 6: Παραγωγή κώδικα ςυμβολικήσ γλώςςασ του επεξεργαςτή Pentium Επ. Καθ. Π. Κατςαρόσ Τμήμα Πληροφορικήσ
Άδειεσ Χρήςησ Το παρόν εκπαιδευτικό υλικό υπόκειται ςε άδειεσ χρήςησ Creative Commons. Για εκπαιδευτικό υλικό, όπωσ εικόνεσ, που υπόκειται ςε άλλου τφπου άδεια χρήςησ, η άδεια χρήςησ αναφζρεται ρητώσ.
Χρηματοδότηςη Το παρόν εκπαιδευτικό υλικό ζχει αναπτυχθεί ςτα πλαίςια του εκπαιδευτικοφ ζργου του διδάςκοντα. Το ζργο «Ανοικτά Ακαδημαϊκά Μαθήματα ςτο Αριςτοτζλειο Πανεπιςτήμιο Θεςςαλονίκησ» ζχει χρηματοδοτήςει μόνο τη αναδιαμόρφωςη του εκπαιδευτικοφ υλικοφ. Το ζργο υλοποιείται ςτο πλαίςιο του Επιχειρηςιακοφ Προγράμματοσ «Εκπαίδευςη και Δια Βίου Μάθηςη» και ςυγχρηματοδοτείται από την Ευρωπαϊκή Ζνωςη (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικοφσ πόρουσ.
Παραγωγή κώδικα: Αρτιηεκηονική Pentium Ι 31 15 8 7 0 EAX EBX ECX AX BX CX AH BH CH AL BL CL καηατωρηηές δεδομένων EDX ESP EBP ESI DX SP BP SI DH DL δείκηης ζηοίβας (κορσθή) καηατωρηηές διεσθύνζεων EDI δείκηες διεσθύνζεων ζε ζτέζη με μία βάζη DI CS SS DS ES FS βάζη σπολογιζμού διεσθύνζεων βάζεις ημημάηων μνήμης GS EIP IP EFLAGS FLAGS 4
Παραγωγή κώδικα: Αρτιηεκηονική Pentium ΙΙ 15 0 Βάζη ηοσ Τμήμαηος Μνήμης 0 0 0 0 15 0 + offset 19 0 Διεύθσνζη Μνήμης ΤΠΟΛΟΓΙΜΟ ΔΙΕΤΘΤΝΗ ΜΝΗΜΗ (real mode): ην πεξηερόκελν ηνπ θαηαρσξεηή ηκήκαηνο κεηαηνπίδεηαη ηέζζεξα bit πξνο ηα αξηζηεξά (δει. πνιιαπιαζηάδεηαη επί 16) ζηελ ηηκή πνπ πξνθύπηεη πξνζηίζεηαη ε απόθιηζε εληνιέο: από ην ηκήκα πνπ ππνδεηθλύεη ν CS (code segment) ζε ζπλδπαζκό κε ηνλ IP (instruction pointer) δηεύζπλζε εληνιήο: CS:IP θαηαρώξεζε ή αλάγλσζε δεδνκέλσλ: από ην ηκήκα πνπ ππνδεηθλύεη ν DS (data segment) πξάμεηο ζηνίβαο: ην ηκήκα ηεο ζηνίβαο ππνδεηθλύεηαη από ηνλ SS (stack Σκ. segment) Πιεξνθνξηθήο, Α.Π.Θ. Σεηάξηε, 23 Ινπιίνπ 2014 5
Παραγωγή κώδικα: Αρτιηεκηονική Pentium ΙΙI 2887F DS 1700 26FFF SS 1888 18880 ES 1700 17000 14FFF cs 0500 05000 Επηθάιπςε ζηελ εθρώξεζε ηκεκάησλ κλήκεο 6
Παραγωγή κώδικα: Αρτιηεκηονική Pentium ΙV o EFLAGS είλαη θαηαρσξεηήο ζεκαηώλ Οη εληνιέο ρξεζηκνπνηνύλ δεδνκέλα ηα νπνία βξίζθνληαη είηε ζε θαηαρσξεηέο δεδνκέλσλ είηε ζηελ ίδηα ηελ εληνιή είηε ζηε κλήκε Αλάινγα κε ηνλ ηύπν ηεο εληνιήο ηα δεδνκέλα κπνξεί λα είλαη ελόο byte κηαο ιέμεο (word) κηαο δηπιήο ιέμεο (double) Σνπιάρηζην έλα από ηα δεδνκέλα πξέπεη λα βξίζθεηαη ζε θαηαρσξεηή 7
Παραγωγή κώδικα: Ενηολές assembly I MOV πξννξηζκόο, αθεηεξία Η εληνιή MOV θαηαρσξεί ζηνλ πξννξηζκό αληίγξαθν ηνπ δεύηεξνπ ηειεζηένπ. Αλ ν πξννξηζκόο είλαη έλαο από ηνπο θαηαρσξεηέο ηκήκαηνο (DS, ES, SS, FS, GS), ηόηε ε αθεηεξία πξέπεη λα είλαη έλαο από ηνπο θαηαρσξεηέο δεδνκέλσλ. ADD πξννξηζκόο,αθεηεξία Η εληνιή ADD πξνζζέηεη δύν αθεξαίνπο. Ο πξννξηζκόο δειώλεη ηνλ πξννξηζκό ηνπ απνηειέζκαηνο ηεο πξάμεο, δειαδή όηη ην άζξνηζκα θαηαρσξείηαη ζηνλ θαηαρσξεηή ή ζηε δηεύζπλζε πξννξηζκνύ. SUB πξννξηζκόο,αθεηεξία Η εληνιή SUB αθαηξεί ην δεύηεξν ηειεζηέν από ηνλ πξώην. Η δηαθνξά θαηαρσξείηαη ζηνλ θαηαρσξεηή ή ζηε κλήκε πξννξηζκνύ. IMUL Πξνζεκαζκέλνο πνιιαπιαζηαζκόο ζε δηάθνξεο κνξθέο κε έλα ή δύν νξίζκαηα. 8
Παραγωγή κώδικα: Ενηολές assembly IΙ Η εληνιή IMUL εθηειεί πξνζεκαζκέλν πνιιαπιαζηαζκό. Κάπνηεο κνξθέο ηεο εληνιήο ρξεζηκνπνηνύλ έκκεζα ηειεζηένπο πνπ βξίζθνληαη ζε θαηαρσξεηέο. IMUL r/m8 IMUL r/m16 IMUL r/m32 IMUL r16, r/m16 IMUL r32, r/m32 AX AL*r/m byte DX: AX AX*r/m word EDX: EAX EAX*r/m dword word register word register*r/m word dword register dword register*r/m dword IDIV Η εληνιή IDIV εθηειεί πξνζεκαζκέλε δηαίξεζε. Ο δηαηξεηένο πξέπεη λα βξίζθεηαη ζε έλαλ από ηνπο θαηαρσξεηέο AL, AX θαη EAX αλάινγα κε ηνλ ηύπν ηνπ, ελώ ην πειίθν θαη ην ππόινηπν θαηαρσξνύληαη έκκεζα ζε ζπγθεθξηκέλνπο θαηαρσξεηέο. Ο δηαηξέηεο δίδεηαη σο r/m ηειεζηένο. 9
Παραγωγή κώδικα: Ενηολές assembly IΙI IDIV AL, r/m8 IDIV AX, r/m16 IDIV EAX, r/m32 Signed divide AX (where AH must contain sign-extension of AL) by r/m byte. (Results: AL=Quo, AH=Rem) Signed divide DX:AX (where DX must contain sign-extension of AX) by r/m word. (Results: AX=Quo, DX=Rem) Signed divide EDX:EAX (where EDX must contain signextension of EAX) by r/m dword. (Results: EAX=Quo, EDX=Rem) PUSH όξηζκα Η εληνιή PUSH κεηώλεη ην δείθηε ηεο ζηνίβαο θαηά 2 όηαλ ην όξηζκα είλαη 16 bit ή θαηά 4 όηαλ ην όξηζκα είλαη 32 bit. Η εληνιή PUSH ηνπνζεηεί ην όξηζκα ζηελ θνξπθή ηεο ζηνίβαο, ηελ νπνία δείρλεη ν δείθηεο ηεο ζηνίβαο. 10
Παραγωγή κώδικα: Ενηολές assembly IV POP όξηζκα Η εληνιε POP δηαγξάθεη από ηε ζηνίβα ην δεδνκέλν πνπ δείρλεη ν θαηαρσξεηήο SP ή ESP, θαη ην απνζεθεύεη ζην όξηζκα ηεο εληνιήο, πνπ κπνξεί λα είλαη ζέζε κλήκεο, θαηαρσξεηήο ή θαηαρσξεηήο ηκήκαηνο. Ο θαηαρσξεηήο SP απμάλεηαη θαηά 2 γηα 16 bit δεδνκέλν ή θαηά 4 γηα 32 bit δεδνκέλν. 11
Παραγωγή κώδικα: Παράδειγμα Παξαγσγή θώδηθα γηα έθθξαζε εθρώξεζεο ηηκήο x=a*b+c*d-e*f astassign astid (x) astsub astadd astmult astmult astmult astid (e) astid (f) astid (a) astid (b) astid (c) astid (d) 12
Παραγωγή κώδικα: Παράδειγμα (ζσνέτεια) mov ax,_a imul _b push ax mov ax,_c imul _d pop dx add dx,ax push dx mov ax,_e imul _f pop dx sub dx,ax mov _x,dx 13
Παραγωγή κώδικα: Παράδειγμα ΙΙ { int i,j; } i=2; j=-6; print(i*j); πέραζμα παραμέηροσ μέζω ηης ζηοίβας κλήζη σποπρογράμμαηος.model small.stack 100h.586 ; The Data Segment.data _i sword? _j sword? ; The Code Segment.code extrn _print_int:proc extrn _read_int:proc main proc mov ax,@data mov ds,ax mov _i,2 mov _j,-6 mov ax,_i imul _j push ax call _print_int pop cx ; Return to the Operating System mov ax,4c00h int 21h main endp end main 14
ΑΡΙΣΟΣΕΛΕΙΟ ΠΑΝΕΠΙΣΗΜΙΟ ΘΕΑΛΟΝΙΚΗ ΑΝΟΙΚΣΑ ΑΚΑΔΗΜΑΙΚΑ ΜΑΘΗΜΑΣΑ Τζλος ενότητας Επεξεργαςία: Εμμανουζλα Στάχτιαρη Θεςςαλονίκη, 21/07/2014