uint8_t A[13][13] = {{28, 122, 80, 42, 54, 122, 98, 42, 99, 58, 124, 29, 21}, {113, 85, 30, 35, 41, 98, 103, 68, 15, 50, 31, 80, 54}, {47, 37, 23, 96, 59, 47, 84, 26, 84, 72, 51, 118, 119}, {38, 121, 45, 21, 87, 91, 20, 69, 98, 119, 15, 89, 47}, {40, 71, 105, 76, 31, 65, 109, 30, 127, 110, 17, 64, 64}, {45, 20, 113, 86, 86, 51, 104, 115, 61, 103, 60, 113, 44}, {101, 107, 33, 63, 39, 47, 120, 20, 41, 64, 102, 59, 86}, {9, 42, 118, 26, 83, 123, 10, 82, 47, 108, 127, 4, 66}, {75, 26, 117, 80, 47, 111, 38, 22, 98, 101, 92, 100, 48}, {90, 9, 71, 36, 90, 95, 4, 94, 72, 29, 77, 118, 78}, {81, 75, 97, 127, 22, 8, 96, 80, 100, 88, 69, 114, 16}, {25, 109, 74, 3, 126, 56, 99, 15, 69, 73, 76, 19, 97}, {59, 84, 102, 53, 30, 34, 33, 105, 75, 102, 60, 121, 93}}; uint8_t B[13][13] = {{102, 61, 111, 79, 99, 3, 25, 50, 33, 48, 5, 94, 28}, {106, 89, 35, 37, 112, 51, 13, 70, 3, 110, 31, 7, 99}, {65, 115, 94, 68, 95, 114, 34, 34, 64, 1, 11, 66, 126}, {114, 37, 42, 3, 88, 35, 124, 50, 74, 95, 25, 34, 24}, {25, 111, 4, 116, 54, 90, 11, 32, 121, 20, 26, 62, 60}, {45, 41, 20, 33, 89, 75, 89, 2, 28, 19, 96, 46, 119}, {39, 68, 87, 59, 33, 82, 94, 14, 115, 0, 0, 92, 85}, {58, 62, 122, 106, 93, 39, 86, 80, 75, 23, 57, 89, 7}, {119, 75, 20, 42, 1, 120, 83, 24, 62, 78, 20, 25, 126}, {121, 42, 78, 45, 8, 17, 52, 38, 44, 13, 104, 57, 62}, {29, 96, 0, 64, 47, 50, 22, 17, 88, 63, 108, 78, 101}, {70, 108, 69, 12, 0, 80, 115, 107, 71, 54, 5, 57, 3}, {123, 72, 56, 5, 30, 45, 2, 11, 124, 84, 63, 47, 104}}; uint32_t C[13][13] ={{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}; #define LOADCOLUMN \ "ld r13,Y+;\n"\ "out 0x0A,r28; write to IOregister \n"\ "out 0x0B,r29; write to IOregister \n"\ "ldd r14,Y+(12);\n"\ "ldd r15,Y+25;\n"\ "ldd r16,Y+38;\n"\ "adiw Y,(51);\n"\ "ld r17, Y;\n"\ "ldd r18,Y+13;\n"\ "ldd r19,Y+26;\n"\ "ldd r20,Y+39;\n"\ "adiw Y,52;\n"\ "ld r21,Y;\n"\ "ldd r22,Y+13;\n"\ "ldd r23,Y+26;\n"\ "ldd r24,Y+39;\n"\ "ldd r25,Y+52;\n"\ "in r28,0x0A; read from IOregister \n"\ "in r29,0x0B; read from IOregister \n" #define MULROW \ "ld r12,X+; eerste\n"\ "mul r13,r12;\n"\ "movw r2,r0; copy naar sum1\n"\ "ld r12,X+; tweede\n"\ "mul r14,r12;\n"\ "add r2,r0;\n"\ "adc r3,r1;\n"\ "ld r12,X+; drie\n"\ "mul r15,r12; \n"\ "add r2,r0;\n"\ "adc r3,r1;\n"\ "ld r12,X+; vier\n"\ "mul r16,r12;\n"\ "add r2,r0;\n"\ "adc r3,r1;\n"\ "ld r12,X+; vijf\n"\ "mul r17,r12;\n"\ "movw r4,r0; copy naar sum2\n"\ "ld r12,X+; zes\n"\ "mul r18,r12;\n"\ "add r4,r0;\n"\ "adc r5,r1;\n"\ "ld r12,X+; load 7\n"\ "mul r19,r12;\n"\ "add r4,r0;\n"\ "adc r5,r1;\n"\ "ld r12,X+; load 8\n"\ "mul r20,r12;\n"\ "add r2,r0;\n"\ "adc r3,r1;\n"\ "ld r12,X+; load9\n"\ "mul r21,r12; \n"\ "movw r6,r0; copy naar sum3\n"\ "ld r12,X+; load 10\n"\ "mul r22,r12;\n"\ "add r6,r0;\n"\ "adc r7,r1;\n"\ "ld r12,X+;load 11\n"\ "mul r23,r12; \n"\ "add r6,r0;\n"\ "adc r7,r1;\n"\ "ld r12,X+; load 12\n"\ "mul r24,r12;\n"\ "add r6,r0;\n"\ "adc r7,r1;\n"\ "ld r12,X+; load 13\n"\ "mul r25,r12;\n"\ "movw r8,r0; copy naar sum4\n" #define SUBSUM \ "add r2,r4;\n"\ "adc r3,r5;\n"\ "clr r4;\n"\ "clr r5;\n"\ "adc r4,r4;\n"\ "add r2,r6;\n"\ "adc r3,r7;\n"\ "adc r4,r5;\n"\ "add r2,r8;\n"\ "adc r3,r9;\n"\ "adc r4,r5;\n" #define DOROW \ LOADCOLUMN \ MULROW \ SUBSUM void print_mat(uint32_t mat[13][13]) { int i, j; for (i = 0; i < 13; i++) { for (j = 0; j < 13; j++) { Serial.print(mat[i][j]); Serial.print(" "); } Serial.println(""); } } void setup() { Serial.begin(115200); uint8_t *B_ptr = &B[0][0]; uint8_t out = 0; //print_mat(C); // Serial.println(B_ptr); asm volatile( //"ld r2,Y+;\n" //"ld r1,Y+;\n" //"mov %0,r4;\n" DOROW "st Z, r2;\n" "std Z+1,r3;\n" "std Z+2,r4;\n" : : "z"(&(C[0][0])),"y" (&(B[0][0])), "x"(&(A[0][0])) : "memory","r0","r1","r2","r3","r4","r5","r6","r7","r8","r9","r11","r12","r13","r14","r15","r16","r17","r18","r19","r20","r21","r22","r23","r24","r25"); Serial.println(out); Serial.println("test\n"); Serial.println(out); Serial.println("dit werkt:\n"); print_mat(C); Serial.println("\n\n"); Serial.println(out,HEX); Serial.println(out,DEC); } void loop() {}