#pragma GCC optimize "-O0"
#pragma GCC optimize "-Og"
#include <ArduinoTrace.h>
volatile uint8_t a[3]={2,3,4},b[3]={5,6,7},i=1;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
i=2;
//------------------- PROCESO --------------------------//
// for(i=0;i<3;i++)
asm volatile(
"ldi r22, 0 \n"
"sts i, r22 \n" //i=0
);
asm volatile("initFor:");
asm volatile(
"lds r22, i \n"
"cpi r22, 3 \n" //i<3
"brlo bodyFor \n" //Jump bodyFor
"rjmp end \n" //Jump end
);
// {
//a[i] = b[i];
asm volatile("bodyFor:");
asm volatile(
"lds r18, i \n"
"ldi r19, 0 \n" //r19:r18 <-- (i) en 16 bits
"subi r18, lo8(-(b)) \n"
"sbci r19, hi8(-(b)) \n" //r19:r18 <--- dir b[i]
"movw zl, r18 \n" //Z <-- dir de b[i]
"ld r20, Z \n" //r20 <-- (b[i])
"lds r18, i \n"
"ldi r19, 0 \n" //r19:r18 <-- (i) en 16 bits
"subi r18, lo8(-(a)) \n"
"sbci r19, hi8(-(a)) \n" //r19:r18 <--- dir a[i]
"movw zl, r18 \n" //Z <-- dir de a[i]
"st Z, r20 \n" //a[i] <-- (b[i]) store en lo que esta apuntando z, esta apuntando la dir de a[i], lo que tiene el registro, y ese regiostro tiene el contenido de b[i]
"lds r22, i \n"
"inc r22 \n"
"sts i, r22 \n"// i++
"rjmp initFor \n" // Jump initFor
);
asm volatile("end:");
//}
//----------------------------------------------------- //
for(int j=0;j<3;j++)
{
Serial.print("a[");
Serial.print(j);
Serial.print("] = ");
Serial.println(a[j]);
}
for(int j=0;j<3;j++)
{
Serial.print("b[");
Serial.print(j);
Serial.print("] = ");
Serial.println(b[j]);
}
}
void loop() {
// put your main code here, to run repeatedly:
}