#pragma GCC optimize ("Og")
#include "ArduinoTrace.h"
volatile int8_t a=7,b=3,c; //prueba 1 c=10
//volatile int8_t a=8,b=9,c; //prueba 2 c=10
//volatile int8_t a=7,b=8,c; //prueba 3 c=4
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
Serial.println("INICIO");
//------------- Proceso en alto nivel -------------------
//if(a<=7 && b>3)
// if(a<=7 && b>3){
// goto bodyif;
// }
// else{
// goto elseif;
// }
cond1:
// if(a<=7){
// goto cond2;
// }
// else{
// goto elseif;
// }
asm goto(
"lds r16,a \n" // r16 <-- (a)
"cpi r16,8 \n" // (a) - 8
"brlt %l[cond2] \n" //if a<8 <--> a<=7 goto cond2
"jmp %l[elseif]" //else goto elseif
::::cond2,elseif
);
cond2:
// if(b>3){
// goto bodyif;
// }
// else{
// goto elseif;
// }
asm goto(
"lds r16,b \n" //r16 <-- (b)
"cpi r16,4 \n" //(b) - 4
"brge %l[bodyif] \n"//if b>=4 <--> b>3 goto bodyif
"jmp %l[elseif]" //else goto elseif
::::bodyif, elseif
);
bodyif:
//c=4;
asm volatile(
"ldi r16,4 \n"
"sts c,r16"
);
asm goto(
"jmp %l[endif]"
::::endif
);
//else
elseif:
//c=10;
asm volatile(
"ldi r16,10 \n"
"sts c,r16"
);
endif:
//--------------------------------------------------------
DUMP(c);
}
void loop() {
}