#include "ArduinoTrace.h"
// volatile uint16_t a=300,b=257;  // Prueba 1
volatile uint16_t a=352,b=412;  // Prueba 2
volatile uint32_t c;

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);

  //-------------- proceso alto nivel --------------------------//
  // c=a*b;
  // ------------------------------------------------------------//

  asm(
  "lds r20,a \n"
  "lds r21,a+1 \n"
  "lds r18,b \n"
  "lds r19,b+1 \n"

  "mul r20,r18 \n"
  "movw r24,r0 \n" // r24:r25 <- a*b

  "mul r20,r19 \n" // r0:r1 <- a*(b+1)
  "add r25,r0 \n" // r25 <- MSB((a*b)+(a*b+1))

  "mul r21,r18 \n" // r0:r1 <- (a+1)*b
  "add r25,r0 \n" // r25 <- MSB((a*b)+(a*(b+1))) + MSB((a+1)*b)

  "eor r1,r1 \n"
  "ldi r26,0 \n"
  "ldi r27,0 \n"

  "sts c,r24 \n"
  "sts c+1,r25 \n"
  "sts c+2,r26 \n"
  "sts c+3,r27 \n"
  :::"r0","r1","r18","r19","r20","r21","r24","r25","r26","r27"
  );

  DUMP(c);
}

void loop() {
  // put your main code here, to run repeatedly:

}
uno:A5.2
uno:A4.2
uno:AREF
uno:GND.1
uno:13
uno:12
uno:11
uno:10
uno:9
uno:8
uno:7
uno:6
uno:5
uno:4
uno:3
uno:2
uno:1
uno:0
uno:IOREF
uno:RESET
uno:3.3V
uno:5V
uno:GND.2
uno:GND.3
uno:VIN
uno:A0
uno:A1
uno:A2
uno:A3
uno:A4
uno:A5