#pragma GCC optimize "-Og"
#include "ArduinoTrace.h"
volatile byte a=5,b=5,c=5;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
// if(a>=b){
// goto L10;
// }
// else
// {
// goto L20;
// }
// if(a<b){
// goto L10;
// }
// else
// {
// goto L20;
// }
// asm goto(
// "lds r24,a \n"
// "lds r20,b \n"
// "cp r24,r20 \n" // esto es b-a
// "in r20,0x3F \n" // R18<---sreg
// "sbrs r20,0 \n"// test del bit 0 r18 <--> bit c
// "rjmp %l[L20] \n"
// // "rjmp %l[L20] \n" //esto permite sacarlo porque es la siguiente instruccion
// :::"r24","r20":L10,L20
// );
// ----------a<b-------
// asm goto(
// "lds r24,a \n"
// "lds r20,b \n"
// "cp r20,r24 \n" // esto es b-a
// "in r20,0x3F \n" // R18<---sreg
// "sbrc r20,0 \n"// test del bit 0 r18 <--> bit c
// "rjmp %l[L20] \n"
// // "rjmp %l[L20] \n" //esto permite sacarlo porque es la siguiente instruccion
// :::"r24","r20":L10,L20
// );
//----------a==b-----------
// asm goto(
// "lds r24,a \n"
// "lds r20,b \n"
// "cp r20,r24 \n" // esto es b-a
// "in r20,0x3F \n" // R18<---sreg
// "sbrs r20,1 \n"// test del bit 0 r18 <--> bit c
// "rjmp %l[L20] \n"
// // "rjmp %l[L20] \n" //esto permite sacarlo porque es la siguiente instruccion
// :::"r24","r20":L10,L20
// );
//------a!=b-------
// asm goto(
// "lds r24,a \n"
// "lds r20,b \n"
// "cp r20,r24 \n" // esto es b-a
// "in r20,0x3F \n" // R18<---sreg
// "sbrc r20,1 \n"// test del bit 0 r18 <--> bit c
// "rjmp %l[L20] \n"
// // "rjmp %l[L20] \n" //esto permite sacarlo porque es la siguiente instruccion
// :::"r24","r20":L10,L20
// );
asm goto(
"lds r24,a \n"
"lds r20,b \n"
"cp r20,r24 \n" // esto es b-a
"in r24,0x3F \n" // R18<---sreg
"sbrc r24,0 \n"// test del bit 0 r18 <--> bit c
"rjmp %l[L10] \n"
//probar segunda condicion
"lds r24,c \n"
"cp r20,r24 \n" // b-c
"in r24, 0x3F \n"
"sbrs r24,1 \n"
"rjmp %l[L20] \n" //esto permite sacarlo porque es la siguiente instruccion
:::"r24","r20":L10,L20
);
L10:
a=a-b;
goto L30;
L20:
a=a+b;
L30:
DUMP(a);
}
void loop() {
}