#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