#pragma GCC optimize ("Og")
#include "ArduinoTrace.h"
volatile int8_t a=9,b=8,c; //prueba 1
//volatile int8_t a=10,b=9,c; //prueba 2
//volatile int8_t a=7,b=8,c; //prueba 3
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
Serial.println("INICIO");
//------------- Proceso en alto nivel -------------------
// Orden: 1) 2) 3) 4); ver comentarios
// if (a>b) // 1) Programa inicial
// if (a>b) // 2) Etiquetas alto nivel
// {
// goto then1;
// }
// else
// {
// goto else1;
// }
asm goto // 4) Funciones asm
(
"lds r16, a\n" // r16 <-- (a)
"lds r17, b\n" // r17 <-- (b)
"cp r17, 16\n" // (b) - (a)
"brlt %l[then1]\n" // si b<a <--> a>b: goto then1
"jmp %l[else1]" // else: goto else1
::::then1, else1
);
then1: // 2) Etiquetas alto nivel
// {
// if(b<=8) // 1) Programa inicial
// if(b<=8) // 3) Gotos a then2, else2 y endif2
// {
// goto then2;
// }
// else // 3) Gotos a then2, else2 y endif2
// {
// goto else2;
// }
asm goto // 4) Funciones asm
(
"lds r16, b\n" // r16 <-- (b)
"cpi r16, 9\n" // (b) - 9
"brlt %l[then2]\n" // si b<9 <--> b<=8: goto then2
"jmp %l[else2]" // sino: goto else2
::::then2, else2
);
then2: // 3) Gotos a then2, else2 y endif2
// {
// c=3;
asm volatile // 4) Funciones asm
(
"ldi r16, 3\n" // r16 <-- 3
"sts c, r16" // c <-- 3
);
// }
// goto endif2;
asm goto // 4) Funciones asm
(
"jmp %l[endif2]"
::::endif2
);
// else // 1) Programa inicial
else2: // 3) Gotos a then2, else2 y endif2
// {
// c=5;
asm volatile // 4) Funciones asm
(
"ldi r16, 5\n" // r16 <-- 5
"sts c, r16" // c <-- 5
);
// }
endif2: // 3) Gotos a then2, else2 y endif2
// goto endif1; 2) Etiquetas alto nivel
asm goto // 4) Funciones asm
(
"jmp %l[endif1]" // goto endif1
::::endif1
);
// }
// else // 1) Programa inicial
else1: // 2) Etiquetas alto nivel
// {
// c=7;
asm volatile // 4) Funciones asm
(
"ldi r16, 7\n" // r16 <-- 7
"sts c, r16" // c <-- 7
);
// }
endif1: // 2) Etiquetas alto nivel
//--------------------------------------------------------
DUMP(c);
}
void loop() {
}