Upload
others
View
2
Download
0
Embed Size (px)
Citation preview
ΑΡΙΣΟΣΕΛΕΙΟ
ΠΑΝΕΠΙΣΗΜΙΟ
ΘΕΑΛΟΝΙΚΗ
ΑΝΟΙΚΣΑ
ΑΚΑΔΗΜΑΙΚΑ
ΜΑΘΗΜΑΣΑ
Σχεδίαση Γλωσσών & Μεταγλωττιστζς
Ενότητα 6: Παραγωγή κώδικα ςυμβολικήσ γλώςςασ
του επεξεργαςτή Pentium
Επ. Καθ. Π. Κατςαρόσ
Τμήμα Πληροφορικήσ
Άδειεσ Χρήςησ
• Το παρόν εκπαιδευτικό υλικό υπόκειται ςε άδειεσ χρήςησ Creative Commons.
• Για εκπαιδευτικό υλικό, όπωσ εικόνεσ, που υπόκειται ςε άλλου τφπου άδεια χρήςησ, η άδεια χρήςησ αναφζρεται ρητώσ.
Χρηματοδότηςη
• Το παρόν εκπαιδευτικό υλικό ζχει αναπτυχθεί ςτα πλαίςια του εκπαιδευτικοφ ζργου του διδάςκοντα.
• Το ζργο «Ανοικτά Ακαδημαϊκά Μαθήματα ςτο Αριςτοτζλειο Πανεπιςτήμιο Θεςςαλονίκησ» ζχει χρηματοδοτήςει μόνο τη αναδιαμόρφωςη του εκπαιδευτικοφ υλικοφ.
• Το ζργο υλοποιείται ςτο πλαίςιο του Επιχειρηςιακοφ Προγράμματοσ «Εκπαίδευςη και Δια Βίου Μάθηςη» και ςυγχρηματοδοτείται από την Ευρωπαϊκή Ζνωςη (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικοφσ πόρουσ.
ΜΑΘΗΜΑ: ΜΕΣΑΓΛΩΣΣΙΣΕ ΔΙΔΑΚΟΝΣΕ: Π. ΚΑΣΑΡΟ
Σεηάξηε, 23 Ινπιίνπ 2014 Σκ. Πιεξνθνξηθήο, Α.Π.Θ. 4
Παραγωγή κώδικα: Αρτιηεκηονική Pentium Ι 0 7 8 31
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
IP EIP
EFLAGS
καηατωρηηές
δεδομένων
καηατωρηηές
διεσθύνζεων
δείκηης ζηοίβας
(κορσθή)
βάζη
σπολογιζμού
διεσθύνζεων δείκηες
διεσθύνζεων
ζε ζτέζη με
μία βάζη
βάζεις ημημάηων
μνήμης
ΜΑΘΗΜΑ: ΜΕΣΑΓΛΩΣΣΙΣΕ ΔΙΔΑΚΟΝΣΕ: Π. ΚΑΣΑΡΟ
Σεηάξηε, 23 Ινπιίνπ 2014 Σκ. Πιεξνθνξηθήο, Α.Π.Θ. 5
Παραγωγή κώδικα: Αρτιηεκηονική Pentium ΙΙ 0
0 0 0 0
15
0 15
offset
Βάζη ηοσ Τμήμαηος Μνήμης
+
0 19
Διεύθσνζη Μνήμης
ΤΠΟΛΟΓΙΜΟ ΔΙΕΤΘΤΝΗ ΜΝΗΜΗ (real mode): ην πεξηερόκελν ηνπ θαηαρσξεηή ηκήκαηνο κεηαηνπίδεηαη ηέζζεξα bit πξνο
ηα αξηζηεξά (δει. πνιιαπιαζηάδεηαη επί 16)
ζηελ ηηκή πνπ πξνθύπηεη πξνζηίζεηαη ε απόθιηζε
εληνιέο: από ην ηκήκα πνπ ππνδεηθλύεη ν CS (code segment) ζε ζπλδπαζκό κε ηνλ IP (instruction pointer)
δηεύζπλζε εληνιήο: CS:IP
θαηαρώξεζε ή αλάγλσζε δεδνκέλσλ: από ην ηκήκα πνπ ππνδεηθλύεη ν DS (data segment)
πξάμεηο ζηνίβαο: ην ηκήκα ηεο ζηνίβαο ππνδεηθλύεηαη από ηνλ SS (stack segment)
ΜΑΘΗΜΑ: ΜΕΣΑΓΛΩΣΣΙΣΕ ΔΙΔΑΚΟΝΣΕ: Π. ΚΑΣΑΡΟ
Σεηάξηε, 23 Ινπιίνπ 2014 Σκ. Πιεξνθνξηθήο, Α.Π.Θ. 6
Παραγωγή κώδικα: Αρτιηεκηονική Pentium ΙΙI
Επηθάιπςε ζηελ εθρώξεζε ηκεκάησλ κλήκεο
050005000
14FFF
cs
SS
ES
1700
1888
1700
DS
18880
17000
26FFF
2887F
ΜΑΘΗΜΑ: ΜΕΣΑΓΛΩΣΣΙΣΕ ΔΙΔΑΚΟΝΣΕ: Π. ΚΑΣΑΡΟ
Σεηάξηε, 23 Ινπιίνπ 2014 Σκ. Πιεξνθνξηθήο, Α.Π.Θ. 7
Παραγωγή κώδικα: Αρτιηεκηονική Pentium ΙV
o EFLAGS είλαη θαηαρσξεηήο ζεκαηώλ
Οη εληνιέο ρξεζηκνπνηνύλ δεδνκέλα ηα νπνία βξίζθνληαη είηε
ζε θαηαρσξεηέο δεδνκέλσλ
είηε ζηελ ίδηα ηελ εληνιή
είηε ζηε κλήκε
Αλάινγα κε ηνλ ηύπν ηεο εληνιήο ηα δεδνκέλα κπνξεί λα είλαη
ελόο byte
κηαο ιέμεο (word)
κηαο δηπιήο ιέμεο (double)
Σνπιάρηζην έλα από ηα δεδνκέλα πξέπεη λα βξίζθεηαη ζε θαηαρσξεηή
ΜΑΘΗΜΑ: ΜΕΣΑΓΛΩΣΣΙΣΕ ΔΙΔΑΚΟΝΣΕ: Π. ΚΑΣΑΡΟ
Σεηάξηε, 23 Ινπιίνπ 2014 Σκ. Πιεξνθνξηθήο, Α.Π.Θ. 8
Παραγωγή κώδικα: Ενηολές 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
ΜΑΘΗΜΑ: ΜΕΣΑΓΛΩΣΣΙΣΕ ΔΙΔΑΚΟΝΣΕ: Π. ΚΑΣΑΡΟ
Σεηάξηε, 23 Ινπιίνπ 2014 Σκ. Πιεξνθνξηθήο, Α.Π.Θ. 10
Παραγωγή κώδικα: Ενηολές 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 δεδνκέλν.
ΜΑΘΗΜΑ: ΜΕΣΑΓΛΩΣΣΙΣΕ ΔΙΔΑΚΟΝΣΕ: Π. ΚΑΣΑΡΟ
Σεηάξηε, 23 Ινπιίνπ 2014 Σκ. Πιεξνθνξηθήο, Α.Π.Θ. 12
Παραγωγή κώδικα: Παράδειγμα
Παξαγσγή θώδηθα γηα έθθξαζε εθρώξεζεο ηηκήο
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
ΜΑΘΗΜΑ: ΜΕΣΑΓΛΩΣΣΙΣΕ ΔΙΔΑΚΟΝΣΕ: Π. ΚΑΣΑΡΟ
Σεηάξηε, 23 Ινπιίνπ 2014 Σκ. Πιεξνθνξηθήο, Α.Π.Θ. 14
Παραγωγή κώδικα: Παράδειγμα ΙΙ
{ 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
κλήζη
σποπρογράμμαηος
πέραζμα
παραμέηροσ μέζω
ηης ζηοίβας
ΑΡΙΣΟΣΕΛΕΙΟ
ΠΑΝΕΠΙΣΗΜΙΟ
ΘΕΑΛΟΝΙΚΗ
ΑΝΟΙΚΣΑ
ΑΚΑΔΗΜΑΙΚΑ
ΜΑΘΗΜΑΣΑ
Τζλος ενότητας
Επεξεργαςία: Εμμανουζλα Στάχτιαρη Θεςςαλονίκη, 21/07/2014