⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 nnm.nc

📁 elliptic curve加密源代码
💻 NC
📖 第 1 页 / 共 5 页
字号:
		  "adc r7, r19 \n\t"		  "adc r8, r19 \n\t"		  "adc r9, r19 \n\t"		  "adc r10, r19 \n\t"		  "T12: mul r13, r15 \n\t"  //t=2		  "add r5, r0 \n\t"		  "adc r6, r1 \n\t"		  "brcc T13 \n\t"		  "adc r7, r19 \n\t"		  "brcc T13 \n\t"		  "adc r8, r19 \n\t"		  "adc r9, r19 \n\t"		  "adc r10, r19 \n\t"		  "T13: mul r14, r15 \n\t"  //t=3		  "add r6, r0 \n\t"		  "adc r7, r1 \n\t"		  "brcc T14 \n\t"		  "adc r8, r19 \n\t"		  "brcc T14 \n\t"		  "adc r9, r19 \n\t"		  "adc r10, r19 \n\t"		  "T14: ld r15, Y+ \n\t"  //load c[j*d+2]		  "mul r11, r15 \n\t" //t=0, b0*c		  "add r4, r0 \n\t"		  "adc r5, r1 \n\t"		  "brcc T21 \n\t"		  "adc r6, r19 \n\t"		  "brcc T21 \n\t"		  "adc r7, r19 \n\t"		  "adc r8, r19 \n\t"		  "adc r9, r19 \n\t"		  "adc r10, r19 \n\t"		  "T21: mul r12, r15 \n\t"  //t=1		  "add r5, r0 \n\t"		  "adc r6, r1 \n\t"		  "brcc T22 \n\t"		  "adc r7, r19 \n\t"		  "brcc T22 \n\t"		  "adc r8, r19 \n\t"		  "adc r9, r19 \n\t"		  "adc r10, r19 \n\t"		  "T22: mul r13, r15 \n\t"  //t=2		  "add r6, r0 \n\t"		  "adc r7, r1 \n\t"		  "brcc T23 \n\t"		  "adc r8, r19 \n\t"		  "brcc T23 \n\t"		  "adc r9, r19 \n\t"		  "adc r10, r19 \n\t"		  "T23: mul r14, r15 \n\t"  //t=3		  "add r7, r0 \n\t"		  "adc r8, r1 \n\t"		  "brcc T24 \n\t"		  "adc r9, r19 \n\t"		  "adc r10, r19 \n\t"		  "T24: ld r15, Y+ \n\t"  //load c[j*d+3]		  "mul r11, r15 \n\t" //t=0, b0*c		  "add r5, r0 \n\t"		  "adc r6, r1 \n\t"		  "brcc T31 \n\t"		  "adc r7, r19 \n\t"		  "brcc T31 \n\t"		  "adc r8, r19 \n\t"		  "adc r9, r19 \n\t"		  "adc r10, r19 \n\t"		  "T31: mul r12, r15 \n\t"  //t=1		  "add r6, r0 \n\t"		  "adc r7, r1 \n\t"		  "brcc T32 \n\t"		  "adc r8, r19 \n\t"		  "brcc T32 \n\t"		  "adc r9, r19 \n\t"		  "adc r10, r19 \n\t"		  "T32: mul r13, r15 \n\t"  //t=2		  "add r7, r0 \n\t"		  "adc r8, r1 \n\t"		  "brcc T33 \n\t"		  "adc r9, r19 \n\t"		  "adc r10, r19 \n\t"		  "T33: mul r14, r15 \n\t"  //t=3		  "add r8, r0 \n\t"		  "adc r9, r1 \n\t"		  "adc r10, r19 \n\t"		  "cp r17, r16 \n\t"  //i == j?		  "breq  LOOP2_EXIT \n\t"		  "inc r17 \n\t"		  "jmp LOOP2 \n\t"		  "LOOP2_EXIT: st Z+, r2 \n\t"  //a[i*d] = r2		  "st Z+, r3 \n\t"		  "st Z+, r4 \n\t"		  "st Z+, r5 \n\t"		  "movw r2, r6 \n\t"  //can be speed up use movw		  "movw r4, r8 \n\t"		  "mov r6, r10 \n\t"  //can be remove		  "clr r7 \n\t"		  "clr r8 \n\t"		  "clr r9 \n\t"		  "clr r10 \n\t"		  "cp r16, %3 \n\t"  //i == 4?		  "breq LOOP1_EXIT \n\t"		  "inc r16 \n\t"		  "jmp LOOP1 \n\t"		  "LOOP1_EXIT: inc r16 \n\t"  //i = 5		  "LOOP3: mov r17, r16 \n\t"  //j = i-4		  "sub r17, %3 \n\t"		  "mul r25, %3 \n\t"		  "add r0, r25 \n\t"		  "movw r26, %A1 \n\t"		  "add r26, r0 \n\t"		  "adc r27, r1 \n\t"  //load b		  "mul r17, r25 \n\t"  //j*d		  "movw r28, %A2 \n\t"		  "add r28, r0 \n\t"		  "adc r29, r1 \n\t"  //load c		  "LOOP4: ld r14, -X \n\t"  //load b0~b(d-1)		  "ld r13, -X \n\t"		  "ld r12, -X \n\t"		  "ld r11, -X \n\t"		  "ld r15, Y+ \n\t"  //load c[j*d+0]		  "mul r11, r15 \n\t"  //t=0		  "add r2, r0 \n\t"		  "adc r3, r1 \n\t"		  "brcc T41 \n\t"		  "adc r4, r19 \n\t"		  "brcc T41 \n\t"		  "adc r5, r19 \n\t"		  "adc r6, r19 \n\t"		  "adc r7, r19 \n\t"		  "adc r8, r19 \n\t"		  "adc r9, r19 \n\t"		  "adc r10, r19 \n\t"		  "T41: mul r12, r15 \n\t"  //t=1		  "add r3, r0 \n\t"		  "adc r4, r1 \n\t"		  "brcc T42 \n\t"		  "adc r5, r19 \n\t"		  "brcc T42 \n\t"		  "adc r6, r19 \n\t"		  "adc r7, r19 \n\t"		  "adc r8, r19 \n\t"		  "adc r9, r19 \n\t"		  "adc r10, r19 \n\t"		  "T42: mul r13, r15 \n\t"  //t=2		  "add r4, r0 \n\t"		  "adc r5, r1 \n\t"		  "brcc T43 \n\t"		  "adc r6, r19 \n\t"		  "brcc T43 \n\t"		  "adc r7, r19 \n\t"		  "adc r8, r19 \n\t"		  "adc r9, r19 \n\t"		  "adc r10, r19 \n\t"		  "T43: mul r14, r15 \n\t"  //t=3		  "add r5, r0 \n\t"		  "adc r6, r1 \n\t"		  "brcc T44 \n\t"		  "adc r7, r19 \n\t"		  "brcc T44 \n\t"		  "adc r8, r19 \n\t"		  "adc r9, r19 \n\t"		  "adc r10, r19 \n\t"		  "T44: ld r15, Y+ \n\t"  //load c		  "mul r11, r15 \n\t" //t=0, b0*c		  "add r3, r0 \n\t"		  "adc r4, r1 \n\t"		  "brcc T51 \n\t"		  "adc r5, r19 \n\t"		  "brcc T51 \n\t"		  "adc r6, r19 \n\t"		  "adc r7, r19 \n\t"		  "adc r8, r19 \n\t"		  "adc r9, r19 \n\t"		  "adc r10, r19 \n\t"		  "T51: mul r12, r15 \n\t"  //t=1		  "add r4, r0 \n\t"		  "adc r5, r1 \n\t"		  "brcc T52 \n\t"		  "adc r6, r19 \n\t"		  "brcc T52 \n\t"		  "adc r7, r19 \n\t"		  "adc r8, r19 \n\t"		  "adc r9, r19 \n\t"		  "adc r10, r19 \n\t"		  "T52: mul r13, r15 \n\t"  //t=2		  "add r5, r0 \n\t"		  "adc r6, r1 \n\t"		  "brcc T53 \n\t"		  "adc r7, r19 \n\t"		  "brcc T53 \n\t"		  "adc r8, r19 \n\t"		  "adc r9, r19 \n\t"		  "adc r10, r19 \n\t"		  "T53: mul r14, r15 \n\t"  //t=3		  "add r6, r0 \n\t"		  "adc r7, r1 \n\t"		  "brcc T54 \n\t"		  "adc r8, r19 \n\t"		  "brcc T54 \n\t"		  "adc r9, r19 \n\t"		  "adc r10, r19 \n\t"		  "T54: ld r15, Y+ \n\t"  //load c		  "mul r11, r15 \n\t" //t=0, b0*c		  "add r4, r0 \n\t"		  "adc r5, r1 \n\t"		  "brcc T61 \n\t"		  "adc r6, r19 \n\t"		  "brcc T61 \n\t"		  "adc r7, r19 \n\t"		  "adc r8, r19 \n\t"		  "adc r9, r19 \n\t"		  "adc r10, r19 \n\t"		  "T61: mul r12, r15 \n\t"  //t=1		  "add r5, r0 \n\t"		  "adc r6, r1 \n\t"		  "brcc T62 \n\t"		  "adc r7, r19 \n\t"		  "brcc T62 \n\t"		  "adc r8, r19 \n\t"		  "adc r9, r19 \n\t"		  "adc r10, r19 \n\t"		  "T62: mul r13, r15 \n\t"  //t=2		  "add r6, r0 \n\t"		  "adc r7, r1 \n\t"		  "brcc T63 \n\t"		  "adc r8, r19 \n\t"		  "brcc T63 \n\t"		  "adc r9, r19 \n\t"		  "adc r10, r19 \n\t"		  "T63: mul r14, r15 \n\t"  //t=3		  "add r7, r0 \n\t"		  "adc r8, r1 \n\t"		  "brcc T64 \n\t"		  "adc r9, r19 \n\t"		  "adc r10, r19 \n\t"		  "T64: ld r15, Y+ \n\t"  //load c		  "mul r11, r15 \n\t" //t=0, b0*c		  "add r5, r0 \n\t"		  "adc r6, r1 \n\t"		  "brcc T71 \n\t"		  "adc r7, r19 \n\t"		  "brcc T71 \n\t"		  "adc r8, r19 \n\t"		  "adc r9, r19 \n\t"		  "adc r10, r19 \n\t"		  "T71: mul r12, r15 \n\t"  //t=1		  "add r6, r0 \n\t"		  "adc r7, r1 \n\t"		  "brcc T72 \n\t"		  "adc r8, r19 \n\t"		  "brcc T72 \n\t"		  "adc r9, r19 \n\t"		  "adc r10, r19 \n\t"		  "T72: mul r13, r15 \n\t"  //t=2		  "add r7, r0 \n\t"		  "adc r8, r1 \n\t"		  "brcc T73 \n\t"		  "adc r9, r19 \n\t"		  "adc r10, r19 \n\t"		  "T73: mul r14, r15 \n\t"  //t=3		  "add r8, r0 \n\t"		  "adc r9, r1 \n\t"		  "adc r10, r19 \n\t"		  "cp r17, %3 \n\t"  //j=4?		  "breq  LOOP4_EXIT \n\t"		  "inc r17 \n\t"		  "jmp LOOP4 \n\t"		  "LOOP4_EXIT: st Z+, r2 \n\t"  //a[i*d] = r2		  "st Z+, r3 \n\t"		  "st Z+, r4 \n\t"		  "st Z+, r5 \n\t"		  "movw r2, r6 \n\t"  //can be speed up use movw		  "movw r4, r8 \n\t"		  "mov r6, r10 \n\t"  //can be remove		  "clr r7 \n\t"		  "clr r8 \n\t"		  "clr r9 \n\t"		  "clr r10 \n\t"		  "mov r0, %3 \n\t"		  "lsl r0 \n\t"		  "cp r16, r0 \n\t"		  "breq LOOP3_EXIT \n\t"		  "inc r16 \n\t"		  "jmp LOOP3 \n\t"		  "LOOP3_EXIT: st Z+, r2 \n\t"		  "st Z+, r3 \n\t"		  "st Z+, r4 \n\t"		  "st Z+, r5 \n\t"		  "pop r29 \n\t"		  "pop r28 \n\t"		  "pop r1 \n\t"		  //"pop r0 \n\t"		  :		  :"z"(a),"a"(b),"a"(c),"r"(n_d)		  :"r0","r1","r2","r3","r4","r5","r6","r7","r8","r9","r10","r11","r12","r13","r14","r15","r16","r17","r19","r25","r26","r27","r28","r29"		  );#else    uint8_t n_d;    n_d = digits/5;    //n_d = 4;    //r2~r6 r8~r12 r25  acumulator    //r13~r17  save b    //r18  c    //r19  i    //r20  j    //r21  0    //r22  d    //r24  2*(n/d)-2    asm volatile ("push r0 \n\t"		  "push r1 \n\t"		  "push r28 \n\t"		  "push r29 \n\t"		  "clr r2 \n\t"  //init 11 registers for accumulator		  "clr r3 \n\t"		  "clr r4 \n\t"		  "clr r5 \n\t"		  "clr r6 \n\t"		  "clr r8 \n\t"		  "clr r9 \n\t"		  "clr r10 \n\t"		  "clr r11 \n\t"		  "clr r12 \n\t"		  "clr r25 \n\t"//end of init		  "clr r21 \n\t"  //r21=0		  "ldi r22, 5 \n\t"  //r22=d=5		  "dec %3 \n\t"		  "mov r24, %3 \n\t"		  "lsl r24 \n\t"		  "ldi r19, 0 \n\t"  //i		  "LOOP1: ldi r20, 0 \n\t"  //j		  "mul r19, r22 \n\t"		  "add r0, r22 \n\t"		  "add %A1, r0 \n\t"		  "adc %B1, r1 \n\t"  //load b		  "LOOP2: ld r17, -%a1 \n\t"  //load b0~b(d-1)		  "ld r16, -%a1 \n\t"		  "ld r15, -%a1 \n\t"		  "ld r14, -%a1 \n\t"		  "ld r13, -%a1 \n\t"		  "ld r18, %a2+ \n\t"		  "mul r13, r18 \n\t"  //t=0		  "add r2, r0 \n\t"		  "adc r3, r1 \n\t"		  "brcc T01 \n\t"		  "adc r4, r21 \n\t"		  "brcc T01 \n\t"		  "adc r5, r21 \n\t"		  "adc r6, r21 \n\t"		  "adc r8, r21 \n\t"		  "adc r9, r21 \n\t"		  "adc r10, r21 \n\t"		  "adc r11, r21 \n\t"		  "adc r12, r21 \n\t"		  "adc r25, r21 \n\t"		  "T01: mul r14, r18 \n\t"  //t=1		  "add r3, r0 \n\t"		  "adc r4, r1 \n\t"		  "brcc T02 \n\t"		  "adc r5, r21 \n\t"		  "brcc T02 \n\t"		  "adc r6, r21 \n\t"		  "adc r8, r21 \n\t"		  "adc r9, r21 \n\t"		  "adc r10, r21 \n\t"		  "adc r11, r21 \n\t"		  "adc r12, r21 \n\t"		  "adc r25, r21 \n\t"		  "T02: mul r15, r18 \n\t"  //t=2		  "add r4, r0 \n\t"		  "adc r5, r1 \n\t"		  "brcc T03 \n\t"		  "adc r6, r21 \n\t"		  "brcc T03 \n\t"		  "adc r8, r21 \n\t"		  "adc r9, r21 \n\t"		  "adc r10, r21 \n\t"		  "adc r11, r21 \n\t"		  "adc r12, r21 \n\t"		  "adc r25, r21 \n\t"		  "T03: mul r16, r18 \n\t"  //t=3		  "add r5, r0 \n\t"		  "adc r6, r1 \n\t"		  "brcc T04 \n\t"		  "adc r8, r21 \n\t"		  "brcc T04 \n\t"		  "adc r9, r21 \n\t"		  "adc r10, r21 \n\t"		  "adc r11, r21 \n\t"		  "adc r12, r21 \n\t"		  "adc r25, r21 \n\t"		  "T04: mul r17, r18 \n\t"  //t=4		  "add r6, r0 \n\t"		  "adc r8, r1 \n\t"		  "brcc T05 \n\t"		  "adc r9, r21 \n\t"		  "brcc T05 \n\t"		  "adc r10, r21 \n\t"		  "adc r11, r21 \n\t"		  "adc r12, r21 \n\t"		  "adc r25, r21 \n\t"		  "T05: ld r18, %a2+ \n\t"  //load c		  "mul r13, r18 \n\t" //t=0, b0*c		  "add r3, r0 \n\t"		  "adc r4, r1 \n\t"		  "brcc T11 \n\t"		  "adc r5, r21 \n\t"		  "brcc T11 \n\t"		  "adc r6, r21 \n\t"		  "adc r8, r21 \n\t"		  "adc r9, r21 \n\t"		  "adc r10, r21 \n\t"		  "adc r11, r21 \n\t"		  "adc r12, r21 \n\t"		  "adc r25, r21 \n\t"		  "T11: mul r14, r18 \n\t"  //t=1		  "add r4, r0 \n\t"		  "adc r5, r1 \n\t"		  "brcc T12 \n\t"		  "adc r6, r21 \n\t"		  "brcc T12 \n\t"		  "adc r8, r21 \n\t"		  "adc r9, r21 \n\t"		  "adc r10, r21 \n\t"		  "adc r11, r21 \n\t"		  "adc r12, r21 \n\t"		  "adc r25, r21 \n\t"		  "T12: mul r15, r18 \n\t"  //t=2		  "add r5, r0 \n\t"		  "adc r6, r1 \n\t"		  "brcc T13 \n\t"		  "adc r8, r21 \n\t"		  "brcc T13 \n\t"		  "adc r9, r21 \n\t"		  "adc r10, r21 \n\t"		  "adc r11, r21 \n\t"		  "adc r12, r21 \n\t"		  "adc r25, r21 \n\t"		  "T13: mul r16, r18 \n\t"  //t=3		  "add r6, r0 \n\t"		  "adc r8, r1 \n\t"		  "brcc T14 \n\t"		  "adc r9, r21 \n\t"		  "brcc T14 \n\t"		  "adc r10, r21 \n\t"		  "adc r11, r21 \n\t"		  "adc r12, r21 \n\t"		  "adc r25, r21 \n\t"		  "T14: mul r17, r18 \n\t"  //t=4		  "add r8, r0 \n\t"		  "adc r9, r1 \n\t"		  "brcc T15 \n\t"		  "adc r10, r21 \n\t"		  "brcc T15 \n\t"		  "adc r11, r21 \n\t"		  "adc r12, r21 \n\t"		  "adc r25, r21 \n\t"		  "T15: ld r18, %a2+ \n\t"  //load c		  "mul r13, r18 \n\t" //t=0, b0*c		  "add r4, r0 \n\t"		  "adc r5, r1 \n\t"		  "brcc T21 \n\t"		  "adc r6, r21 \n\t"		  "brcc T21 \n\t"		  "adc r8, r21 \n\t"		  "adc r9, r21 \n\t"		  "adc r10, r21 \n\t"		  "adc r11, r21 \n\t"		  "adc r12, r21 \n\t"		  "adc r25, r21 \n\t"		  "T21: mul r14, r18 \n\t"  //t=1		  "add r5, r0 \n\t"		  "adc r6, r1 \n\t"		  "brcc T22 \n\t"		  "adc r8, r21 \n\t"		  "brcc T22 \n\t"		  "adc r9, r21 \n\t"		  "adc r10, r21 \n\t"		  "adc r11, r21 \n\t"		  "adc r12, r21 \n\t"		  "adc r25, r21 \n\t"		  "T22: mul r15, r18 \n\t"  //t=2		  "add r6, r0 \n\t"		  "adc r8, r1 \n\t"		  "brcc T23 \n\t"		  "adc r9, r21 \n\t"		  "brcc T23 \n\t"		  "adc r10, r21 \n\t"		  "adc r11, r21 \n\t"		  "adc r12, r21 \n\t"		  "adc r25, r21 \n\t"		  "T23: mul r16, r18 \n\t"  //t=3		  "add r8, r0 \n\t"		  "adc r9, r1 \n\t"		  "brcc T24 \n\t"		  "adc r10, r21 \n\t"		  "brcc T24 \n\t"		  "adc r11, r21 \n\t"		  "adc r12, r21 \n\t"		  "adc r25, r21 \n\t"		  "T24: mul r17, r18 \n\t"  //t=4		  "add r9, r0 \n\t"		  "adc r10, r1 \n\t"		  "brcc T25 \n\t"		  "adc r11, r21 \n\t"		  "brcc T25 \n\t"		  "adc r12, r21 \n\t"		  "adc r25, r21 \n\t"		  "T25: ld r18, %a2+ \n\t"  //load c		  "mul r13, r18 \n\t" //t=0, b0*c		  "add r5, r0 \n\t"		  "adc r6, r1 \n\t"		  "brcc T31 \n\t"		  "adc r8, r21 \n\t"		  "brcc T31 \n\t"		  "adc r9, r21 \n\t"		  "adc r10, r21 \n\t"		  "adc r11, r21 \n\t"		  "adc r12, r21 \n\t"		  "adc r25, r21 \n\t"		  "T31: mul r14, r18 \n\t"  //t=1		  "add r6, r0 \n\t"		  "adc r8, r1 \n\t"		  "brcc T32 \n\t"		  "adc r9, r21 \n\t"		  "brcc T32 \n\t"

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -