#pragma GCC optimize ("Og")
#include "ArduinoTrace.h"
volatile int8_t a,b,n;
void setup() {
Serial.begin(9600);
Serial.println("INICIO");
//------------- Proceso en alto nivel -------------------
// while(n<=10)
initw:
// if(n<=10){
// goto bodyif;
// }
// else{
// goto endw;
// }
asm goto(
"lds r16,n \n" // r16 <-- (n)
"cpi r16,11 \n"// (n) - 11
"brlt %l[bodyif] \n"// if n<11 <--> n<=10 goto bodyif
"jmp %l[endw]"// else goto endw
::::bodyif,endw
);
bodyif:
// if(n>5){
// goto thenif;
// }
// else{
// goto elseif;
// }
asm goto(
//"lds r16,n \n"// r16 <-- (n) (n ya estaba en r16)
"cpi r16,6 \n" // (n) - 6
"brge %l[thenif] \n"// if n>=6 <--> n>5 goto thenif
"jmp %l[elseif]" // else goto elseif
::::thenif,elseif
);
thenif:
//a=a+n;
asm volatile(
"lds r17,a \n" //r17 <-- (a)
//"lds r16,n \n" //r16 <-- (n)
"add r17,r16 \n" //r17 <-- (a) + (n)
"sts a,r17" // a <-- (a) + (n)
);
asm goto(
"jmp %l[endif]" //goto endif
::::endif
);
//else
elseif:
//b=b+n;
asm volatile(
"lds r17,b \n" // r17 <-- (b)
//"lds r16,n \n" //r16 <-- (n)
"add r17,r16 \n" //r17 <-- (b) + (n)
"sts b,r17" // b <-- (b) + (n)
);
endif:
//n=n+1;
asm volatile(
//"lds r16,n \n" //r16 <-- (n)
"inc r16 \n" //r16 <-- (n) + 1
"sts n,r16" //n <-- (n) + 1
);
asm goto(
"jmp %l[initw]" //goto initw
::::initw
);
endw:
//-------------------------------------
DUMP(a);
DUMP(b);
DUMP(n);
}
void loop() {
// put your main code here, to run repeatedly:
}