#pragma GCC optimize ("Og")
#include "ArduinoTrace.h"
volatile int8_t x, y, z, w;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
Serial.println("INICIO");
//--------------------------------------------------------
asm volatile
(
"ldi r16, 3 \n" // r16 <-- 3
"sts x, r16 \n" // x <-- 3
"ldi r16, 4 \n" // r16 <-- 4
"sts y, r16" // y <-- 4
);
asm goto
(
"lds r16, x \n" // r16 <-- (x)
"lds r17, y \n" // r17 <-- (y)
"cp r17, r16 \n" // comaparar (y) con (x)
"brge %l[condTrue] \n" // (y) >= (x) == (x) <= (y) --> goto condTrue
"jmp %l[condFalse]" // (x) > (y) --> goto condFalse
::::condTrue, condFalse
);
condTrue:
asm goto
(
"lds r16, x \n" // r16 <-- (x)
"lds r17, y \n" // r17 <-- (y)
"add r16, r17 \n" // r16 <-- (x) + (y)
"sts z, r16 \n" // z <-- (x) + (y)
"jmp %l[endif]" // goto endif
::::endif
);
condFalse:
asm goto
(
"lds r16, x \n" // r16 <-- (x)
"lds r17, y \n" // r17 <-- (y)
"sub r16, r17 \n" // r16 <-- (x) - (y)
"sts w, r16 \n" // w <-- (x) - (y)
"jmp %l[endif]" // saltar a endif
::::endif
);
endif:
DUMP(x);
DUMP(y);
DUMP(z);
DUMP(w);
//--------------------------------------------------------
}
void loop() {
}