#pragma GCC optimize ("Og")
#include "ArduinoTrace.h"
volatile int8_t n=5,sum;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
Serial.println("INICIO");
//------------- Proceso en alto nivel -------------------
//while (n>0)
initw1:
// if(n>0)
// {
// goto body1;
// }
// else
// {
// goto endw1;
// }
asm goto
(
"lds r16,n \n" //r16 <-- (n)
"cpi r16,1 \n" //r16 - 1
"brge %l[body1] \n" // si n>0 goto body1
"jmp %l[endw1]" // sino goto endw1
::::body1,endw1
);
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
);
asm goto(
"jmp %l[initw1]"//goto initw1
::::initw1
);
}
endw1:
//--------------------------------------------------------
DUMP(n);
DUMP(sum);
}
void loop() {
}