telikoô k dika: Morfèc mhqan c se apìluth morf (absolute) Gl ssa gl ssa (assembly) Sumbolik gl ssa qamhloô epipèdou 'Allh Telikìc k dikac (i) jewrhtik c poyhc, to prìblhma thc Apì bèltistou telikoô k dika den èqei kataskeu c lôsh (undecidable) mhqan c se epanatopojet simh kai Gl ssa morf (relocatable, linkable) diasundèsimh N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 143/202
Telikìc k dikac probl mata: Epimèrouc entol n Epilog entol n thc mn mhc sto qrìno ektèleshc DiaqeÐrish (ii) P c metafr zetai k je entol tou k dika endi mesou P c metafr zontai akoloujðec tètoiwn PoÔ apojhkeôontai ta dedomèna P c gðnetai h epikoinwnða an mesa stic domikèc mon dec N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 144/202
Qarakthristik : Intel 8086 Epexergast c: Telikìc upologist c (i) sôsthma: MS-DOS Leitourgikì mn mhc: COM / tiny Montèlo Sunolik mn mh 64 K Org nwsh se èna segment Arqik dieôjunsh tou progr mmatoc h 100h gl ssa: sumbat me to Sumbolik MASM (Microsoft sumbolometafrast assembler) macro N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 145/202
(ii) Telikìc upologist c Kataqwrhtèc, megèjouc 16 bit Genik c fôshc: ax, bx, cx, dx se zeôgh twn 8 bit: ah, al, k.lp. deðktec: sp (deðkthc stoðbac) Kataqwrhtèc bp (deðkthc b shc) kai anafor c: si kai di Kataqwrhtèc tmhm twn: cs (code), ds Kataqwrhtèc ss (stack) kai es (extra) (data), kataqwrhtèc: ip (instruction EidikoÐ pointer) kai kataqwrht c shmai n (flags) N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 146/202
Telikìc upologist c (iii) DieujÔnseic: address = segment 16 + offset Morf entol c: [ label ] opname [ operand 1 [, operand 2 ]] N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 147/202
Telikìc upologist c (iv) Entolèc: mov, lea Metafor c: pr xewn: add, sub, neg, imul, Arijmhtik n cmp, cwd idiv, pr xewn: and, or, xor, not, test Logik n jmp, jz, jnz, jl, jle, jg, jge 'Almatoc: stoðbac: push, pop DiaqeÐrishc call, ret Upoprogramm twn: Pr xewn kinht c upodiastol c (x87 FPU) N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 148/202
metafor c mov destination, source Entolèc mov ax, 42 mov ax, bx mov ax, [1000h] mov ax, [si] mov ax, [si + 6] mov ax, [bp + 6] mov ax, [si + bp + 6] lea destination, source (move) (load effective address) megèjouc dedomènwn Kajorismìc mov ax, word ptr [bp + 6] mov al, byte ptr [bp + 6] N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 149/202
pr xeic add op Arijmhtikèc 1, op 2 op 1 := op 1 + op 2 sub op 1, op 2 op 1 := op 1 op 2 neg op imul op idiv op cwd op := op (dx, ax) :=ax op ax := (dx, ax) div op dx := (dx, ax) mod op cmp op 1, op 2 sôgkrine ta op 1 kai op 2 epèktash pros mou tou ax ston dx enhmèrwse tic shmaðec N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 150/202
pr xeic and op Logikèc 1, op 2 op 1 := op 1 and op 2 or op 1, op 2 op 1 := op 1 or op 2 not op op := not op xor op 1, op 2 op 1 := op 1 xor op 2 test op 1, op 2 op 1 and op 2 enhmèrwse tic shmaðec N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 151/202
lmatoc jmp address Entolèc jz address je address jnz address jne address jl address jle address jg address jge address / Ðso mhdèn mhdèn / di foro ìqi mikrìtero Ðso mikrìtero megalôtero qwrðc sunj kh megalôtero Ðso N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 152/202
stoðbac push op Entolèc sth stoðba prìsjesh sp := sp 2, [sp] :=op pop op afaðresh apì th stoðba op := [sp], sp := sp +2 H stoðba aux nei proc ta k tw, dhlad proc mikrìterec dieujônseic N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 153/202
call address Entolèc upoprogramm twn sp := sp 2, [sp] :=ip, ip := address kl sh ret epistrof ip := [sp], sp := sp +2 H tim tou ip pou topojeteðtai sth stoðba apì call eðnai h dieôjunsh thc entol c pou thn thn call akoloujeð N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 154/202
Entolèc x87 FPU (i) Eidik stoðba 8 kataqwrht n: ST(0),... ST(7) fld source fld tbyte ptr @real1 fild source fild word ptr [bp 2] fstp destination fld tbyte ptr [bp 10] fistp destination (load real & push) (load integer & push) (pop & store real) (pop & store integer) fild word ptr [bp 2] N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 155/202
Entolèc x87 FPU (ii) faddp ST(1), ST(0) fsubp ST(1), ST(0) fmulp ST(1), ST(0) fdivp ST(1), ST(0) fchs fcompp fstsw destination fstsw ax fstsw word ptr [bp 2] ST(1) :=ST(1) +ST(0) &pop ST(1) :=ST(1) ST(0) &pop ST(1) :=ST(1) ST(0) &pop ST(1) :=ST(1)/ST(0) &pop ST(0) := ST(0) ST(1) ST(0) &popboth (store x87 FPU flags) N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 156/202
DiaqeÐrish mn mhc enot twn (block structure) Dom topik dedomèna Mh Par metroi Apotèlesma kat stashc mhqan c PlhroforÐec metablhtèc Topikèc (i) drasthriopoðhshc (activation Eggr fhma record) Proswrinèc metablhtèc N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 157/202
(ii)... bp+8 Παράµετρος 1 DiaqeÐrish mn mhc Παράµετρος 2... Παράµετρος n Παράµετρος 1 Παράµετρος 2... Παράµετρος n Παράµετροι αρχή bp+6 ιεύθυνση αποτελέσµατος ιεύθυνση αποτελέσµατος bp+4 bp+2 bp bp-2 bp-4... Σύνδεσµος προσπέλασης ιεύθυνση επιστροφής Προηγούµενο bp Τοπική µεταβλητή 1 Τοπική µεταβλητή 2... Τοπική µεταβλητή m ιεύθυνση επιστροφής Προηγούµενο display Προηγούµενο bp Τοπική µεταβλητή 1 Τοπική µεταβλητή 2... Τοπική µεταβλητή m Σταθερό Τµήµα Τοπικές µεταβλητές βάση Προσωρινή µεταβλητή 1 Προσωρινή µεταβλητή 2... Προσωρινή µεταβλητή k Προσωρινή µεταβλητή 1 Προσωρινή µεταβλητή 2... Προσωρινή µεταβλητή k Προσωρινές µεταβλητές τέλος α) Σύνδεσµοι προσπέλασης β) Πίνακας δεικτών N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 158/202
(iii) Ε κύριου προγράµµατος Ε υποπρογράµµατος 1... Ε υποπρογράµµατος m DiaqeÐrish mn mhc στοίβα εκτέλεσης ελεύθερη µνήµη δυναµικό δεδοµένο k... σωρός δυναµικό δεδοµένο 1 µνήµη για αποθήκευση δεδοµένων συνολική διαθέσιµη µνήµη 64Κ µεταφρασµένος κώδικας µνήµη για αποθήκευση του κώδικα του προγράµµατος 0Κ N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 159/202
drasthriopoðhshc ìpou ta eggraf matoc eðnai topik dedomèna prìblhma an getai ston entopismì tou To eggraf matoc drasthriopoðhshc antðstoiqou pou basðzontai sto b joc fwli smatoc: LÔseic prospèlashc (access links) SÔndesmoi onom twn Prospèlash [bp + offset] Topik : Mh topik : [si + offset] o si prèpei na deðqnei sth b sh tou PÐnakec deikt n (link tables / displays) N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 160/202
leitourgðac Arq ìti h domik mon da p brðsketai 'Estw SÔndesmoi prospèlashc (i) fwliasmènh mèsa sth domik mon da q Sto ED thc p topojeteðtai èna sôndesmoc th b sh tou ED thc pio prìsfathc proc thc q kl shc thn kl sh upoprogramm twn, apaiteðtai Kat k dikac gia thn enhmèrwsh twn telikìc sundèsmwn prospèlashc N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 161/202
qr shc Trìpoc ìti zhteðtai to dedomèno a pou eðnai 'Estw SÔndesmoi prospèlashc (ii) se mia domik mon da me b joc topikì n fwli smatoc a ìti briskìmaste se mia domik 'Estw p me b joc fwli smatoc n mon da p n a AkoloujoÔme n p n a sundèsmouc prospèlashc thn prospèlash onom twn, apaiteðtai Kat k dikac gia thn ulopoðhsh twn parap nw telikìc N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 162/202
Pèrasma paramètrwn kat' axða Kl sh kat' anafor Kl sh kat' ìnoma Kl sh kat' an gkh Kl sh (call by value) (call reference) by (call name) by (call need) by kat' axða kai apotèlesma Kl sh (call value-result) by Trìpoc ulopoðhshc kajenìc N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 163/202
Dèsmeush kataqwrht n (i) 1: epilog teloumènwn pou ja Prìblhma se kataqwrhtèc apojhkeutoôn 2: epilog kataqwrht n ìpou ja Prìblhma ta teloômena apojhkeutoôn prìblhma thc bèltisthc qr shc To eðnai NP-complete, akìma kai kataqwrht n qwrðc eidikoôc periorismoôc lôsh tou an getai sthn kataskeu tou H allhlepidr sewn metaxô twn gr fou kai sto qrwmatismì autoô me tìsa metablht n ìsoi oi kataqwrhtèc qr mata N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 164/202
Dèsmeush kataqwrht n Par deigma: 1:, b, b, $1 2:, 4, a, $2 3:, $2, c, $3 4:, $1, $3, $4 5: :=, $4,, d $1 (ii) d := b*b-4*a*c $2 ax $3 $4 bx N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 165/202
prosèggish: plakìstrwsh (tiling) KalÔterh tou endi mesou k dika se temaqismìc tm mata tm ma antistoiqeð se mia entol k je Epilog entol n (i) all kak prosèggish: eniaðo sq ma Apl telikoô k dika gia k je dom tou paragwg c endi mesou k dika all qronobìra prosèggish: Bèltisth programmatismìc (dynamic dunamikìc programming) N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 166/202
Epilog entol n (ii) d := b*b-4*a*c := Par deigma: mem := + * * d bp offset d mem * mem * * + 4 mem + b b * c bp offset b + bp offset c 4 a bp offset a N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 167/202
Epilog entol n (iii) R 1 Par deigma: tiling me entolèc tou 8086 R bi mem + CONST mov R 1,[R bi +CONST] mem + bp offset d := * ax ax mem ax ax * ax bx * bx mem * ax ax bx + 4 mem + bp offset b + bp offset c ax R 1 bp offset a imul R 1 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 168/202
Epilog entol n (iv) Par deigma: tiling me entolèc tou 80386 := ax * R 1 mem ax bx mem + + * * CONST 2 ax ax bp offset d mem * mem R bi CONST 1 + 4 mem + imul R 1,[R bi +CONST 1 ],CONST 2 bp offset b + bp offset c bp offset a N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 169/202
To telikì prìgramma (i) xseg segment public code assume cs : xseg, ds : xseg, ss : xseg org 100h main proc near call near ptr program mov ax, 4C00h int 21h main endp... telikìc k dikac pou par getai... xseg ends end main Skeletìc: N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 170/202
To telikì prìgramma (ii) qrìnou ektèleshc (run-time library) Biblioj kh extrn function : proc sumboloseirèc kai kinht c Stajerèc upodiastol c @str1 db this is db 10 db an example db 0 @real1 dt 1e 10 @real2 dt 2.0 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 171/202
(i) getar(a) Bohjhtikèc routðnec mov si, word ptr [bp + 4] mov si, word ptr [si + 4]... mov si, word ptr [si + 4] updateal() } (fìrtwsh dieôjunshc ED) (n cur n a 1 forèc) sundèsmwn (enhmèrwsh prospèlashc) an (a) push bp n p <n x (b) push word ptr [bp + 4] an n p = n x mov si, word ptr [si + 4]... mov si, word ptr [si + 4] push word ptr [si + 4] (g) mov si, word ptr [bp + 4] an n p >n x } (n p n x 1 forèc) N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 172/202
(ii) load(r, a) Bohjhtikèc routðnec (fìrtwsh teloumènou) EÐdoc tou a mov R, a true mov R, 1 false mov R, 0 K dikac pou par getai mov R, ASCII(a) nil mov R, 0 mov R, size ptr [bp + offset] (b1) topik ontìthta: metablht, par metroc kat' axða, (b2) proswrin metablht topik ontìthta: par metroc kat' anafor mov si, word ptr [bp + offset] mov R, size ptr [si] N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 173/202
(iii) load(r, a) Bohjhtikèc routðnec (fìrtwsh teloumènou) (g1) EÐdoc tou a mh topik ontìthta: metablht, getar(a) mov R, size ptr [si + offset] K dikac pou par getai par metroc kat' axða, topik mh ontìthta: par metroc kat' anafor (d) (e) getar(a) mov si, word ptr [si + offset] mov R, size ptr [si] [x] load(di, x) mov R, size ptr [di] {x} loadaddr(r, x) (g2) proswrin metablht N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 174/202
(iv) loadaddr(r, a) Bohjhtikèc routðnec (fìrtwsh dieôjunshc teloumènou) EÐdoc tou a K dikac pou par getai stajer sumboloseir lea R, byte ptr a (a5) lea R, size ptr [bp + offset] (b1) topik ontìthta: par metroc kat' axða, proswrin metablht mov R, word ptr [bp + offset] (b2) topik ontìthta: (g1) par metroc kat' anafor mh topik ontìthta: par metroc kat' axða, getar(a) lea R, size ptr [si + offset] topik mh ontìthta: anafor par metroc kat' (d) getar(a) mov R, word ptr [si + offset] [x] load(r, x) (g2) proswrin metablht N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 175/202
Bohjhtikèc routðnec (v) ulopoðhsh gia tic: Parìmoia loadreal(a) store(r, a) storereal(a) name(p) endof(p) label(n) label(l) p num @p num @n @p num l RoutÐnec gia etikètec telikoô k dika: N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 176/202
(i) Paragwg k dika load(r, x) store(r, z) Tetr da load(ax, y) mov cx, size imul cx loadaddr(cx, x) add ax, cx store(ax, z) Tetr da :=, x,, z loadreal(x) storereal(z) array, x, y, z N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 177/202
(ii) load(ax, x) load(dx, y) instr ax, dx store(ax, z) loadreal(x) loadreal(y) finstr ST(1), ST(0) storereal(z) instr = add sub finstr = k.lp. faddp Tetr dec, x, y, z /, x, y, z %, x, y, z Paragwg k dika Tetr dec +, x, y, z, x, y, z load(ax, x) load(cx, y) imul cx store(ax, z) load(ax, x) cwd load(cx, y) idiv cx store(ax, z) load(ax, x) cwd load(cx, y) idiv cx store(dx, z) N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 178/202
(iii) Paragwg k dika =, x, y, z <>, x, y, z <, x, y, z >, x, y, z <=, x, y, z >=, x, y, z load(ax, x) load(dx, y) cmp ax, dx instr label(z) instr = je, jne, k.lp. loadreal(x) loadreal(y) fcompp fstsw ax test ax, value instr label(z) value kai instr apì PÐnaka 9.1 sel. 249 N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 179/202
(iv) Paragwg k dika load(al, x) or al, al jnz label(z) Tetr da ifb, x,, z jump,,, z Tetr da jmp label(z) jumpl,,, z Tetr da jmp label(z) label,,, z Tetr da label(z) : N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 180/202
(v) Paragwg k dika Tetr da unit, x,, name(x) proc near push bp mov bp, sp sub sp, size endu, x,, Tetr da endof(x) : mov sp, bp pop bp ret name(x) endp N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 181/202
(vi) Paragwg k dika Tetr da call,,, z sub sp, 2 an z eðnai diadikasða updateal() call near ptr name(z) add sp, size + 4 Tetr da ret,,, jmp endof(current) N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 182/202
(vii) Paragwg k dika Tetr da par, x, y, y = V kai x eðnai 16 bit an load(ax, x) push ax y = V kai x eðnai 8 bit an load(al, x) sub sp, 1 mov si, sp mov byte ptr [si], al N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 183/202
Paragwg k dika (vii) par, x, y, (sunèqeia) Tetr da y = V kai x eðnai 80 bit an loadreal(x) sub sp, 10 mov si, sp fstp tbyte ptr [si] y = R RET an loadaddr(si, x) push si N. PapaspÔrou, Metaglwttistèc AprÐlioc 2005 184/202