ΑΡΙΣΟΣΕΛΕΙΟ ΠΑΝΕΠΙΣΗΜΙΟ ΘΕΑΛΟΝΙΚΗ
ΑΝΟΙΚΣΑ ΑΚΑΔΗΜΑΙΚΑ ΜΑΘΗΜΑΣΑ
Σχεδίαση Γλωσσών &
Μεταγλωττιστζς
Ενότητα 6: Παραγωγή κώδικα ςυμβολικήσ γλώςςασ του επεξεργαςτή Pentium
Επ. Καθ. Π. Κατςαρόσ
Τμήμα Πληροφορικήσ
• Το παρόν εκπαιδευτικό υλικό υπόκειται ςε άδειεσ χρήςησ Creative Commons.
• Για εκπαιδευτικό υλικό, όπωσ εικόνεσ, που
υπόκειται ςε άλλου τφπου άδεια χρήςησ, η
άδεια χρήςησ αναφζρεται ρητώσ.
Χρηματοδότηςη
• Το παρόν εκπαιδευτικό υλικό ζχει αναπτυχθεί ςτα πλαίςια του εκπαιδευτικοφ ζργου του διδάςκοντα.
• Το ζργο «Ανοικτά Ακαδημαϊκά Μαθήματα ςτο Αριςτοτζλειο Πανεπιςτήμιο Θεςςαλονίκησ» ζχει χρηματοδοτήςει μόνο τη αναδιαμόρφωςη του εκπαιδευτικοφ υλικοφ.
• Το ζργο υλοποιείται ςτο πλαίςιο του Επιχειρηςιακοφ
Προγράμματοσ «Εκπαίδευςη και Δια Βίου Μάθηςη» και ςυγχρηματοδοτείται από την Ευρωπαϊκή Ζνωςη
(Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικοφσ πόρουσ.
Παραγωγή κώδικα: Αρτιηεκηονική Pentium Ι
0 7
31 8
AH BH CH DH
AL BL CL DL AX
BX CX DX SP BP SI DI CS SS DS
FLAGS 15 EAX
EBX ECX EDX ESP EBP ESI EDI
ES FS GS EIP IP
EFLAGS
καηατωρηηές δεδομένων
καηατωρηηές διεσθύνζεων
δείκηης ζηοίβας (κορσθή)
βάζη
σπολογιζμού διεσθύνζεων δείκηες
διεσθύνζεων ζε ζτέζη με μία βάζη
βάζεις ημημάηων μνήμης
ΜΑΘΗΜΑ: ΜΕΣΑΓΛΩΣΣΙΣΕ
ΔΙΔΑΚΟΝΣΕ: Π. ΚΑΣΑΡΟ
Σεηάξηε, 23 Ινπιίνπ 2014
Σκ. Πιεξνθνξηθήο, Α.Π.Θ. 5
Παραγωγή κώδικα: Αρτιηεκηονική Pentium ΙΙ
0
0 0 0 0 15
15 0
offset Βάζη ηοσ Τμήμαηος Μνήμης
+
0 19
Διεύθσνζη Μνήμης
ΤΠΟΛΟΓΙΜΟ ΔΙΕΤΘΤΝΗ ΜΝΗΜΗ (real mode):
ην πεξηερόκελν ηνπ θαηαρσξεηή ηκήκαηνο κεηαηνπίδεηαη ηέζζεξα bit πξνο ηα αξηζηεξά (δει. πνιιαπιαζηάδεηαη επί 16)
ζηελ ηηκή πνπ πξνθύπηεη πξνζηίζεηαη ε απόθιηζε
εληνιέο: από ην ηκήκα πνπ ππνδεηθλύεη ν CS (code segment) ζε ζπλδπαζκό κε ηνλ IP (instruction pointer)
δηεύζπλζε εληνιήο: CS:IP
θαηαρώξεζε ή αλάγλσζε δεδνκέλσλ: από ην ηκήκα πνπ ππνδεηθλύεη ν DS (data segment)
πξάμεηο ζηνίβαο: ην ηκήκα ηεο ζηνίβαο ππνδεηθλύεηαη από ηνλ SS (stack segment)
Παραγωγή κώδικα: Αρτιηεκηονική Pentium ΙΙI
Επηθάιπςε ζηελ εθρώξεζε ηκεκάησλ κλήκεο
0500 05000
14FFF
cs SS
ES
1700
1888
1700 DS
18880
17000 26FFF 2887F
ΜΑΘΗΜΑ: ΜΕΣΑΓΛΩΣΣΙΣΕ
ΔΙΔΑΚΟΝΣΕ: Π. ΚΑΣΑΡΟ
Σεηάξηε, 23 Ινπιίνπ 2014
Σκ. Πιεξνθνξηθήο, Α.Π.Θ. 7
Παραγωγή κώδικα: Αρτιηεκηονική Pentium ΙV
o EFLAGS είλαη θαηαρσξεηήο ζεκαηώλ
Οη εληνιέο ρξεζηκνπνηνύλ δεδνκέλα ηα νπνία βξίζθνληαη είηε
ζε θαηαρσξεηέο δεδνκέλσλ
είηε ζηελ ίδηα ηελ εληνιή
είηε ζηε κλήκε
Αλάινγα κε ηνλ ηύπν ηεο εληνιήο ηα δεδνκέλα κπνξεί λα είλαη
ελόο byte
κηαο ιέμεο (word)
κηαο δηπιήο ιέμεο (double)
Σνπιάρηζην έλα από ηα δεδνκέλα πξέπεη λα βξίζθεηαη ζε θαηαρσξεηή
Παραγωγή κώδικα: Ενηολές assembly I
MOV πξννξηζκόο, αθεηεξία
Η εληνιή MOV θαηαρσξεί ζηνλ πξννξηζκό αληίγξαθν ηνπ δεύηεξνπ
ηειεζηένπ. Αλ ν πξννξηζκόο είλαη έλαο από ηνπο θαηαρσξεηέο ηκήκαηνο (DS, ES, SS, FS, GS), ηόηε ε αθεηεξία πξέπεη λα είλαη έλαο από ηνπο θαηαρσξεηέο δεδνκέλσλ.
ADD πξννξηζκόο,αθεηεξία
Η εληνιή ADD πξνζζέηεη δύν αθεξαίνπο. Ο πξννξηζκόο δειώλεη ηνλ πξννξηζκό ηνπ απνηειέζκαηνο ηεο πξάμεο, δειαδή όηη ην άζξνηζκα θαηαρσξείηαη ζηνλ θαηαρσξεηή ή ζηε δηεύζπλζε πξννξηζκνύ.
SUB πξννξηζκόο,αθεηεξία
Η εληνιή SUB αθαηξεί ην δεύηεξν ηειεζηέν από ηνλ πξώην. Η δηαθνξά θαηαρσξείηαη ζηνλ θαηαρσξεηή ή ζηε κλήκε πξννξηζκνύ.
IMUL
Πξνζεκαζκέλνο πνιιαπιαζηαζκόο ζε δηάθνξεο κνξθέο κε έλα ή δύν νξίζκαηα.
ΜΑΘΗΜΑ: ΜΕΣΑΓΛΩΣΣΙΣΕ
ΔΙΔΑΚΟΝΣΕ: Π. ΚΑΣΑΡΟ
Σεηάξηε, 23 Ινπιίνπ 2014
Σκ. Πιεξνθνξηθήο, Α.Π.Θ. 9
Παραγωγή κώδικα: Ενηολές assembly IΙ
Η εληνιή IMUL εθηειεί πξνζεκαζκέλν πνιιαπιαζηαζκό. Κάπνηεο κνξθέο ηεο εληνιήο ρξεζηκνπνηνύλ έκκεζα ηειεζηένπο πνπ βξίζθνληαη ζε
θαηαρσξεηέο.
IDIV
Η εληνιή IDIV εθηειεί πξνζεκαζκέλε δηαίξεζε. Ο δηαηξεηένο πξέπεη λα βξίζθεηαη ζε έλαλ από ηνπο θαηαρσξεηέο AL, AX θαη EAX αλάινγα κε ηνλ ηύπν ηνπ, ελώ ην πειίθν θαη ην ππόινηπν θαηαρσξνύληαη έκκεζα ζε
ζπγθεθξηκέλνπο θαηαρσξεηέο. Ο δηαηξέηεο δίδεηαη σο r/m ηειεζηένο.
IMUL r/m8 IMUL r/m16 IMUL r/m32
AXAL*r/m byte DX: AXAX*r/m word EDX: EAXEAX*r/m dword IMUL r16, r/m16
IMUL r32, r/m32
word registerword register*r/m word dword registerdword register*r/m dword
Παραγωγή κώδικα: Ενηολές 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 sign- extension of EAX) by r/m dword. (Results: EAX=Quo, EDX=Rem)
PUSH όξηζκα
Η εληνιή PUSH κεηώλεη ην δείθηε ηεο ζηνίβαο θαηά 2 όηαλ ην όξηζκα είλαη 16 bit ή θαηά 4 όηαλ ην όξηζκα είλαη 32 bit. Η εληνιή PUSH ηνπνζεηεί ην όξηζκα ζηελ θνξπθή ηεο ζηνίβαο, ηελ νπνία δείρλεη ν δείθηεο ηεο ζηνίβαο.
ΜΑΘΗΜΑ: ΜΕΣΑΓΛΩΣΣΙΣΕ
ΔΙΔΑΚΟΝΣΕ: Π. ΚΑΣΑΡΟ
Σεηάξηε, 23 Ινπιίνπ 2014
Σκ. Πιεξνθνξηθήο, Α.Π.Θ. 11
Παραγωγή κώδικα: Ενηολές assembly IV
POP όξηζκα
Η εληνιε POP δηαγξάθεη από ηε ζηνίβα ην δεδνκέλν πνπ δείρλεη ν
θαηαρσξεηήο SP ή ESP, θαη ην απνζεθεύεη ζην όξηζκα ηεο εληνιήο, πνπ κπνξεί λα είλαη ζέζε κλήκεο, θαηαρσξεηήο ή θαηαρσξεηήο ηκήκαηνο. Ο θαηαρσξεηήο SP απμάλεηαη θαηά 2 γηα 16 bit δεδνκέλν ή θαηά 4 γηα 32 bit δεδνκέλν.
Παραγωγή κώδικα: Παράδειγμα
Παξαγσγή θώδηθα γηα έθθξαζε εθρώξεζεο ηηκήο
x=a*b+c*d-e*f
astAdd
astId (e) astAssign
astId (a) astId (c)
astId (f)
astId (x) astSub
astMult
astId (d) astId (b)
astMult astMult
ΜΑΘΗΜΑ: ΜΕΣΑΓΛΩΣΣΙΣΕ
ΔΙΔΑΚΟΝΣΕ: Π. ΚΑΣΑΡΟ
Σεηάξηε, 23 Ινπιίνπ 2014
Σκ. Πιεξνθνξηθήο, Α.Π.Θ. 13
Παραγωγή κώδικα: Παράδειγμα (ζσνέτεια)
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
Παραγωγή κώδικα: Παράδειγμα ΙΙ
{ 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
κλήζη
σποπρογράμμαηος πέραζμα
παραμέηροσ μέζω ηης ζηοίβας
ΑΡΙΣΟΣΕΛΕΙΟ ΠΑΝΕΠΙΣΗΜΙΟ ΘΕΑΛΟΝΙΚΗ
ΑΝΟΙΚΣΑ ΑΚΑΔΗΜΑΙΚΑ ΜΑΘΗΜΑΣΑ