#pragma GCC optimize ("Og")
#include "ArduinoTrace.h"
//volatile byte da=7,db=7,n=5,va; //prueba 1
//volatile byte da=8,db=7,n=2,va; //prueba 2
volatile byte da=8,db=7,n=1,va; //prueba 3
//volatile byte da=3,db=9,n=5,va; //prueba 4
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
Serial.println("INICIO");
//------------- Proceso en alto nivel -------------------
//if(da<db)
//{
// va=db-da;
//}
//else
//{
// while(n>1)
// {
// va=va+db;
// n=n-1;
// }
//}
asm(
"lds r16, da \n"
"lds r17, db \n"
"cp r16, r17 \n" //da-db
"brsh Eval \n" //da >= db
"rjmp True \n"
"True: \n"
"sub r17, r16 \n" //db-da
"sts va, r17 \n" //va <- db-da
"rjmp Exit \n"
"Eval: \n"
"lds r18, n \n"
"cpi r18, 2 \n" //r18-2 -> n-2
"brsh Cond \n" // n <= 1 --> n > 1
"rjmp Exit \n"
"Cond: \n"
"lds r17, va \n"
"lds r19, db \n"
"add r17, r19 \n" // va+db
"sts va, r17 \n" //va <- va+db
"subi r18, 1 \n" //n-1
"sts n, r18 \n" //n <- n-1
"rjmp Eval \n"
"Exit: \n"
::: "r16", "r17", "r18", "r19"
);
//------------------------------------------------------
DUMP(va);
}
void loop() {
}