#pragma GCC optimize ("Og")
#include "ArduinoTrace.h"
volatile int8_t a=6,b=3,c=0,d=0; //prueba1
//volatile int8_t a=5,b=3,c=0,d=0; //prueba2
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
//------------ PROCESO --------------------------------
// do
// if (a>5)
// {
// goto bodyif;
// }
// else
// {
// goto elseif;
// }
// if(b>0)
// {
// goto initdow;
// }
// else
// {
// goto enddow;
// };
initdow:
//if(a>5){
// goto bodyif;
//}
//else{
// goto elseif;
//}
asm goto(
"lds r16,a \n" //r16 <-- (a)
"cpi r16,6 \n" //(a) - 6
"brge %l[bodyif] \n" //if a>=6 <--> a>5 goto bodyif
"jmp %l[elseif]" //else goto elseif
::::bodyif,elseif
);
bodyif:
//c=c+b;
asm volatile(
"lds r16,c \n" //r16 <-- (c)
"lds r17,b \n" //r17 <-- (b)
"add r16,r17 \n" //r16 <-- (c) + (b)
"sts c,r16 \n" //c <-- (c) + (b)
);
//b--;
asm volatile(
"lds r17,b \n" //r17 <-- (b)
"dec r17 \n" //r17 <-- (b) - 1
"sts b,r17" //b <-- (b) - 1
);
asm goto(
"jmp %l[endif]" //goto endif
::::endif
);
//else
elseif:
//d=d+b;
asm volatile(
"lds r17,b \n" //r17 <-- (b)
"lds r18,d \n" //r18 <-- (d)
"add r17,r18 \n" //r17 <-- (b) + (d)
"sts d,r17" //d <-- (b) + (d)
);
//b--;
asm volatile(
"lds r17,b \n" //r17 <-- (b)
"dec r17 \n" //r17 <-- (b) - 1
"sts b,r17" //b <-- (b) - 1
);
endif:
conddow:
// if(b>0){
// goto initdow;
// }
// else{
// goto enddow;
// }
asm goto(
"lds r17,b \n" //r17 <-- (b)
"cpi r17,1 \n" //(b) - 1
"brge %l[initdow] \n" //if b>=1 <--> b>0 goto initdow
"jmp %l[enddow]" //else goto enddow
::::initdow,enddow
);
enddow:
//-------------------------------------------------------
DUMP(c);
DUMP(d);
}
void loop() {
// put your main code here, to run repeatedly:
}