#pragma GCC optimize ("Og")
#include "ArduinoTrace.h"
volatile uint8_t a=5, b=8, c=4; //prueba 1 c=8
//volatile uint8_t a=5, b=7, c=4; //prueba 2
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
addressInfo();
Serial.println("INICIO:");
//------------- Proceso en alto nivel -------------------
// while (a>=2)
// {
// if(b>=8)
// {
// c++;
// }
// else
// {
// c=c+a+b;
// }
// a--;
// }
asm volatile("initw1:");
asm volatile
(
"lds r16,a \n"
"cpi r16,2 \n"
"brsh bodyw1 \n"
"rjmp endw1"
);
asm volatile("bodyw1:");
asm volatile
(
"lds r16,b \n"
"cpi r16,8 \n"
"brsh true1 \n"
"rjmp else1 \n"
);
asm volatile("true1:");
asm volatile
(
"lds r16,c \n"
"inc r16 \n"
"sts c,r16"
);
asm volatile("rjmp endif1");
asm volatile("else1:");
asm volatile
(
"lds r16,c \n"
"lds r17,a \n"
"lds r18,b \n"
"add r16,r17 \n"
"add r16,r18 \n"
"sts c, r16"
);
asm volatile("rjmp endif1");
asm volatile("endif1:");
asm volatile
(
"lds r16,a \n"
"dec r16 \n"
"sts a,r16"
);
asm volatile("rjmp initw1");
asm volatile("endw1:");
//--------------------------------------------------------
DUMP(a);
DUMP(b);
DUMP(c);
}
void loop() {
}
void addressInfo()
{
Serial.println("DIRECCIONES de VARIABLES (HEX):");
Serial.print("a: ");
Serial.println((int)&a,HEX); //direccion de a
Serial.print("b: ");
Serial.println((int)&b,HEX); //direccion de b
Serial.print("c: ");
Serial.println((int)&c,HEX); //direccion de c
}