#pragma GCC optimize ("Og")
#include "ArduinoTrace.h"
volatile byte da=9,db=7,m=5,va; //prueba 1 va 28 da=12
//volatile byte da=9,db=5,m=5,va; //prueba 2 va 20 da 4
//volatile byte da=12,db=7,m=2,va; //prueba 3 va 7 da 5
//volatile byte da=12,db=9,m=1,va; //prueba 4 va 0 da 3
void setup() {
//juan manuel cortes jimenez 1052836096
// put your setup code here, to run once:
Serial.begin(9600);
Serial.println("INICIO");
/*
//------------- Proceso en alto nivel -------------------
while(m>=2)
{
va=va+db;
m=m-1;
}
if(va>20)
{
da=da+3;
}
else
{
da=da-db;
}
//------------------------------------------------------
*/
//proceso en assembly:
asm(
//WHILE m>=2
"WHILE: \n"
"lds r16,m \n"
"cpi r16,2\n"
//si el while no se cumple salta al if:
"brlo IF \n "
// va=va+db;
"lds r17,va \n"
"lds r18,db \n"
"add r17,r18 \n"
//va+db
"sts va,r17 \n"
//m=m-1;
"dec r16 \n"
"sts m,r16 \n"
//vuelve al inicio del while
"rjmp WHILE\n"
"IF: \n"
//if(va>20)
"lds r16,va \n"
"cpi r16,21 \n"
"brlo ELSE \n"
// si no se cumple el if salta al else
//da=da+3;
"lds r17,da \n"
"ldi r18,3 \n"
"add r17,r18 \n"
//da+3
"sts da,r17 \n"
//acaba el programa cuando acaba el if
"rjmp END \n"
//Else
"ELSE: \n"
// da=da-db;
"lds r16,da \n"
"lds r17,db \n"
"sub r16,r17 \n"
//da-db
"sts da,r16 \n"
//fin del programa
"END: \n"
//registros utilizados
:::"r16","r17","r18"
);
DUMP(va);
DUMP(da);
}
void loop() {
}