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