0% found this document useful (0 votes)
11 views32 pages

Stack Atmega

The document contains assembly code snippets that demonstrate the use of registers and stack operations, including loading immediate values, pushing and popping from the stack, and calling a function named 'mirutina'. It also includes comments and annotations indicating the state of various registers and memory locations during execution. The code appears to be part of a larger program, likely written for an embedded system or microcontroller.

Uploaded by

Eric Luna
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
11 views32 pages

Stack Atmega

The document contains assembly code snippets that demonstrate the use of registers and stack operations, including loading immediate values, pushing and popping from the stack, and calling a function named 'mirutina'. It also includes comments and annotations indicating the state of various registers and memory locations during execution. The code appears to be part of a larger program, likely written for an embedded system or microcontroller.

Uploaded by

Eric Luna
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 32

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]

You might also like