nal).³n_de... · procedimien1o m : acción 1 call p accidn 2 halt procedio\ienio p: acción 3...

22
TEMA 9 GENERAC(ON DE (CÓDiGO F\NAL). , . COD\GO OB"JE10 Este módl.llo c.omo entrada. el prOSra.ma. en c';d'ao intermedio 'J ea.. ingormo.cio'n ccoteoidc, en lo. Ta.blo. ele .S :m b olos . O\:.l:iene como salida.. el . " E'l.is.+en 2 soluciones: .. Generar kllsuaje \:;. nurio -. , ,' ;. Genera.r lensuaJe ensn.mbla.dor. Formato de lo s ios\:roce;ones ..... MODOS DE DiRe.c.cioNAMiEÑTO :. : Re3is\::ro Indel<.ado, Re3is;tro ind.irecto : J:nde.... o.do indirecto , . , . M R C(R) *R ... \ . :/te Dirección de. memoria.. M. Ccn-l-enido del reaistro R. e + Contenido (R) . Contenido (R). <;:'ontenido , ( e + (R)) Consknte C. , . 1. CODIGOS DE MAQUINA FINAL. ', .t. lo ideal sería. obtener códi3 0 correcte de .a H: o. co..liclo.d C1.. pt"ove c..he al mc{,x imo los recursos de lo. seo, to.n eSi aente cerne sea. posi ble . ¡; l cédiao i deal la. memoria., selecciOf'lC\ las instrucciones (t.03e \o.s no 00'10 las vá.1idus), asis0a.. de la. mejor manera. establece el m"cj0l'" orden PQ.ra. lo. evaluación de insb-ucciones. Tema 9: Generación de código objeto (código final) 1/22 Cristina Bueno F. (2010) 265/290

Upload: buidien

Post on 22-Oct-2018

214 views

Category:

Documents


0 download

TRANSCRIPT

TEMA 9 GENERAC(ON DE(CÓDiGO F\NAL).

, .COD\GO OB"JE10

Este módl.llo rec~be c.omo entrada. el prOSra.ma. en c';d'ao intermedio 'J ea..

ingormo.cio'n ccoteoidc, en lo. Ta.blo. ele .S :m bolos . O\:.l:iene como salida.. el p~ra.mo..

. "

E'l.is.+en 2 soluciones:

.. Generar kllsuaje \:;. nurio -. , ,'

;. Genera.r lensuaJe ensn.mbla.dor.

Formato de los ios\:roce;ones ~

..... MODOS DE DiRe.c.cioNAMiEÑTO : .

Ab~oluto :

Re3is\::ro ~

Indel<.ado,

Re3is;tro ind.irecto :

J:nde....o.do indirecto , ., .

M

R

C(R)

*R

... qR~\ .

:/te

Dirección de. memoria.. M .

Ccn-l-enido del reaistro R.

e + Contenido (R) .

Contenido (R).

<;:'ontenido , ( e + Coo~enido (R))

Consknte C .

, . ~ ..

1. CODIGOS DE MAQUINA FINAL.

', • .t.

lo ideal sería. obtener códi30 o~eto correcte de .a H:o. co..liclo.d ~ue C1..p t"ovec..he

al mc{,ximo los recursos de lo. rnti.~uina ~ seo, to.n eSiaente cerne sea. posi ble .

¡;l cédiao ideal rno.n~(). la. memoria., selecciOf'lC\ las instrucciones (t.03e \o.s

1Y\~0ti!S. no 00'10 las vá.1idus), asis0a.. I~ r~istros de la. mejor manera. po~ble ~ establece

el m"cj0l'" orden PQ.ra. lo. evaluación de insb-ucciones.

Tema 9: Generación de código objeto (código final) 1/22

Cristina Bueno F. (2010) 265/290

\ ' r - ,Q .-..!cLo.oSin efl'lbar~o, no.y «;fe ser p,-a..c.llCOS y no~ ~orma.mo.s con un w O

~e gu.l'\cione , Un método sencillo rOo'-'" 3enero.r el c.ódiac obJeto es / ra.m coéo,

instruc<.ién de entmda. / ~enero.r siempre la mis mo.. scJida:

6CF MOV '1, ~o I LD y, Ro•AOD !, Ro

Mo" Ro/x / ST Ro, X

GCF tilO" y,Ro•MOL t, Ro

MO\l R.o , !

® 0..:=0.. 1"1G(.F MOV o..,Ro

1~

AOI) #1, Ro INe Q,

MOII Ro, el \., Mileno rnd.s egic.iente,

e soto eti~ueta..GCF J"OMP J 8F I GOTO..

® ig ,-eLop ~ .. soto eti~u~t~ .... 6CF CMP ~ yJ<. ~

BcollClielafl

® PARAM GCI= MOV 0., posidÓtl_ rneMQ,.ia. " "o, ..

® CALL suma., 3 GCFSec.uenciu. de , 11 CVt\ ada. .~

VOomos a. uso.r una. Qsisnacién de me010rtCl din~mica. mediOon+e pila. r"'rQ. los

rrois\:;ros de achvClción . -) No ho.c.e c>o.lt:a, IL..L..... de Co L _I:...:!:! - 0- ru.n'_v OtrOl.

Secuencia. de lIo.mo.dQ :

ADI)

IotO\lé

601"0

lo que ocupe. la instrucción ,

# TQ.M_ RA_ IIt1.1l\o..nt:e, SP./- IneremetlUL el puntero de cima. de pi la..

~ estQ._ il\~n-uceíÓn +~*SP - - So..II/Cl la. dirección de .-etorno,

area._ c:od.iSO- 11 o.Mo.do - - ~a.lto. a. la primero. ins\;rl.lcciÓf\ del c:ód ia o

de.l nClmado ,

Asu.mirnos <:l"'e la. pila. crece haciel a.bajo (hacia. direcciol\es c.recien+es) ~ el pu.ntero

de la. cima. de la. pilo. a.pl.l.nto.. el la direccieh de. retorno. Lo.. direccion de reto rno lo. Sl.l.ordo

en la. p..:mera. pa.labro.. del resistro d e adivación ,

Tema 9: Generación de código objeto (código final) 2/22

Cristina Bueno F. (2010) 266/290

Po.ra. ul:iLi'l.ar a.<.>i~n~ó'n dl....~rtlico. med iante pil<:\. ha.y <:tue. inic.ia/iiAr el SP en '

el pI'"C3rama. pri....c.i pcJ :

Jf SP

) ROO itRA, SO

.... Sp

"

Dir . retorno

,

"

Oir . retomoI

, ,

RA lIo.rnado

. .~ .

t.\oVE

- - Incrementa el pl.llltero de cima. de pila.,

MO'J ,. uhl._lnst.ruc.c.iDn + 411, (O)SP -- Sa.11Kl la d.jreccio~ de retorno .

e-~O\l Ro, SP - RA_Ila.mc.n+e

ACO #'2, RO

'-\0\1 ., • . RO , RO

MolI RO, (2) 5.P

GOTa eci~\letQ,

"

RO = EA del \1 a.tl\C\ote .

R~r ProSA - proSa + 1 veces .

Fbne.r. el' EA, del 1I0.WlClci o .

Sa..)to Q. la primerQ. inst rucLión del co'diao

.. . del \lo. mo.do.

E'em lo :

Proa ra.1T'K\. .ft.leoie : 8 ( b , e t el) Cód..íao iotermeclio: l1 :::: e l' d..

PClI' 0Jl"l b

Pa.ro.m t ,

~cuencio. de \IQ.mada. : Co.J\ B

- Esta..ble<:t:r la. dir. retoroo en SP-+ tnma.ño (RA~).

- G úardur el estudo de IQ. mc4¡u.ina. ( E M) .

Move ,1 b 1, o, RAB (Sp + tamai'\o ( RAfI ) -t- 2) . Si e l po.sara. po r c!irecc.ién sena... eLr"

- Move 11 t.1'1

o.. RA B ( SP + \:amaño ( RAA ) + 2 .. taM ClO O ( b».

- E~+().blecer pUn1ero de o.ccesc ( EA) .

- Esta..blec e r pl!o+ero de oe ob-el (pe) . = ) No hace. gaHa. (no ha:J do..tos eUnñ.micos).

Add. ; SP + to.ma.ño (RAA ) .

Go+o B.

Tema 9: Generación de código objeto (código final) 3/22

Cristina Bueno F. (2010) 267/290

® RETURÑ Gel See.uellcio. de reto m o.

I-lo.y c:\ue devolver el control al Ila.rna.nte .

,Se~ncio.. de tetornol

# Tcun_RA_ /I~Il\C~l\te I SP -- Resta.uro. el SP,

# TG.tn_RA_IIa.ma.nte + d.(SP)/ "D -- Alm~eno.. el vclor devueH:c dende.

L\o.l'/\cuio {' 'GOTO

1SUB,LlQ.rncul~ .'

MO"

~ esp)l. t._ t « ,

Salto 1:\ 11:\ d.ireccioó de retcrno .

1~

• I . ~ .. •

esté previsto.

~\ SP to.rnbie;' lo puede hacer el procedimiento lIama.do antes de d'Nolv~" el

col1b -ol o.l lI<lmevt+e, es decir, Q.I'l \;es del GOTO. ,'. ',' .

Si utlli~ro.mos a siana.cion esfcUico. de memor ia. .en .ll.lr .de. uno . r ila , loS'

re3i s bres de a ctiv o.ción se cc le ccrfon en 'lOnt\S ( pO,S'id coes) deier mino.da s ;de memoria. .

En ese. COSo serío.. ~

• # f

Ca.1l '100 MO\l& # edo._il\strvwó" + 2.0 I Área._ es1"+ic::o_I1Q,""a.do · J '

112 GoTO Pri",Qr"Q_ \C\,t:,rl)c.e.i.d'n_ IIcvt'l~do

120

Return :

E 'e ", lo :

Procedimient o m : Acción 1

CCLlI PAcció n 2

ha.lt

Procedimiento !1 : Ac ción G

Retu.rn

Procedi miento p: Acción 3

cal! ~

Acción ~

Ca.U p

Acción S

Re+urn

Tema 9: Generación de código objeto (código final) 4/22

Cristina Bueno F. (2010) 268/290

11 Re~isho de ClC.tiva.cioo dineÚnico u\i'i~o.ndo la. pila.:

; 011". retorno Q, 11p' .

; Inlcia.'i~1" la. pila. .

i Dir, c:eMie.n~ de " p" .

i Dir . retorno a. "p.,

11 •p .

~ \lm.

L.a.s a.c:ciones OCUPa./'I mlÍs de. une, instnlcció'tl.

; Dir . COMiel'l~ de. • ~ ••

~ Dir. comien~o de

i Fin cód1SO "p" (Rehll"n) .

¡ Fin cóc:liso • m' (¡.jQ.lt).

~ Dir. remr o a.

¡ f in c.écliao 'I«:l" (Retttrn) .

; CócliSD de. M

( 100 MOV :##: 1000, SP+8. . .10 ¡r Acción ·1

1'18 ADD .#: To.MRA m • S?

15(;. 1\40\1 # 1~2. .... SP

164 GOTO 300

112 sue #: TCl.MAAm , SP

1BO Acción 2

220 Halt

i Códiao da p

30C Acción 3

ac.¡o AD[> ~ TAlnRAp. sP

a'-lS MOV #' a6't • 'ti <:;p

aSG GOTO 500

.36~ SUB :#: T,u~RAp, SP

3T2 Acción q

'112 AtlD # To.l'/I ~Ap, SP

'i20 Mo~ :tf "3~, ,. SP

'12.8 GoTO 300

i¡36 SUB # T4mRAp I SP

q'lq A~ión S

43'1 GOTo -te (!:>p)

; CócliaD de 9t

500 Accid'n (;

Seto 60To .. (SP)

Tema 9: Generación de código objeto (código final) 5/22

Cristina Bueno F. (2010) 269/290

Procedimien1o m : Acción 1

Call p

Accidn 2

Halt

ProcediO\ienio p: Acción 3

Re.toro

Asi~nQdófl de memoria. está.-h'cn -) RA de m: Dirección 3 00

RA de p ; Direccio'll l/ DO

. .j .las o.cciones ~tM Jormaclas por rncls .de, u,oo. insl:r:ucción.

j SC),\V~ dir. reibrno de ~ M il .en . RAp .. . "

100

1~O

152.

"'0

j CóetiSO de 1'1\

. AcclÓl\. .1 ,

MO" • 160 I 'lOO

60TO 201.1 .- ; .J)i". (o ¡«nlo de ."st · : . .'

200 HQ.\t

j Códiso de p

Acción a . ) r

tDirección cA5dieo (insbucciones)

-,

, .

• l ' ~, . "

1.2. ACCESO A LAS VARiABLES.

Si hu,! a.nida.m ienlo tendremos:

"

,,) VARi ABI.ES GLOBAlES :

,.

I...a.s variables 3lo\"ales se encl.leob·Cln en la 'fOllO. de memor'~ a. continuo.ciop

elel cód.i90 (dA~cioñ esM.bco. ~ col1oc.ida) .. Paro. ca\cular la. direccio'" de .lc, vari able

~Ioba.l es necesar\O:

Direcc;ón de <:omi~n'lo de laS' vnrin..b les Sic ha.les .

- De.s:rla:w.mien+o de : la. ·va.ria.ble (\o te~o en la Tabla.' de .SímhoIc.S). .

Dirección de A = It'\kio _ '\IO.r_ ~to.ticas + despl (TS)

x ", = O

Tema 9: Generación de código objeto (código final) 6/22

Cristina Bueno F. (2010) 270/290

2) VARiA&LES LOCAI...ES :

Las variables loccJes se encuentran en el re~isb-o de a d ivn cióo de ese

procedimiento (en el RA acloa.l) . La. clirección de la varia.ble, por !:anto. se cal culo,

o, pad11" del S P ( di rección rela.hvo. 0..1 SP).

Direec.ión de )\ = S P + D-espl<l~o..miento dent ro de\ RA pum Qjc.alllar el

cornie~c de IClS va.ria1les loca les + des pl( TS)-GCO___ _ _ +" MQ\) #'0, D... I+c:lespl (5P)-

!S) VARiABLES NO LOCALES \

Las va ria bles no locoJes se encu.enb-CU'I en SUS ~ishos de aetivaáé n c.crres-

rondientes . ~rQ, CAl c u la r la dírecci&1 de la. vario.ble es necesano :

- N¡{mero ele pun+eros d(! acceso ~u.e hay ~I.le recorrer (númt>ro de sa.1tos) .

- Des;pio..~mien+o_ den-b-c del RA pa.m encontro.r el pu.n~ de a cceso ( PA) .

- De>pla:~o..m·lellto de la. vari able. denb-o de. ~ RA (Ti;;) .

6 COMOv SP, R~ i R6 = Reaisi:.ro t".emporoJ uellb'll del RoA .•ADO # 1!, RE> i RE) lO PA.

MO" • R6, RG } Repenr tanto.s I/ec~ como soJb:ls ho.ya. ~ da..r.

Abb .... ~2. fH;-MO" #0, QG

Obro, 80 nn o, :

S ólo W'\ sClI t:o : Accede oJ padre o.. tra.vés del PA

H' una. vei: en el pad.re¡ añ~de su. correspondiente

des:ph~miento.

x: = O <:>co .. M O,", . 2.( sp) I R'

MOV -# O, d'(R')-L

; R' .. PA .

Tema 9: Generación de código objeto (código final) 7/22

Cristina Bueno F. (2010) 271/290

. I

2. ALGORiTMO DE GENERAC\ON.

Este a.lacritmo se basa en ~ue eco cernes In inSorl1\Qción contenida el')

cado, re~i ~tro ~ en las d lni!c,iones en cada. inst:o.nte:

• De~",'lptor de rcsi¡\:ro,s 1 Indico.. 5!u; hay en los reaisb-os en cada j~ta.nte. Se

COl\SuJ~ cada. \le~ ~ue se neces'rt" 11" re~ist:ro nuevo. Se asúme

~ue inic.ia.\metrle todos los reaistros edCÚl veleJOS.

OesU'ip~.. c:1e direcdones ~ ! 'nc:i¡U\ , la. posición 'o conJu.nto de poSlCAooe<i doode se

eneuentrQ. e.\ I/Q.\or de uno. var ia.ble d.u.raote tOo. ejec.üeión.

EstQ. posición sercl. l11'I registro ~Io Uf}Q posicio'o de memona..

• 1 ., 1-- -~--

• . Paro. cada. operClción de códiS intermecüo h~ I.lr\o. Op.u-o.c.ión de

e.ódiSO SineJ.

Los N~ulu..dos de los c.~\Cu.\os serÓn mantenidos en los re~is1:ros

b.n+o . bempo COll\O sea. p<>s~ble. Sólo los limp'IQI'9Il'1OS sv el re~istro

se, necesi~ pa ra. otro .cd le.u.\o ¡o· s i Va o- h~r l.V\ ':io\to eJ'I e.I

c.ód.iao.

• Blo~ ¡,~co t

(B e)

C0'liunto de ifls -erucciooes de enhaciQ (c.ód.iso de. .3 d.irecciol\es) <.:lue

se ~ecutan seeueociQ)N1enre sin I\i~u.n~ biSllrc.ación (sa.H:o).

• J

Tema 9: Generación de código objeto (código final) 8/22

Cristina Bueno F. (2010) 272/290

UN ALGORITMO PARA GENERACIÓN DE CÓDIGO FINAL

El algoritmo de generación de código objeto que se propone aquí toma como entradauna secuencia de proposiciones de tres direcciones que constituyen un bloque básico (seejecutan secuencialmente). j~sb-uc.ciones

• Para cada proposición de tres direcciones de la forma x: = y op z se realizan lassiguientes operaciones:

1. Se invoca la función obtenreg (que se describe más adelante) para determinar laposición L donde se debe guardar el resultado de calcular y op z. Generalmente Lserá un registro, pero también puede ser una posición de memoria.

2. Se consulta el descriptor de direcciones para determinar y', (una de) la(s) -. B usco. el primer

posición(es) en curso de y . Si el valor de y está en ese momento en memoria yen operando ( p l"€.fe ri -

un registro, se prefiere como y' el registro. Si el valor de y no está todavía en L, b1elTlen~ en UJl ('e -

se genera la instrucción MOVy', L para colocar una copia de yen L. ~js+ro) ~ lo lIevQ o..L. Si ~a es\-a.ha en

3. Se genera la instrucción op z'. L donde z' es una posición en curso de z. De l no ho.go nada.,nuevo, se prefiere un registro a una posición de memoria si z se encuentra enambos. Se actualiza el descriptor de direcciones para indicar que x está en~ )( := ResuHndo deposición L. Si L es un registro, se actualiza su descriptor para indicar que la ope rución .contiene el valor de x, y se elimina x de todos los otros descriptores de registros. ...

4. Si los valores en curso de yo z, o ambos, no se van a usar más tarde, no estánactivos a la salida del bloque, y están en registros, se altera el descriptor deregistros para indicar que después de la ejecución de x:= y op z dichos registrosya no contendrán y o z, o ambos, respectivamente.

• Una vez que se hayan procesado todas las' proposiciones de tres direcciones delbloque básico, mediante instrucciones MO V se almacenan en memoria aquellosnombres que estén activos a la salida del bloque y que estén s610 en registros. Paraello se necesita consultar: el descriptor de registros, para determinar qué nombreshan quedado en los registros; el descriptor de direcciones, para determinar que elmismo nombre no está ya en su posición de memoria; y la información sobrevariables activas para determinar si se necesita almacenar el nombre. Si no se hacalculado la información sobre variables activas mediante el análio;is del flujo dedatos entre los bloques básicos, se debe asumir que todos los nombres definidos porel usuario están activos al fmal del bloque.

Puesto que este algoritmo recibe como entrada un solo bloque básico, habría que repetirel mismo proceso para cada uno de los bloques básicos hasta terminar el programa.

NOTAS.

Si la proposición de tres direcciones en curso tiene un operador unario, los pasos sonanálogos a los descritos, por lo que se omiten los detalles.

Tema 9: Generación de código objeto (código final) 9/22

Cristina Bueno F. (2010) 273/290

Un caso especial importante es el de la proposición de tres direcciones x: = y.

,/ Si Y está en un registro, simplemente se cambian los descriptores de registros y dedirecciones para consignar que el valor de x ahora se encuentra en el registro que...El mismo reSis­

contenía(y aún sigue conteniendo) el valor dey. (Comoes lógico, en el caso en que !:ro coo+ieoe a.

y no se vaya a usar más tarde, y no esté activoa la salida del bloque,ya no interesará " )1" e II!! ~seguir manteniéndolo en el registro). t!)

./ SiY sólo se encuentra en memoria, en principiose podría hacer constar que el valorde x está en la posición de y, pero esta opción complicaría el algoritmo porqueentonces no se podría modificar el valor de y sin modificar el valor de x. Por tanto,siy se encuentra en memoriase utiliza obtenreg para encontrarun registro en el quecargary y convertirese registro en la ubicación de x.

,/ También se puede generaruna instrucción MOJIy, x. que sería preferible si el valorde x no se fuera a usar más adelante en el bloque. Vale la pena comentar que casitodas, si no todas, las instrucciones de copia pueden eliminarse utilizando unalgoritmo de mejorade bloques y de copia y propagación.

€) Al terminar el b\~oe I si "x 1\ e "~. no están o..dill0.5J ho.y ~e hucer 2­

illStrucciones MOV paro ese . re3 isb"o : un MO\J pa ra. • JI. ' ~ ob-o MO" raro. u'á"o

To.mb¡én h ny \lue -hener cu id odo eco la Sunc\o~ obtenre~ del Po.so 1 del alsorit.rro ,

PUQo;, si piSQ.Mos el resistrtl fllC\cha.c.Gunos t C\llto .. x - COmo ..M~

Tema 9: Generación de código objeto (código final) 10/22

Cristina Bueno F. (2010) 274/290

.' .

La función obtenreg

La función obtenreg devuelve la posición L en la que guardar el valor de x para laasignación x: = y op z. La que aquí se plantea es una función sencilla que se basa en lainformación sobre qué variables se van a usar más tarde y cuáles no (esta función sepuede mejorar de forma que produzca una opción inteligente para L). Los pasos a seguirson:

1. Si el nombre y está en un registro que no contiene el valor de otros nombres(recuérdese que las instrucciones de copia como x: =y podrían hacer que un registroguardara el valor de dos o másvariables simultáneamente), e y no está activa y no seva a usar después de la ejecución de x: = y op z, entonces se devuelve el registro dey para L (es decir, se puede machacar el valor de y sin problemas). Se actualiza eldescriptor de direcciones de y para indicar que y ya no se encuentra en L.

2. Si falla (1), se devuelve como L un registro vacío (si es que hay alguno).

3. Si falla (2), y se da el caso de que o bien x se usa más tarde en el bloque, o bien opes un operador que exige un registro (por ejemplo, un operador de índice), entonceshay que:

./ encontrar un registro ocupado R (un candidato adecuado puede ser un registrocuyo dato sea el que se vaya a utilizar más tarde, o uno cuyo valor también estéen memoria),

./ almacenar el valor de R en una posición de memoria (mediante MOV R, M), sies que ese valor todayía no está en una posición de memoria apropiada M (si Rcontiene el valor de varias variables, se debe generar una instrucción MOV paracada variable que haya que almacenar),

./ actualizar el descriptor de direcciones de M,

./ Ydevolver R como la. posición L pedidaI ' . ..

(es decir, si no hay. ningún registro disponible y, por alg@ motivo, la operaciónexige ser realizada en registro, entonces habrá que vaciar alguno de los registrosocupados).

,.

4. Si x no se utiliza en el bloque, o si no se puede encontrar ningún registro ocupadoadecuado, se selecciona la posición de memoria de x como L.

Una función obtenreg más sofisticada también consideraría los usos posteriores de x_yla conmutatividad del operador op al determinar el registro que contendrá al valor de x) .

Tema 9: Generación de código objeto (código final) 11/22

Cristina Bueno F. (2010) 275/290

E'em lo:

i.:: a. + b

r:= t -ll

d := ú + r

Blo~ue bc:{sico en cócliso in\:errnedio.

.lnic'cJmen+e ; 0. , b , e, d. en meO\oria. .

. . , , . DESCRiPTOR DeSc.RiPTORP~OPOSICION o-D CODIGO 0 8 J"E"TO

REGi STROS Di~eccíoNES

Ro ~ "nelo a., b , e, el

R1 ~ vo.cío

t. := 0... +6 MO V 0.., Ro Ro ~ t 0., b , e, el

ADD b, Ro R1 ~ 'Io.c:o t:...., Ro

u.. , : a..c M QV 0.., R1 Ro~t 0., b, c. , d,

MUL e, R1 R1 ~ U. t ~ Ro , u ~ R1

R1,@ Ro ~ r 11 td Ro 0., b , e, d. rnacnaCl:l.r := t - lL SUB

~MQ,chClCQ, ,...., Ro J U~ R1 I t -+ RoL R1 ~ U ...d.:= u.+ r ADD RO ' @ L

Ro ~ ,. a.,b , c ,d I'I\Qd,aCQ

}rh ~ d. " uf R1 r ~ Ro , el ~ R" J U. ~ R1MQCI\QCA

fvlOV R1 1 d.. "', b, c , d i r

MOV Ro I r

t L\evo.Y'tlos o. memoria. .

(i) .. t." ~ 11u.U

est¿n en l"'E!9istros. la gun eión obt:enre~ me d a rá. Ro ó R para.

3ua....d o.r "r ", En este CC\So me, delr&. Ro = ) L =Ro .

En la. si3uierrte instrucción p (l~o. lo mi smo ~ en este ot.-o coso obh llre-a me

do-rá R1 - ) L " R1.

Tema 9: Generación de código objeto (código final) 12/22

Cristina Bueno F. (2010) 276/290

EXAMEN "3UI\IIO 2004 .

, r

Se tiene el siguiente fragmento de un programa fuente en 1,In lenguaje en el quy todas las variables 'son enteras y tienen que estar declar-adas. En la m áquina destino, tanto las irecciones como losvalores enteros ocupan 4 bytes.

.II y por valor, z por referencia

II x por valor

II (~)

Procedure uno ();Var a;

Procedure dos (x); /1 x por valorVar b; ..

Procedure tres (V, ref z);Var c;Begin II tres

c := 9;V:=c+V;z:=c+b;

End;Procedure cuatro (x);Var d;Begin II cuatro

b := x;Ifx <= 4 Then d:= a;

Else cuatro (x - 1);

..;

'. r . •

End;Begin II dos

b := 7;x:=x+b;cuatro (a);tres (x, a);

End;Begin II uno

a := 5;dos (a);

End;

Se pide:

., . ..

a. Realizar una traza de ejecución de este fragmento de programa, dando el diseño del Registrode Activación y la pila detallada. Supóngase que todos los temporales van en el Registro deActivación.

\lar Q. euurti'f" ~ue no ho.~ SW\ciones ~ <.lue, por to.nto, no oecesi\:o tener e.l

CCV"f'0 V~or Devuelto . ~I Puntero de Conhol tnmpocc hace Jü-Il:a. por estar umndo pila. .

1 . - Estado de la. rn<4tUinCL ::$ Direccio'n de Retorno + Cco~ido de. ~istros .

2 . - P.ul+ero de o.cceso ( PA).

3 . - Po..rá..me\:ros .

~ . - VClria.bles lOCAles.

5 - lemporo.\es .

Tema 9: Generación de código objeto (código final) 13/22

Cristina Bueno F. (2010) 277/290

RA uno

t RA dos

(EM) I>Rdos.

(P~) Apunm a.dos

(y) '}á. 21

-<(~) dir( u)

(e) e¡

Ct1)(9} <t

(h) ( ~ ) "21

( b ) (.) 4tq.:13

s

RA Me:.

RA dos

RA Cl.lCl~ro

(EM) DR cuatro

(PA) ApW'\fGl ados

( x) t¡

-< (d) 5

( l1 ~ ) 1:cierto

(h)(4) 4

(t:~) (1) 1

(1;,,) H 4\

RA u no,SP RA uno 5*. RA dos

CEM) I>R~

..c (PA)

~IEM) ORUno (EM) DRdos

(o..) , 1.3 (PA) Apvoto.. e, ,..--.. (PA) Apu.nto. o,U'IO dOs

( 1:.1)(5) 5 t< (,,) S'12- 1 (;r,) 54:ex (b) 1~4 v<

Cd.)~G) ( t 1)(:}) :¡. n.i e) O=Ja.lso

(bo) 11. (b)(,,)t¡

lb) (1) 1

® (t4)(-) "t

P¡JQ. de+oJIa.do. :

5~~~RA 11.1'0:

Oc.upa.t.¡..-t¡ =

1(0 b~tes

~ PROCE.OiMí E1ItTO Uno.

Co.r~ 5 en W\ temporal (ti) . Lue30 lo a.\rnc.ceoo, en 110.." . Ahora. o.po.reee la.

\IQ.Mo..da. dos (0..) . Pnra reaharla. pene Jo. Direccio'n de Retorno (DR) en el Re(}isfro de

Ac:+iva c.ion del procedimien-to "dos", Establece el Puntero de acceso (PA) al Re5ish-o

de. Activación de M uno 11 -~ • coloca un 5 en eJ paro:.metro ")0,". Adoa.li~ el SP . (X)

p~a. ~ control al procedimiento "dos" .

• j

Ca1"3Q. "-t en

el tempora.l t..2 ~el

Po.ro.. rea\i l;o..r la. f>O"e

® PROCEDiMiENTO d os .

un ttmpornJ (-ti) . lueso lo a.lmcte.eOn. en "b". HaLe lo. suma en

resu.ll:o.do lo 5unrda. en " )t". Aho~ aparece la Uarnadn. cUCltro(n).

la Direccio'n de Retorno (OR) el) el Regisb-o de Acn"adón de "cu a h o",

Establece e.i PunTero de a.ceeSo aJ Reaisho de Ad\l/a..cic~ de "dos" ~ coloca u.n 5 en QI

po.rcÚnet ro "lll· . AC+ua.lilO. el SP, (}()

PaSA el control 0.1 pt"oc.ed.imiento "cuatro".

Tema 9: Generación de código objeto (código final) 14/22

Cristina Bueno F. (2010) 278/290

® PROCED ¡MiENTO cl.latro .

Ca.raa. el vn.lor de .,," (un 5) en "s". Ahora ~rece la. ccmpa.r ación. Po.ra.

reo..\it.o.r\o. carcaa. 'i en un t.empcre\.\ (lz.) ~ 3ua.rdQ. el resu\1:o.do en ob"O te.rn poro. I (b) .

El resu.H:o.c1o es O ~ FalSo. SiSlJe por la rn mo, del eíse 'A- o.norn lIe~ la. llamada. a.

I1cuaho" . E\ pa.rÚmetro Ceo el ~e 1I00ma lo aJmo.cena en u.n temporaJ rorsue es uno resto, .

Po.- lo. \ICLtnada. pone lo. DireccJón de Reto..nc (DR) en el Re~iStro de Ac.tl"o.ción de ·cua.h c".

Esto.blece e\ Fltntero de a.a:eso al Reaisb"o de Adi"ncio~ de IIdos" ~ coloco. un q en el

peu-á.Oleb--o " ll. '' . Adua.lila. el SP. (X)

Posa el COr'Itrcl o.l pro~dim\e"to "'CUCl.tro " ,

(9 PROCE.DiMiENTO c.uav o .

Co.rSa. el vo.\or de "1\," (un 4) en ·b~ . Ahora aparece lo. comparo.cion . Par~

recüiw.r\o. co.rsa. l( en un tem po ra.l (b.) ~ ~ua.rda. eJ .re<iLtIt;ado en otro lempo mi (t.1).

El resulco.de es 1;;; Gerto . Si~e por la. ro.ma deJ then ~ eJec.uta Jo. si3ui ~ l) te i"Sb -uu Joo:

da. o. "dWel vnlor de "a".

B proc.e.climi~ ....bo "cua-tro " aCQba. . Devuelve el control 0.1 í'roced..i~te "lue eeho..\'ta. 1l00II"lado ('·cuaho") . Libero. el Rf\ de "GIla.hOL1

• •

® PROCEDiMiENTO c.uatro .

'Decremen+o. el SP ~ se t:ermina el procedifl1iento . Libera el R~ de Il~ua.ho· '3­

devuelve el cootrd al procedimiento <.4ue le haloía. \Iamado ("do,," It).

® PROCE t>iMieNlO dos .

Ue8~ la llamada. C\. "b-es-. ParQ reali~rlll. pone /o. Direccióo de. Reto rno (D~)

en d Re3isbo de AC+i"o.ciól1 de "~re!O~. Establece el P I,mtero ele o« eso al ReSisho de

Adivación ele "dos" ~ celece, el vo.lor 12 (,')<.") en el po.rán,etro '~ ~ d la d i.-ecc ie'n de

I~ vano..ble "Q.." en ,.~~. Actua.li~ el sP. (X)

Po.sa el conb'cl 0.1 procedimiento "tres ".

(!) PROCED',~iEÑTO treS.

Ca..rsa- Ul\ 9 en un t:el1"lpora.\ ij lo mete en "e" . Hace la suma. de lo. si~llÍ ente

inst:ruc.cion ~ coloca. el resul~dc en .,¡,n +emporu.J (l:-J . Lu~e lIe\lO. el resul \:ade o. .'~ ".

Paro.. ~\iblY la siguienle sumo, coloca el resultado en utl tempora.! (t1) ~ lo \tOlO. a.1

R I ( ' 11 ")~iStro de Adiva.don de "une" lo se ~or lo. dirección de o. .

E\ proced.imi~to "tres '1 ~ devuelve el Control al ~ue le ha-b¡'o. Ucunade ("dosU) .

liber<~ el RA de "bresu. (X)

® PROCEDiMiENTO dos.

Dec..rernem:a. el SP ~ cuando ~eOlta. se termina. el procedimiento . L;bern.. l2.I

RA ~ ,\ dos I1 ~ devuel\le el control al proced'-mierJW ~e le había llamado ( "u.ncll) .

Tema 9: Generación de código objeto (código final) 15/22

Cristina Bueno F. (2010) 279/290

G) PROCEO"tMiE.NIO uro .

Decl'"e.mente~ el SP ~ se t.e r mi 0<4 el proce.dimieo~o . libero. el Rea'LStro de Adi'lo-

ci o'o de. .. u.no u •

b. Para la sentencia marcada con (~): . 'l ' de las vari blb.I. Detallar el código objeto que se generaría, sin usar el nombre simbó lCO e as vana es

sino sus direcciones reales.

\nsh14cción : t :=e + b j e = 'J'ar'a.ble local.

b = Va.r iCl bie no loceJ .

e = PClreÚneho pol'" rege re nc;a..

MO\! 1(; (Sp). R1 i Uevo ve." a R1 .

MO\l 4(sP) I R2. ; R2 conliene 1" d.irecc.ioó del PA de RA de "dos".

ADD ,(R2.),21 .; Sumo "b" ~ "e. h .

MO~ ~1, 2t(Sp) I Llevo la suma o. ú/'\ t~rnr01'"Q./ 0:,1 )'

MOV 2i(SP); «'\2(SP) ; Copio 1" SUM a, e/\ eCl d irec.c.ióo a.1m"ceoo da .

~ f. _~. un_~a r"ll'll!.tro _por resere"cio. => Po.ra.M e:: cf.ír de Do.' .

b.2. ,¿Cóm.o ha podid~saber el Generador de Código establecer la dirección ºara b?

el ClOo.lil.o.dor Ie.'",i co se da. cúen1:a de c:¡úe ha}

~ue recorrel" ~ to..\,lC\. de sírnbolos :GCO

Al comp',lo.r , CIA " odo " uClpo.r-ece. b en c := e. l' b ,

L..-_,. Sa.lidQ d.ij- rroS .= pros_bl~ue._\lsO - proS-bl~ue - dedaruoón =

= 3 -2. = 1

L. U~o a. "b~ c.on una TS o Un PA.

b.3. Si la sentencia hubiera sido z := e + d, ¿qué habría pasado? Explicar en detalle,comentando los módulos implicados.

Al lIe~ar o. "et... I el Qna.li~dor \é ll.ico busca esh variable en lo. Ts, pues COmo dice el

enunciodo, las \/oria.loles d~ ~a.r declClrCldas . Cor-no no esitC mira en la Ts del paclre ('ldosU) ,

r- L _ .1. " TS d I b eJ (.. ") e L ~ 1...."\..DIY\O ~mrcco €S1Q..., ...."l'"Q. en la. e. a u o uno . 00"10 I..ampOCO esre, Q~IJ,.I. ~ ~enera.

u.n e.rror => No 3enera. có'diso ~Jeeuta.ble . Se puede pa.rar lo. compilClCióT) o busca.r Irl(:ú

e rre re s COo el a.na..li~o.dcr \~ico,

Tema 9: Generación de código objeto (código final) 16/22

Cristina Bueno F. (2010) 280/290

c. Escribir detalladamente (no de forma genérica) toda la información que recibe como entrada elGenerador de Código Objeto durante el tiempo en que dicho generador está procesando elprocedimiento cuat ro, especificando todas y cada una de las entradas de datos al módulo .

TS

TDS

c. ::tnle rmed io

C. Final

Lo. en-t rndn del GCo es el cód.i30 interme di o corres;poncliente

ni rroc.ed.iMiento "cua..b-o N j unto con la Ta.b1n de Símbolos.

Códiao Intermedio de "Cllal:ro 11:

cua.tro: b.lu~a.r : :: x. lusnr

b . 1USo.r : = t¡

lf ....luao.r ) l1 . luso r 3ot o else

d. luSOJ" : = a.. . luao.r

soto gin

else : h .IU3a.r : = 1

~3 . Iuan r : = JI . 1u3Clr - b .1uso.rpo.ra.M \:.3. IU3ar

ca.1I CL1Q.tro

b.\u~1U" ~ 1 PA -+ desplo.la.miento_b

gin ~ return ~ soto a lo. ¡nsb-uc.c.ión correspondiente .

Ta.l:Ilo.s de sf/'llbolos :

T S unO TQ.1\'l RA •

I.EAE MA TiPo LUGAR N _ PARAM PASo_PA~AM TAM_RA PROF. f\.)tI\T _iS

a.. 'l/o.r O

dos 1'1- pr""Oc 1 volor X 2 TSdos~

~LUSO" =Despla.i:Ql'I\iento

Tema 9: Generación de código objeto (código final) 17/22

Cristina Bueno F. (2010) 281/290

TS dos TarnRA' X ProS' 2

LEllEMA ,¡Po LUGAR. «: PARM1 PASO_PARAM 1'AM_RA PROF. PUN1'_TS ETi~_ iNicio

x p- vo..! O

b var l¡

eres o-pree 2 "oJor, reS, y 3 TShe$~

cuatro n -proc. 1 valor e 3 TScua.+ro~ cl.ta-b-o

"TI; cuatro TamRA; l Pros: 3

para los rarc(met~, IQS

c;re en ~e,mro de ejeeacioñ

los +emporo.\es todos a'untos

LE~EMA "Tipo LuGAR N-PARAM PA$O_PA~AM TAM_RA PROF. PUNT_ TS

X P- va.l O

el Vo.r l¡

b va r 8

el. va.r 12

C3 var 1G

Cotnento.rios:

'* En el ea.mpo IíPo \Joy a indicar SI es W\(l variable o AA pa m.m e tro.. Indicar ~ue

les vnriables: Son ~tera.s no tiene S~ntido po~ue tedas lo sen,

.... Necesi\:o ind ica r SI es un parámetro por valor O por regere I\cia.. Pa.ra ello h~

dos po$¡ bies soluciones :

Un mmpo nuevo -en el f"'€ indico si el pará.meho se pasa pO'" vede ... o por

re.F"cla.

Utiliear el campo TipO pooiendo paral'l1_ valor o param_regereneia.

... Va.lor de despla.i;.a.mienk;

Lo ~ he --.. - El despla~amie"\:.o en"lplel,a en O ~ es corniln

~U~~ Esvcrio.bles y les temporoJes . te me obliao' a.

t~o.. los pardmetros , las variables loco.les tten el re~isb-o de adlvac.ió".

Tener dos despla~míentQS independienies ; Ut\O para. les pa~d;~ ~

otro para. varia.bles loco.les l:l t-ernporaJes.

1r El \:o.mailo dd RA l:t la progundidad. los puedo 3uardar en la cabecera de la TS Correspor¡ ­

diente o bien en la ~,,-b-ada. correspondiente de la. T S padre. También puedo 3uClrdarlo

en los dos sitios .

"

"t Campo E\:\~_:tn¡c:io ; IndiCC\ la d;~a. de la 'prlmem inst.rcw:io'n del códiao g;nal

~ue vo~ Q. ~erar.

Tema 9: Generación de código objeto (código final) 18/22

Cristina Bueno F. (2010) 282/290

EXAMEN FiNAL FEBRERO 2005. : ,"" ,

c)

....Se tiene un lenguaje que dispone de anidamiento de funciones y procedimientos y en el Rue el pasode parámetros es siempre por valor. Se pide dibujar, con el mayor detalle, posible, la traza deejecución del programa siguiente.

1 ~~~g[x:fE~~E:ad (x, y integer): inteqer:beqin

; return x + yend ;Function sumatorio (x: integer): Integer;begin

y:= x;jf (x<O) then write ("El parámetro no debe ser negativo")

else if (x=O) then return 1else return x + sumatorio (x-l)

I end ;! begin (*principal*)

y:= cantidad (1,1);x:= sumatorio (cantidad (1,1));write ("El resultado es ", x)

end (*principal*).

EstCldo de la. ma:~u¡na.

PLlt\tero de QC'eso

Pa.rd.l"f'le~ros

Dedos Iecoles

\fa.lor devuelto

DoJo~ +empora.\es

r,

, .'

,.

'* Es~tl'\ a. d e la. I:ra.~ de. ejeeuc.ión si" desarro 1Ict.r : : ..

G) ® ®IRAppcJ B RAPPol IRA ppoJ

PA RAcCUltldad ('\,1)

B RAf'PoJ

PR RA co.n\\dad. (1,1)

RAppa.l

("1----1 RA SIUl\a.to'nJ (2)

RA 'il.lma.i:ono ( 1)~---f

RA S \11l1aiorio (O)

®

Tema 9: Generación de código objeto (código final) 19/22

Cristina Bueno F. (2010) 283/290

(Es el prosrQ.lY\Q. principa.t)

SP SP SPs SP11

~~ 3\ \EM

Pl.I l'lte ro de. Ae«SO (PA)

.......~....~v ]-g -c-c "jj

1 ... sÚ

h -e~ IX VD

2

~~.

~

'-']

"i -desu "ti..... :..n

.~ t- a~ ce~ a::11'

IJ>C

EM

PA (o.plltltl:\. a. prinópo..l)

PARÁME.TROS

(x) 2

VD Ci] ( l + 1 + 1 )

Tema 9: Generación de código objeto (código final) 20/22

Cristina Bueno F. (2010) 284/290

SP~sP<t PA prillc.iprJ

~\.

LJ..

EM

PA ((lpl.\ll+~ o priociral)

PAAAMETROS--. ("') 1~

'-- o -o ' L' c o

v e (2) (" + 1)-8 1~

... :lCII l>T

liI q: (1:.1)(0) oll('

(b,)«) o iigalso(I;~) (o) o

1I:,ll) (:) o=¡",Is.o( t s ) (1) (no S\!. ho.ce el reblm)

(t6) ("') 1 } Se. hoce ~ resb(h) (_) 2. (1 -1 )

( ta) (SLUYI(l~oño) 1<;:Ps

';¡j ~(l:q) (+) 2 ( l(i~)

EM i)PA (a.pl.\nh:l. a. pr-incipClI)

PARÁMETROS

.-... (K) t2O- .~.g O vo 1 ( return)

~~ <~ nT

~4-

~(\:1) (O) O

o: (t:¡) (d O 2 g~ls.o

(b) (O) O

(l:.~) (::) 1 !! cierto

(ts) (1) '1 l~ hnce el retum}

(t,,) (1) f (~o se hace la re~)

(tt) (-)(ta) (~W'flC.tD r\.o)

(t'l ) (+)

Tema 9: Generación de código objeto (código final) 21/22

Cristina Bueno F. (2010) 285/290

v ;

Tema 9: Generación de código objeto (código final) 22/22

Cristina Bueno F. (2010) 286/290