#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");
//-------------------------------------------------------
//i=1;
asm volatile
(
"ldi r16, 1 \n" // r16 <-- 1
"sts i, r16" // i <-- (r16)
);
initw1:
//if(i<=n)
//{
// goto body1;
//}
//else
//{
// goto endw1;
//}
asm goto
(
"lds r16, n \n" // r16 <-- (n)
"lds r17, i \n" // r16 <-- (i)
"cp r16, r17 \n" // (n) - (i): para comparar
"brge %l[body1] \n" // (n) >= (i) --> goto body1
"jmp %l[endw1]" // (n) < (i) ---> goto endw1
:::: body1, endw1
);
body1:
//{
// sum = sum + i;
// i++;
// goto initw1;
//}
asm goto
(
"lds r16, sum \n" // r16 <-- (sum)
"lds r17, i \n" // r17 <-- (i)
"add r16, r17 \n" // r16 <-- (sum) + (i)
"sts sum, r16 \n" // sum <-- (sum) + (i)
"ldi r16, 1 \n" // r16 <-- 1
"add r17, r16 \n" // r17 <-- (i) + 1
"sts i, r17 \n" // i <-- (i) + 1
"jmp %l[initw1]" // goto initw1
::::initw1
);
endw1:
DUMP(sum);
//--------------------------------------------------------
}
void loop() {
}