pil a abstract a

15
Máquinas de Pila Abstracta Generación de Código Intermedio

Upload: shaq-sanchez

Post on 21-Nov-2015

221 views

Category:

Documents


0 download

DESCRIPTION

Arquitectura de computadoras

TRANSCRIPT

  • Mquinas de Pila AbstractaGeneracin de Cdigo Intermedio

  • Cdigo intermedioUn programa para una mquina abstractaDos cualidadesFcil de producirReglas claras de cmo construrlaFcil de traducir al lenguaje objeto

  • Cdigo de 3 direccionesA = A*8 + B/7

    temp1 = A*8temp2 = B/7A = temp1 + temp2

    Variables temporales

  • Mquinas de PilaMemoria independiente para instrucciones y datosToda operacin es con valores de la pilaOperacionesAritmtica enteraManipulacin de pilaControl de flujo

  • Instrucciones aritmticasUna instruccin por cada operador aritmtico+, -, *, /, div, mod, etc.Ojo con -: a 8 -> a 8 -Simula evalucin de expresiones postfijas

  • Ejemplo1, 3 + 5 *Push 1Push 3Push (Pop + Pop)Push 5Push (Pop * Pop)

  • Izquierda o derechai = 5;i = i + 1;Lado derecho: valor enteroLado izquierdo: dnde almacenar resultadoi en lado izquierdo indica direccin

  • InstruccionesPush vinserta v en la pilaValD winserta valor de posicin wValI winserta direccin de wPopSaca valor de la pila:=Pop y poner en dir. PopCopyPop y Push-Push

  • da := (14*a) div 4 + 153*mEn postfijo:da 14 a * 4 div 153 m * + :=En cdigo de pilaValI daPush 14ValD a*Push 4divPush 153ValD m*+:=

  • Control de flujoOpcionesOperando da destinoJump 300Operando da posicin relativa de destinoForward 5Backward 10Destino simblico (etiquetas)Jump Ciclo

  • Instrucciones Control FlujoLabel zetiqueta la posicinLook zva a posicin etiqueta zIfFalseLook zSi Pop = 0 va a posicin etiqueta zIfTrueLook zSi Pop 0 va a posicin etiqueta zHaltdetiene ejecucin

  • if a>8 then a=10;ValD aPush 8-IfTrueLook AsignaLook ContinaLabel AsignaValI aPush 10:=Label Contina

  • while a
  • EtiquetasFuncin NewLabel()Genera nuevas etiquetasPuede inclurse en reglas semnticasTmpLabel = NewLabel()Garatiza etiquetas no repetidasLabel00001, Label00002, ..., Label03428, ...

  • Reglas SemnticasProp -> if Expr then PropLabel1 = NewLabel();Prop.t = Expr.t & NL & IfFalseLook & Label1 & NL & Prop.t & NL & Label & Label1