#include "ArduinoTrace.h"
volatile int8_t a=6,b=2,c=4; //prueba1 15,5,4
//volatile int8_t a=6,b=5,c=4; //prueba2 11,6,4
//volatile int8_t a=4,b=2,c=4; //prueba3 6,2,2
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
//------------ PROCESO --------------------------------
// if(a>c)
// {
// do
// {
// a=a+b;
// b++;
// }while(b<5);
// }
// else
// {
// c=c-2;
// a=a+c;
// }
//-------------------------------------------------------
// if(a>c)
// No se puede hacer directamente, en su lugar evaluamos c<a
// Si es verdad salta a true y si no salta a else
asm volatile(
"lds r16, c \n"
"lds r17, a \n"
"cp r16, r17 \n"
"brlo true \n"
"rjmp else"
);
// {
asm volatile("true:");
// do
// {
asm volatile("while:");
// a=a+b;
asm volatile(
"lds r16, a \n"
"lds r17, b \n"
"add r16, r17 \n"
"sts a, r16"
);
// b++;
asm volatile(
"lds r16, b \n"
"inc r16 \n"
"sts b, r16"
);
// }while(b<5);
// Si la condición es cierta salta al principio del do while
asm volatile(
"lds r16, b \n"
"cpi r16, 5 \n"
"brlo while"
);
// }
// Al final del true salta al final del if
asm volatile("rjmp end");
// else
// {
asm volatile("else:");
// c=c-2;
asm volatile(
"lds r16, c \n"
"subi r16, 2 \n"
"sts c, r16"
);
// a=a+c;
asm volatile(
"lds r16, a \n"
"lds r17, c \n"
"add r16, r17 \n"
"sts a, r16"
);
// }
asm volatile("end:");
DUMP(a);
DUMP(b);
DUMP(c);
}
void loop() {
// put your main code here, to run repeatedly:
}