#pragma GCC optimize ("Og")
#include "ArduinoTrace.h"
volatile int8_t a=8,b=5,c=6,d=0,resultado = 0;
//volatile int8_t a = 4, b = 8, c = 3, d = 0, resultado = 4;
//volatile int8_t a = 3,b = 6, c = 2, d = 2, resultado = 8;
void setup() {
Serial.begin(9600);
addressInfo();
Serial.println("INICIO:");
//------------- Proceso en alto nivel -------------------
// if (a <=b ) {
// Serial.println("El primer numero es mayor que el segundo.");
// }else{
// Serial.println("El primer numero es menor que el segundo");
// }
// EJERCICIO 1
// asm volatile(
// "lds r16,a \n"
// "lds r17,b \n"
// "cp r17,r16 \n"
// "breq true1 \n"
// "rjmp else"
// );
// asm volatile("true1:");
// Serial.println("El primer numero es mayor que el segundo");
// asm volatile("rjmp end");
// asm volatile("else:");
// Serial.println("El primer numero es menor que el segundo");
// asm volatile("end:");
//-------------------------------------------------------------------
// EJERCICIO 2 parcial 1.
//do{
// asm volatile("body:");
// asm volatile( //a<=3
// "lds r16,a \n"
// "cpi r16,4 \n" //a<4
// "brlo true1 \n"
// "rjmp else"
// );
// asm volatile("true1:");
// asm volatile(
// "lds r17,b \n"
// "lds r18,c \n"
// "add r18,r17 \n" // c=c+b;
// "sts c,r18 \n"
// "inc r17 \n" // b++;
// "sts b,r17 \n"
// "rjmp condicion1"
// );
// asm volatile("else:");
// asm volatile(
// "lds r17,b \n"
// "lds r19,d \n"
// "add r19,r17 \n"// d=d+b;
// "sts d,r19 \n"
// "inc r17 \n" // b++;
// "sts b,r17"
// );
// //}
// asm volatile("condicion1:");
// asm volatile( //b<=5
// "lds r17,b \n"
// "cpi r17,6 \n"
// "brlo body \n"
// "rjmp end"
// );
// asm volatile("end:");
//----------------------------------------------------------------------
//EJERCICIO 1 CON 2 CONDICIONES.
// if (c > b && a == 0) {
// a++;
// b = a+d;
// }
// asm volatile(
// "lds r16,a \n"
// "lds r17,b \n"
// "lds r18,c \n"
// "cp r17,r18 \n"
// "brlo con1 \n"
// "rjmp end1"
// );
// asm volatile("con1:");
// asm volatile(
// "lds r16,a \n"
// "cpi r16,0 \n"
// "breq body1 \n"
// "rjmp end1"
// );
// asm volatile("body1:");
// asm volatile(
// "lds r17,b \n"
// "lds r16,a \n"
// "lds r19,d \n"
// "inc r16 \n"
// "sts a,r16 \n" // a++;
// "add r16,r19 \n"
// "sts b,r16"
// );
// asm volatile("end1:");
//-------------------------------------------------------------------------
// EJERCICIO 3
// if (a >= 0 && b > 0 && c > 0 && d == 0) {
// resultado = b + c;
// d = resultado - a;
// }
// asm volatile(
// "lds r16,a \n"
// "cpi r16, 0 \n"
// "brsh con1 \n"
// "rjmp end \n"
// // segunda
// "con1: \n"
// "lds r17,b \n"
// "ldi r21,0 \n"
// "cp r21,r17 \n"
// "brlo con2 \n"
// "rjmp end \n"
// // tercera
// "con2: \n"
// "lds r18,c \n"
// "ldi r21,0 \n"
// "cp r21,r18 \n"
// "brlo con3 \n"
// "rjmp end \n"
// // cuarta
// "con3: \n"
// "lds r19,d \n"
// "cpi r21, 0 \n"
// "breq body \n"
// "rjmp end \n"
// // declaracion para body
// "body: \n"
// "lds r16,a \n"
// "lds r20, resultado \n"
// "lds r17,b \n"
// "lds r18,c \n"
// "add r17,r18 \n"
// "sts resultado,r17 \n"
// "sub r17, r16 \n"
// "sts d,r17 \n"
// "end:"
// );
// ---------------------------------------------------------------------
// EJERCICIO 4
// for (b = 0; b <= 5; ++b) {
// if (a <= 3) {
// c = c + b;
// } else {
// d = d + b;
// }
// }
//declaracion
// asm volatile(
// "ldi r16,0 \n"
// "sts b,r16"
// );
// asm volatile(
// "lds r17,b \n"
// "inc r17 \n"
// "sts b,r17"
// );
// asm volatile("condicion1:");
// asm volatile(
// "lds r17,b \n"
// "cpi r17,6 \n"
// "brlo condicion2 \n"
// "rjmp end"
// );
// asm volatile("condicion2:");
// asm volatile(
// "lds r18,a \n"
// "cpi r18,4 \n"
// "brlo body \n"
// "rjmp else"
// );
// asm volatile("body:");
// asm volatile(
// "lds r19,c \n"
// "lds r17,b \n"
// "add r19,r17 \n" // c = c+b
// "sts c,r19 \n"
// "rjmp incremento"
// );
// asm volatile("else:");
// asm volatile(
// "lds r20,d \n"
// "lds r17,b \n"
// "add r20,r17 \n" //d = d+b
// "sts d,r20 \n"
// "rjmp incremento"
// );
// asm volatile("incremento:");
// asm volatile(
// "lds r17,b \n"
// "inc r17 \n"
// "sts b,r17 \n"
// "rjmp condicion1"
// );
// asm volatile("end:");
//---------------------------------------------------------------------
//EJERCICIO 5
// if ((a >= 5 && b > 1) || (c > 2 && d != 0)) {
// resultado = b + c;
// d = resultado - a;
// } else{
// resultado = b-c;
// d = resultado + a;
// }
// proceso a ensambaldor
// asm volatile(
// "lds r16, a \n"
// "cpi r16, 5 \n"
// "brsh con1_2 \n"
// "rjmp con2_1"
// );
// asm volatile(
// "con1_2: \n"
// "lds r17,b \n"
// "cpi r16,2 \n"
// "brsh body1 \n"
// );
// asm volatile(
// "con2_1: \n"
// "lds r18,c \n"
// "cpi r18,3 \n"
// "brsh con2_2 \n"
// "rjmp else"
// );
// asm volatile(
// "con2_2: \n"
// "lds r19,d \n"
// "cpi r19,0 \n"
// "brne body1 \n"
// "rjmp else"
// );
// asm volatile(
// "body1: \n"
// "lds r16,a \n"
// "lds r17,b \n"
// "lds r18,c \n"
// "add r17,r18 \n"
// "sts resultado,r17 \n"
// "sub r17, r16 \n"
// "sts d,r17 \n"
// "rjmp end"
// );
// asm volatile(
// "else: \n"
// "lds r16,a \n"
// "lds r17,b \n"
// "lds r18,c \n"
// "sub r17,r18 \n"
// "sts resultado, r17 \n"
// "add r17,r16 \n"
// "sts d,r17"
// );
// asm volatile("end:");
//--------------------------------------------------------------------------
// EJERCICIO 6
// if ((a >= 5 || b > 1) && (c > 2 || d != 0)) {
// resultado = b + c;
// d = resultado - a;
// } else{
// resultado = b-c;
// d = resultado + a;
// }
// proceso a ensamblador.
// asm volatile(
// "lds r16,a \n"
// "cpi r16,5\n"
// "brsh con2_1 \n"
// );
// asm volatile(
// "con1_2: \n"
// "lds r17,b \n"
// "cpi r17,2 \n"
// "brsh con2_1 \n"
// "rjmp else"
// );
// asm volatile(
// "con2_1: \n"
// "lds r18, c \n"
// "cpi r18, 3 \n"
// "brsh body \n"
// );
// asm volatile(
// "lds r19,d \n"
// "cpi r19,0 \n"
// "brne body \n"
// "rjmp else"
// );
// asm volatile(
// "body: \n"
// "lds r16,a \n"
// "lds r17,b \n"
// "lds r18,c \n"
// "add r17,r18 \n"
// "sts resultado,r17 \n"
// "sub r17, r16 \n"
// "sts d,r17 \n"
// "rjmp end"
// );
// asm volatile(
// "else: \n"
// "lds r16,a \n"
// "lds r17,b \n"
// "lds r18,c \n"
// "sub r17,r18 \n"
// "sts resultado, r17 \n"
// "add r17,r16 \n"
// "sts d,r17"
// );
// asm volatile("end:");
// d = a + c + b;
asm volatile(
"lds r16,a \n"
"lds r17,b \n"
"lds r18, c \n"
"add r16,r17 \n"
"add r16,r18 \n"
"sts d,r16"
);
DUMP(d);
}
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
Serial.print("d: ");
Serial.println((int)&d,HEX); // direccion de d
}