LDI R16, 0x12 %&$?
LDI R17, 0x34 %&$?
PUSH R16
PUSH R17 %&$?
%&$?
POP R3
%&$?
POP R3
%&$?
%&$? [0X03]
%&$?
%&$? [0X11]
%&$?
[SPH.SPL]
%&$? [0X10]
LDI R16, 0x12 %&$?
LDI R17, 0x34 %&$?
PUSH R16
PUSH R17 %&$?
%&$?
POP R3
%&$?
POP R3
%&$?
%&$? [0X03]
%&$?
%&$? [0X11]
%&$?
[SPH.SPL]
0x12 [0X10]
LDI R16, 0x12 %&$?
LDI R17, 0x34 %&$?
PUSH R16
PUSH R17 %&$?
%&$?
POP R3
%&$?
POP R3
%&$?
%&$? [0X03]
%&$?
0x34 [0X11]
%&$?
[SPH.SPL]
0x12 [0X10]
LDI R16, 0x12 %&$?
LDI R17, 0x34 %&$?
PUSH R16
PUSH R17 %&$?
%&$?
POP R3
%&$?
POP R3
%&$?
%&$? [0X03]
%&$? [SPH.SPL]
0x34 [0X11]
0x12
0x12 [0X10]
LDI R16, 0x12 %&$?
LDI R17, 0x34 %&$?
PUSH R16
PUSH R17 %&$?
%&$?
POP R3
%&$?
POP R3
%&$? [SPH.SPL]
%&$? [0X03]
0x34
0x34 [0X11]
0x12
0x12 [0X10]
LDI R16, 0x12 %&$?
LDI R17, 0x34 %&$?
PUSH R16
PUSH R17 %&$?
%&$?
POP R3
%&$?
POP R3
%&$?
0x34 [0X03]
0x34 [SPH.SPL]
0x34 [0X11]
0x12
0x12 [0X10]
LDI R16, 0x12 %&$?
LDI R17, 0x34 %&$?
PUSH R16
PUSH R17 %&$?
%&$?
POP R3
%&$?
POP R3
%&$?
0x12 [0X03]
0x34
0x34 [0X11]
0x12 [SPH.SPL]
0x12 [0X10]
Void main(void)
{
…
R3 =mirutina(0x12, 0x34);
…
}
mirutina(p1:char, p2:char)
int: Vloc1;
{
…
}
…
LDI R16,0x12
PUSH R16
Void main(void)
LDI R16,0x34
{
… PUSH R16
R3 =mirutina(0x12, 0x34); CALL _mirutina
…
} POP R3
POP R3
…
PUSH R28
PUSH R29 ;guardo FP
IN R28, 0x3D
IN R29, 0x3E ;FP=SP
SBIW R28,0x02 ;espacio VL
OUT 0x3E,R29
OUT 0x3D,R28 ;SP=FP
mirutina(p1:char, p2:char) PUSH R0 ;salvo cntx
int: Vloc1; IN R0,0X3F ;SR
{ PUSH R0
… …
} POP R0 ;recupero SR y cntx
OUT 0x3F,R0
POP R0
ADIW R28,0x02 ;limpio VL
OUT 0x3E,R29 ;SP=FP
OUT 0x3D,R28
POP R28 ;recupero FP
POP R29
RETURN
…
%&$?
LDI R16,0x12
%&$?
PUSH R16
%&$?
LDI R16,0x34
PUSH R16 %&$?
CALL _mirutina %&$?
POP R3 %&$?
POP R3 %&$?
… %&$?
[SPH.SPL]
…
%&$?
LDI R16,0x12
%&$?
PUSH R16
%&$?
LDI R1,0x34
PUSH R1 %&$?
CALL _mirutina %&$?
POP R3 %&$?
POP R3 %&$? [SPH.SPL]
… 0x12
…
%&$?
LDI R16,0x12
%&$?
PUSH R16
%&$?
LDI R16,0x34
PUSH R16 %&$?
CALL _mirutina %&$?
POP R3 %&$? [SPH.SPL]
POP R3 0x34
… 0x12
…
%&$?
LDI R16,0x12
%&$?
PUSH R16
%&$?
LDI R16,0x34
%&$? [SPH.SPL]
PUSH R16
CALL _mirutina @retH
@ret POP R3 @retL
POP R3 0x34
… 0x12
PUSH R28
PUSH R29
IN R28, 0x3D %&$?
IN R29, 0x3E
SBIW R28,0x02 %&$?
OUT 0x3E,R29
OUT 0x3D,R28
%&$?
PUSH R0
IN R0,0X3F [SPH.SPL]
%&$?
PUSH R0
…
@retH
POP R0
OUT 0x3F,R0
@retL
POP R0
ADIW R28,0x02
OUT 0x3E,R29 0x34
OUT 0x3D,R28
POP R28 0x12
POP R29
RETURN
PUSH R28
PUSH R29
IN R28, 0x3D %&$?
IN R29, 0x3E
SBIW R28,0x02 %&$? [SPH.SPL]
OUT 0x3E,R29
OUT 0x3D,R28 R29viejo
PUSH R0
IN R0,0X3F R28viejo
PUSH R0
…
@retH
POP R0
OUT 0x3F,R0 @retL
POP R0
ADIW R28,0x02 0x34
OUT 0x3E,R29
OUT 0x3D,R28 0x12
POP R28
POP R29
RETURN
PUSH R28
PUSH R29
IN R28, 0x3D
%&$?
IN R29, 0x3E
SBIW R28,0x02 [SPH.SPL]
%&$?
OUT 0x3E,R29 [R29.R28] (FP)
OUT 0x3D,R28
PUSH R0 R29viejo
IN R0,0X3F
PUSH R0 R28viejo
…
POP R0 @retH
OUT 0x3F,R0
POP R0 @retL
ADIW R28,0x02
OUT 0x3E,R29 0x34
OUT 0x3D,R28
POP R28 0x12
POP R29
RETURN
PUSH R28 %&$?
PUSH R29
IN R28, 0x3D %&$?
IN R29, 0x3E %&$?
SBIW R28,0x02
OUT 0x3E,R29 %&$?
OUT 0x3D,R28
%&$? [R29.R28] (FP)
PUSH R0
IN R0,0X3F vl1
PUSH R0
… vl2 [SPH.SPL]
POP R0 R29viejo
OUT 0x3F,R0
POP R0 R28viejo
ADIW R28,0x02 @retH
OUT 0x3E,R29
OUT 0x3D,R28 @retL
POP R28 0x34
POP R29
RETURN 0x12
PUSH R28 %&$?
PUSH R29
IN R28, 0x3D %&$?
IN R29, 0x3E %&$?
SBIW R28,0x02
OUT 0x3E,R29 %&$?
OUT 0x3D,R28 [SPH.SPL]
%&$?
PUSH R0 [R29.R28] (FP)
IN R0,0X3F vl1
PUSH R0
… vl2
POP R0 R29viejo
OUT 0x3F,R0
POP R0 R28viejo
ADIW R28,0x02 @retH
OUT 0x3E,R29
OUT 0x3D,R28 @retL
POP R28 0x34
POP R29
RETURN 0x12
PUSH R28 %&$?
PUSH R29
IN R28, 0x3D %&$?
IN R29, 0x3E %&$?
SBIW R28,0x02
OUT 0x3E,R29 %&$? [SPH.SPL]
OUT 0x3D,R28
R0viejo
PUSH R0 [R29.R28] (FP)
IN R0,0X3F vl1
PUSH R0
… vl2
POP R0 R29viejo
OUT 0x3F,R0
POP R0 R28viejo
ADIW R28,0x02 @retH
OUT 0x3E,R29
OUT 0x3D,R28 @retL
POP R28 0x34
POP R29
RETURN 0x12
PUSH R28 %&$?
PUSH R29
IN R28, 0x3D %&$?
IN R29, 0x3E %&$? [SPH.SPL]
SBIW R28,0x02
OUT 0x3E,R29 SRviejo
OUT 0x3D,R28
R0viejo
PUSH R0 [R29.R28] (FP)
IN R0,0X3F vl1
PUSH R0
… vl2
POP R0 R29viejo
OUT 0x3F,R0
POP R0 R28viejo
ADIW R28,0x02 @retH
OUT 0x3E,R29
OUT 0x3D,R28 @retL
POP R28 0x34
POP R29
RETURN 0x12
PUSH R28 %&$?
PUSH R29
IN R28, 0x3D
IN R29, 0x3E
%&$?
%&$?
?
[SPH.SPL]
SBIW R28,0x02
OUT 0x3E,R29 SRviejo
OUT 0x3D,R28
R0viejo
PUSH R0 [R29.R28] (FP)
IN R0,0X3F vl1
PUSH R0
… … … vl2
POP R0 R29viejo
OUT 0x3F,R0
POP R0 R28viejo
ADIW R28,0x02 @retH
OUT 0x3E,R29
OUT 0x3D,R28 @retL
POP R28 0x34
POP R29
RETURN 0x12
PUSH R28 %&$?
PUSH R29
IN R28, 0x3D
IN R29, 0x3E
%&$?
%&$?
?
[SPH.SPL]
SBIW R28,0x02
OUT 0x3E,R29 SRviejo
OUT 0x3D,R28 Contexto_guardado
R0viejo [R29.R28] (Y=FP)
PUSH R0
IN R0,0X3F vl1 Vl1 =[Y+1]
PUSH R0
… … … vl2 Vl2 =[Y+2]
POP R0 R29viejo
OUT 0x3F,R0 FPantiguo =[Y+3.Y+4]
POP R0 R28viejo
ADIW R28,0x02 @retH
OUT 0x3E,R29
OUT 0x3D,R28 @retL
POP R28 0x34 P2 =[Y+7]
POP R29
RETURN 0x12 P1 =[Y+8]
PUSH R28 %&$?
PUSH R29
IN R28, 0x3D %&$?
IN R29, 0x3E %&$?
SBIW R28,0x02
OUT 0x3E,R29 SRviejo [SPH.SPL]
OUT 0x3D,R28
R0viejo
PUSH R0 [R29.R28] (FP)
IN R0,0X3F vl1
PUSH R0
… vl2
POP R0 R29viejo
OUT 0x3F,R0
POP R0 R28viejo
ADIW R28,0x02 @retH
OUT 0x3E,R29
OUT 0x3D,R28 @retL
POP R28 0x34
POP R29
RETURN 0x12
PUSH R28 %&$?
PUSH R29
IN R28, 0x3D %&$?
IN R29, 0x3E %&$?
SBIW R28,0x02
OUT 0x3E,R29 SRviejo
OUT 0x3D,R28 [SPH.SPL]
R0viejo
PUSH R0 [R29.R28] (FP)
IN R0,0X3F vl1
PUSH R0
… vl2
POP R0 R29viejo
OUT 0x3F,R0
POP R0 R28viejo
ADIW R28,0x02 @retH
OUT 0x3E,R29
OUT 0x3D,R28 @retL
POP R28 0x34
POP R29
RETURN 0x12
PUSH R28 %&$?
PUSH R29
IN R28, 0x3D %&$?
IN R29, 0x3E %&$?
SBIW R28,0x02
OUT 0x3E,R29 SRviejo
OUT 0x3D,R28
R0viejo [SPH.SPL]
PUSH R0
IN R0,0X3F vl1
PUSH R0
… vl2 [R29.R28] (FP)
POP R0 R29viejo
OUT 0x3F,R0
POP R0 R28viejo
ADIW R28,0x02 @retH
OUT 0x3E,R29
OUT 0x3D,R28 @retL
POP R28 0x34
POP R29
RETURN 0x12
PUSH R28 %&$?
PUSH R29
IN R28, 0x3D %&$?
IN R29, 0x3E %&$?
SBIW R28,0x02
OUT 0x3E,R29 SRviejo
OUT 0x3D,R28
R0viejo
PUSH R0
IN R0,0X3F vl1
PUSH R0 [SPH.SPL]
… vl2 [R29.R28] (FP)
POP R0 R29viejo
OUT 0x3F,R0
POP R0 R28viejo
ADIW R28,0x02 @retH
OUT 0x3E,R29
OUT 0x3D,R28 @retL
POP R28 0x34
POP R29
RETURN 0x12
PUSH R28 %&$?
PUSH R29
IN R28, 0x3D %&$?
IN R29, 0x3E %&$?
SBIW R28,0x02
OUT 0x3E,R29 SRviejo
OUT 0x3D,R28
R0viejo
PUSH R0
IN R0,0X3F vl1
PUSH R0
… vl2
POP R0 R29viejo
OUT 0x3F,R0
POP R0 R28viejo [SPH.SPL]
ADIW R28,0x02 @retH
OUT 0x3E,R29
OUT 0x3D,R28 @retL
POP R28 0x34
POP R29
RETURN 0x12
PUSH R28 %&$?
PUSH R29
IN R28, 0x3D %&$?
IN R29, 0x3E %&$?
SBIW R28,0x02
OUT 0x3E,R29 SRviejo
OUT 0x3D,R28
R0viejo
PUSH R0
IN R0,0X3F vl1
PUSH R0
… vl2
POP R0 R29viejo
OUT 0x3F,R0
POP R0 R28viejo
ADIW R28,0x02 @retH
OUT 0x3E,R29
OUT 0x3D,R28 @retL [SPH.SPL]
POP R28 0x34
POP R29
RETURN 0x12
%&$?
%&$?
…
%&$?
LDI R16,0x12
SRviejo
PUSH R16 R0viejo
LDI R16,0x34 vl1
PUSH R16 vl2
R29viejo
CALL _mirutina
R28viejo
@ret POP R3
@retH
POP R3 @retL [SPH.SPL]
… 0x34
0x12
%&$?
%&$?
…
%&$?
LDI R16,0x12
SRviejo
PUSH R16 R0viejo
LDI R16,0x34 vl1
PUSH R16 vl2
R29viejo
CALL _mirutina
R28viejo
@ret POP R3
@retH
POP R3 @retL
… 0x34 [SPH.SPL]
0x12
%&$?
%&$?
…
%&$?
LDI R16,0x12
SRviejo
PUSH R16 R0viejo
LDI R16,0x34 vl1
PUSH R16 vl2
R29viejo
CALL _mirutina
R28viejo
@ret POP R3
@retH
POP R3 @retL
… 0x34
0x12 [SPH.SPL]