La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Backpatching. Lista de saltos de salida Todas las instrucciones tienen una lista de saltos de salida. Son instrucciones JMx a las cuales no se les ha.

Presentaciones similares


Presentación del tema: "Backpatching. Lista de saltos de salida Todas las instrucciones tienen una lista de saltos de salida. Son instrucciones JMx a las cuales no se les ha."— Transcripción de la presentación:

1 Backpatching

2 Lista de saltos de salida Todas las instrucciones tienen una lista de saltos de salida. Son instrucciones JMx a las cuales no se les ha asignado el parámetro.

3 Clase código void addInstruction(Ins,param) void addInstruction(Ins) int nextInstruction() backpatch

4 backpatch(int pos, int arg) JMxarg pos

5 backpatch(int pos) JMxnx pos nx=getNextInstruction

6 backpatch(LinkedList l, int arg) JMxarg l1l1 JMxarg l1l1 lnln JMxarg

7 backpatch(LinkedList l) JMxnx l1l1 JMxnx l1l1 lnln JMxnx nx=getNextInstruction

8 Traducción de Is Is  I ( ; I) * Al encontrar “;” sabe que acaba de traducir una instrucción que puede haber dejado saltos.

9 Traducción de while I  while ( E) do Is od I Se debe marcar el principio de la condición Al encontrar do sabe que acaba de traducir una condición que tiene como efecto dejar true o false en el tope de la pila. Se agrega una instrucción, JMPF que es el único punto de salida Despues de traducir Is hay que rellenar los saltos con el principio de la condición. Además hay que agregar otra condición de salida

10 Traducción de If else I  If ( E) then Is 1 else Is 2 fi Al encontrar then sabe que acaba de traducir una condición que tiene como efecto dejar true o false en el tope de la pila. Se agrega una instrucción, JMPF que es el salto a las instrucciones Is 2. Despues de traducir Is 1 hay que agregar un salto (todavía indeterminado) para salirse de la instrucción. Esta instrucción hay que marcarla. En este punto ya se puede llenar el salto a false Los saltos de salido son los saltos de Is 1 y Is a de más el salto quese agregó después de Is 1.

11 Ejemplo X = read(); If (x < 0) then y = -x; Else y = x; Fi; Write (x) 0get 1Asgvar0 2Pushv0 3Push0 4EQ 5JMPF? FalseJump = 5

12 Ejemplo X = read(); If (x < 0) then y = -x; Else y = x; Fi; Write (x) 0get 1Asgvar0 2Pushv0 3Push0 4LT 5JMPF? 6Pushv0 7Chgsgn 8Asgmem1 9Jmp? FalseJump = 5 EndIf = [9]

13 Ejemplo X = read(); If (x < 0) then y = -x; Else y = x; Fi; Write (x) 0get 1Asgvar0 2Pushv0 3Push0 4LT 5JMPF? 6Pushv0 7Chgsgn 8Asgmem1 9Jmp? FalseJump = 5 EndIf = [9] Backpatcj(falseJump)

14 Ejemplo X = read(); If (x < 0) then y = -x; Else y = x; Fi; Write (x) 0get 1Asgvar0 2Pushv0 3Push0 4JMPF9 5Pushv0 6Chgsgn 7Asgmem1 8Jmp? FalseJump = 4 EndIf = [8] Backpatch(falseJump)

15 Ejemplo X = read(); If (x < 0) then y = -x; Else y = x; Fi; Write (x) 0get 1Asgvar0 2Pushv0 3Push0 4JMPF9 5Pushv0 6Chgsgn 7Asgmem1 8Jmp? 9Pushv0 10Asgmem2 EndIf = [8]Backpatch(EndIf)

16 Ejemplo X = read(); If (x < 0) then y = -x; Else y = x; Fi; Write (x) 0get 1Asgvar0 2Pushv0 3Push0 4JMPF9 5Pushv0 6Chgsgn 7Asgmem1 8Jmp11 9Pushv0 10Asgmem2 11Pushv0 12put EndIf = [8]Backpatch(EndIf)


Descargar ppt "Backpatching. Lista de saltos de salida Todas las instrucciones tienen una lista de saltos de salida. Son instrucciones JMx a las cuales no se les ha."

Presentaciones similares


Anuncios Google