#pragma GCC optimize ("Og")
#include "ArduinoTrace.h"
volatile int8_t a=7,b=6,c; //prueba 1
//volatile int8_t a=5,b=5,c; //prueba 2
//volatile int8_t a=6,b=6,c; //prueba 3
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
Serial.println("INICIO");
//------------- Proceso en alto nivel -------------------
// Orden de creación de código: 1) 2) 3) 4); ver comentarios
// if (a>b || b<=5) // 1) Condición compuesta
// if (a>b || b<=5) // 2) Cond. compuesta y gotos
// {
// goto then1;
// }
// else
// {
// goto else1;
// }
cond1: // 3) Condiciones simples y gotos
// if (a>b) // 3) Condiciones simples y gotos
// {
// goto then1;
// }
// else
// {
// goto cond2;
// }
asm goto
(
"lds r16, a\n" // r16 <-- (a)
"lds r17, b\n" // r17 <-- (b)
"cp r17, r16\n" // (b) - (a)
"brlt %l[then1]\n" // si b<a <--> a>b: goto then1
"jmp %l[cond2]" // sino: goto cond2
::::then1, cond2
);
cond2: // 3) Condiciones simples y gotos
// if (b<=5) // 3) Condiciones simples y gotos
// {
// goto then1;
// }
// else
// {
// goto else1;
// }
asm goto // 4) Instrucciones en asm
(
"lds r16, b\n" // r16 <-- (b)
"cpi r16, 6\n" // (b) - 6
"brlt %l[then1]\n" // si b<6 <--> b<=5: goto then1
"jmp %l[else1]" // sino: goto else1
::::then1, else1
);
then1: // 2) Cond. compuesta y gotos
// {
// c=3;
// }
asm volatile // 4) Instrucciones en asm
(
"ldi r16, 3\n" // r16 <-- 3
"sts c, r16" // c <-- 3
);
// goto endif1; // 2) Cond. compuesta y gotos
asm goto // 4) Instrucciones en asm
(
"jmp %l[endif1]" // goto endif1
::::endif1
);
// else // 1) Condición compuesta
else1: // 2) Cond. compuesta y gotos
// {
// c=7;
// }
asm volatile
(
"ldi r16, 7\n" // r16 <-- 7
"sts c, r16" // c <-- 7
);
endif1: // 2) Cond. compuesta y gotos
//--------------------------------------------------------
DUMP(c);
}
void loop() {
}