#pragma GCC optimize ("Og")
#include "ArduinoTrace.h"
volatile int8_t n=3,sum;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
Serial.println("INICIO");
//------------- Proceso en alto nivel -------------------
//do
body1:
//{
//sum=sum+n;
asm volatile(
"lds r16,sum \n" //r16 <-- (sum)
"lds r17,n \n"// r17 <-- (n)
"add r16,r17 \n"// r16 <-- (sum) + (n)
"sts sum,r16"// sum <-- (sum) + (n)
);
//n=n-1;
asm volatile(
"lds r16,n \n"//r16 <-- (n)
"subi r16,1 \n"// r16 <-- (n) - 1
"sts n,r16"//n <-- (n) - 1
);
//}
//while (n>0);
// if(n>0)
// {
// goto body1;
// }
// else
// {
// goto enddow1:
// }
asm goto
(
"lds r16,n \n" //r16 <-- (n)
"cpi r16,1 \n" // (n) - 1
"brlt %l[enddow1] \n" //si n<1 <--> n<=0 goto enddow1
"jmp %l[body1] \n" //else goto body1
::::body1,enddow1
);
enddow1:
//--------------------------------------------------------
DUMP(n);
DUMP(sum);
}
void loop() {
}