• Nenhum resultado encontrado

opencourses.auth | Ανοικτά Ακαδημαϊκά Μαθήματα ΑΠΘ | Σχεδίαση γλωσσών προγραμματισμού... | Παραγωγή κώδικα συμβολικής γλώσσας του επεξεργαστή Pentium

N/A
N/A
Protected

Academic year: 2023

Share "opencourses.auth | Ανοικτά Ακαδημαϊκά Μαθήματα ΑΠΘ | Σχεδίαση γλωσσών προγραμματισμού... | Παραγωγή κώδικα συμβολικής γλώσσας του επεξεργαστή Pentium"

Copied!
15
0
0

Texto

(1)

ΑΡΙ΢ΣΟΣΕΛΕΙΟ ΠΑΝΕΠΙ΢ΣΗΜΙΟ ΘΕ΢΢ΑΛΟΝΙΚΗ΢

ΑΝΟΙΚΣΑ ΑΚΑΔΗΜΑΙΚΑ ΜΑΘΗΜΑΣΑ

Σχεδίαση Γλωσσών &

Μεταγλωττιστζς

Ενότητα 6: Παραγωγή κώδικα ςυμβολικήσ γλώςςασ του επεξεργαςτή Pentium

Επ. Καθ. Π. Κατςαρόσ

Τμήμα Πληροφορικήσ

(2)

• Το παρόν εκπαιδευτικό υλικό υπόκειται ςε άδειεσ χρήςησ Creative Commons.

• Για εκπαιδευτικό υλικό, όπωσ εικόνεσ, που

υπόκειται ςε άλλου τφπου άδεια χρήςησ, η

άδεια χρήςησ αναφζρεται ρητώσ.

(3)

Χρηματοδότηςη

• Το παρόν εκπαιδευτικό υλικό ζχει αναπτυχθεί ςτα πλαίςια του εκπαιδευτικοφ ζργου του διδάςκοντα.

• Το ζργο «Ανοικτά Ακαδημαϊκά Μαθήματα ςτο Αριςτοτζλειο Πανεπιςτήμιο Θεςςαλονίκησ» ζχει χρηματοδοτήςει μόνο τη αναδιαμόρφωςη του εκπαιδευτικοφ υλικοφ.

• Το ζργο υλοποιείται ςτο πλαίςιο του Επιχειρηςιακοφ

Προγράμματοσ «Εκπαίδευςη και Δια Βίου Μάθηςη» και ςυγχρηματοδοτείται από την Ευρωπαϊκή Ζνωςη

(Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικοφσ πόρουσ.

(4)

Παραγωγή κώδικα: Αρτιηεκηονική 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

καηατωρηηές δεδομένων

καηατωρηηές διεσθύνζεων

δείκηης ζηοίβας (κορσθή)

βάζη

σπολογιζμού διεσθύνζεων δείκηες

διεσθύνζεων ζε ζτέζη με μία βάζη

βάζεις ημημάηων μνήμης

(5)

ΜΑΘΗΜΑ: ΜΕΣΑΓΛΩΣΣΙ΢ΣΕ΢

ΔΙΔΑ΢ΚΟΝΣΕ΢: Π. ΚΑΣ΢ΑΡΟ΢

Σεηάξηε, 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)

(6)

Παραγωγή κώδικα: Αρτιηεκηονική Pentium ΙΙI

Επηθάιπςε ζηελ εθρώξεζε ηκεκάησλ κλήκεο

0500 05000

14FFF

cs SS

ES

1700

1888

1700 DS

18880

17000 26FFF 2887F

(7)

ΜΑΘΗΜΑ: ΜΕΣΑΓΛΩΣΣΙ΢ΣΕ΢

ΔΙΔΑ΢ΚΟΝΣΕ΢: Π. ΚΑΣ΢ΑΡΟ΢

Σεηάξηε, 23 Ινπιίνπ 2014

Σκ. Πιεξνθνξηθήο, Α.Π.Θ. 7

Παραγωγή κώδικα: Αρτιηεκηονική Pentium ΙV

o EFLAGS είλαη θαηαρσξεηήο ζεκαηώλ

Οη εληνιέο ρξεζηκνπνηνύλ δεδνκέλα ηα νπνία βξίζθνληαη είηε

ζε θαηαρσξεηέο δεδνκέλσλ

είηε ζηελ ίδηα ηελ εληνιή

είηε ζηε κλήκε

Αλάινγα κε ηνλ ηύπν ηεο εληνιήο ηα δεδνκέλα κπνξεί λα είλαη

ελόο byte

κηαο ιέμεο (word)

κηαο δηπιήο ιέμεο (double)

Σνπιάρηζην έλα από ηα δεδνκέλα πξέπεη λα βξίζθεηαη ζε θαηαρσξεηή

(8)

Παραγωγή κώδικα: Ενηολές assembly I

MOV πξννξηζκόο, αθεηεξία

Η εληνιή MOV θαηαρσξεί ζηνλ πξννξηζκό αληίγξαθν ηνπ δεύηεξνπ

ηειεζηένπ. Αλ ν πξννξηζκόο είλαη έλαο από ηνπο θαηαρσξεηέο ηκήκαηνο (DS, ES, SS, FS, GS), ηόηε ε αθεηεξία πξέπεη λα είλαη έλαο από ηνπο θαηαρσξεηέο δεδνκέλσλ.

ADD πξννξηζκόο,αθεηεξία

Η εληνιή ADD πξνζζέηεη δύν αθεξαίνπο. Ο πξννξηζκόο δειώλεη ηνλ πξννξηζκό ηνπ απνηειέζκαηνο ηεο πξάμεο, δειαδή όηη ην άζξνηζκα θαηαρσξείηαη ζηνλ θαηαρσξεηή ή ζηε δηεύζπλζε πξννξηζκνύ.

SUB πξννξηζκόο,αθεηεξία

Η εληνιή SUB αθαηξεί ην δεύηεξν ηειεζηέν από ηνλ πξώην. Η δηαθνξά θαηαρσξείηαη ζηνλ θαηαρσξεηή ή ζηε κλήκε πξννξηζκνύ.

IMUL

Πξνζεκαζκέλνο πνιιαπιαζηαζκόο ζε δηάθνξεο κνξθέο κε έλα ή δύν νξίζκαηα.

(9)

ΜΑΘΗΜΑ: ΜΕΣΑΓΛΩΣΣΙ΢ΣΕ΢

ΔΙΔΑ΢ΚΟΝΣΕ΢: Π. ΚΑΣ΢ΑΡΟ΢

Σεηάξηε, 23 Ινπιίνπ 2014

Σκ. Πιεξνθνξηθήο, Α.Π.Θ. 9

Παραγωγή κώδικα: Ενηολές assembly IΙ

Η εληνιή IMUL εθηειεί πξνζεκαζκέλν πνιιαπιαζηαζκό. Κάπνηεο κνξθέο ηεο εληνιήο ρξεζηκνπνηνύλ έκκεζα ηειεζηένπο πνπ βξίζθνληαη ζε

θαηαρσξεηέο.

IDIV

Η εληνιή IDIV εθηειεί πξνζεκαζκέλε δηαίξεζε. Ο δηαηξεηένο πξέπεη λα βξίζθεηαη ζε έλαλ από ηνπο θαηαρσξεηέο AL, AX θαη EAX αλάινγα κε ηνλ ηύπν ηνπ, ελώ ην πειίθν θαη ην ππόινηπν θαηαρσξνύληαη έκκεζα ζε

ζπγθεθξηκέλνπο θαηαρσξεηέο. Ο δηαηξέηεο δίδεηαη σο r/m ηειεζηένο.

IMUL r/m8 IMUL r/m16 IMUL r/m32

AXAL*r/m byte DX: AXAX*r/m word EDX: EAXEAX*r/m dword IMUL r16, r/m16

IMUL r32, r/m32

word registerword register*r/m word dword registerdword register*r/m dword

(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 ηνπνζεηεί ην όξηζκα ζηελ θνξπθή ηεο ζηνίβαο, ηελ νπνία δείρλεη ν δείθηεο ηεο ζηνίβαο.

(11)

ΜΑΘΗΜΑ: ΜΕΣΑΓΛΩΣΣΙ΢ΣΕ΢

ΔΙΔΑ΢ΚΟΝΣΕ΢: Π. ΚΑΣ΢ΑΡΟ΢

Σεηάξηε, 23 Ινπιίνπ 2014

Σκ. Πιεξνθνξηθήο, Α.Π.Θ. 11

Παραγωγή κώδικα: Ενηολές assembly IV

POP όξηζκα

Η εληνιε POP δηαγξάθεη από ηε ζηνίβα ην δεδνκέλν πνπ δείρλεη ν

θαηαρσξεηήο SP ή ESP, θαη ην απνζεθεύεη ζην όξηζκα ηεο εληνιήο, πνπ κπνξεί λα είλαη ζέζε κλήκεο, θαηαρσξεηήο ή θαηαρσξεηήο ηκήκαηνο. Ο θαηαρσξεηήο SP απμάλεηαη θαηά 2 γηα 16 bit δεδνκέλν ή θαηά 4 γηα 32 bit δεδνκέλν.

(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

(13)

ΜΑΘΗΜΑ: ΜΕΣΑΓΛΩΣΣΙ΢ΣΕ΢

ΔΙΔΑ΢ΚΟΝΣΕ΢: Π. ΚΑΣ΢ΑΡΟ΢

Σεηάξηε, 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

(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

κλήζη

σποπρογράμμαηος πέραζμα

παραμέηροσ μέζω ηης ζηοίβας

(15)

ΑΡΙ΢ΣΟΣΕΛΕΙΟ ΠΑΝΕΠΙ΢ΣΗΜΙΟ ΘΕ΢΢ΑΛΟΝΙΚΗ΢

ΑΝΟΙΚΣΑ ΑΚΑΔΗΜΑΙΚΑ ΜΑΘΗΜΑΣΑ

Τζλος ενότητας

Επεξεργαςία: Εμμανουζλα Στάχτιαρη

Θεςςαλονίκη, 21/07/2014

Referências

Documentos relacionados

Δηαθξίλνπκε ηξεηο πηζαλέο ελέξγεηεο αλάλεςεο:  ηελ αθαίξεζε ηνπ ζπκβόινπ Υ από ηε ζηνίβα pop,  ην πξνζπέξαζκα ελόο αξηζκνύ ζπκβόισλ εηζόδνπ, κέρξη ηνλ εληνπηζκό κνλάδαο, πνπ κπνξεί