#pragma GCC optimize ("Og")
#include "ArduinoTrace.h"
volatile int8_t a=3,b=0,c=0,i=0; //prueba1
//volatile int8_t a=4,b=0,c=0,i=0; //prueba2
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
//------------ PROCESO --------------------------------
// for(i=1;i<5;i++)
// {
// if (a<=3)
// {
// b=b+i;
// }
// else
// {
// c=c+i;
// }
// }
// i=1;
// while(i<5)
// {
// if (a<=3)
// {
// b=b+i;
// }
// else
// {
// c=c+i;
// }
// i++;
// }
// i=1;
asm volatile
(
"ldi r16, 1 \n" // r16 <-- 1
"sts i, r16" // i <-- 1
);
cond1:
// if (i<5)
// {
// goto cond2;
// }
// else
// {
// goto end1;
// }
asm goto
(
"lds r16, i \n" // r16 <-- (i)
"cpi r16, 5 \n" // comparar (i) y 5
"brlt %l[cond2] \n" // si i<5: goto cond2
"jmp %l[end1] \n" // sino: goto end1
::::cond2, end1
);
cond2:
// if (a<=3)
// {
// goto body1;
// }
// else
// {
// goto body2;
// }
asm goto
(
"lds r16, a \n" // r16 <-- (a)
"cpi r16, 4 \n" // compara r16 y 4
"brlt %l[body1] \n" // si a<4 <--> a<=3: goto body1
"jmp %l[body2]" // sino: goto body2
::::body1, body2
);
body1:
// {
// b=b+i;
// i++;
// goto cond1;
// }
asm goto
(
"lds r16, b \n" // r16 <-- b
"lds r17, i \n" // r17 <-- i
"add r16, r17 \n" // r16 <-- (b)+(i)
"sts b, r16 \n" // b <-- (b)+(i)
"inc r17 \n" // r17 <-- (i)+1
"sts i, r17 \n" // i <-- (i)+1
"jmp %l[cond1]" // goto cond1
::::cond1
);
body2:
// {
// c=c+i;
// i++;
// goto cond1;
// }
asm goto
(
"lds r16, c \n" // r16 <-- (c)
"lds r17, i \n" // r17 <-- (i)
"add r16, r17 \n" // r16 <-- (c)+(i)
"sts c, r16 \n" // c <-- (c)+(i)
"inc r17 \n" // r17 <-- (i)+1
"sts i, r17 \n" // i <-- (i)+1
"jmp %l[cond1]" // goto cond1
::::cond1
);
end1:
//-------------------------------------------------------
DUMP(b);
DUMP(c);
}
void loop() {
// put your main code here, to run repeatedly:
}