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

📄 gccmsp430.mcs

📁 比较新的功能强大的rsa算法源代码,方便使用.
💻 MCS
字号:
; Comba/KCM Macros for TI msp430
;
; Triple register is r11|r10|r9
;
; See makemcs.txt for more information about this file
;
; Contributed by Piotr Szczechowiak
; (uses hardware multiplier)
; 
MACRO MUL_START
  asm(
  "mov %%[a],r13\n\t"
  "mov %%[b],r14\n\t"
  "mov %%[c],r15\n\t"
  "clr r9\n\t"
  "clr r10\n\t"
  "clr r11\n\t"
  "clr r12\n\t"
  "push r2\n\t"
  "dint\n\t"
  "nop\n\t"
ENDM
;
; STEP macros
;
MACRO STEP
  "mov 2*%d(r13),&__MPY\n\t"
  "mov 2*%d(r14),&__OP2\n\t"
  "add &__RESLO,r9\n\t"
  "addc &__RESHI,r10\n\t"
  "addc r12,r11\n\t"
ENDM
;
; MFIN macro
;
MACRO MFIN
  "mov r9,2*%d(r15)\n\t"
  "mov r10,r9\n\t"
  "mov r11,r10\n\t"
  "clr r11\n\t"
ENDM
;
; LAST
;
MACRO LAST
  "mov 2*%d(r13),&__MPY\n\t"
  "mov 2*%d(r14),&__OP2\n\t"
  "add &__RESLO,r9\n\t"
ENDM
;
; MULE
;
MACRO MUL_END
  "mov r9,2*%d(r15)\n\t"
  "pop r2\n\t"
  "eint\n\t"
  :  
  : [a] "m" (a), [b] "m" (b), [c] "m" (c)
  :"r9","r10","r11","r12","r13","r14","r15"
  );
ENDM
;
; SQR_START
;
MACRO SQR_START
  asm(
  "mov %%[a],r14\n\t"
  "mov %%[c],r15\n\t"
  "clr r10\n\t"
  "clr r11\n\t"
  "clr r12\n\t"
  "clr r13\n\t"
  "push r2\n\t"
  "dint\n\t"
  "nop\n\t"
ENDM
;
; DSTEP
;
MACRO DSTEP
  "mov 2*%d(r14),&__MPY\n\t"
  "mov 2*%d(r14),&__OP2\n\t"
  "add &__RESLO,r10\n\t"
  "addc &__RESHI,r11\n\t"
  "addc r13,r12\n\t"  
  "add &__RESLO,r10\n\t"
  "addc &__RESHI,r11\n\t"
  "addc r13,r12\n\t"  
ENDM
;
; SELF
;
MACRO SELF
  "mov 2*%d(r14),&__MPY\n\t"
  "mov 2*%d(r14),&__OP2\n\t"
  "add &__RESLO,r10\n\t"
  "addc &__RESHI,r11\n\t"
  "addc r13,r12\n\t"  
ENDM
;
; SFIN
;
MACRO SFIN
  "mov r10,2*%d(r15)\n\t"
  "mov r11,r10\n\t"
  "mov r12,r11\n\t"
  "clr r12\n\t"
ENDM
;
; SQR_END
;
MACRO SQR_END
  "mov r10,2*%d(r15)\n\t"
  "pop r2\n\t"
  "eint\n\t"
  :  
  : [a] "m" (a), [c] "m" (c)
  :"r10","r11","r12","r13","r14","r15"
  );
ENDM
;
; REDC_START
;
MACRO REDC_START
  asm(
  "mov %%[a],r13\n\t"
  "mov %%[b],r14\n\t"
  "mov %%[ndash],r15\n\t"
  "clr r9\n\t"
  "clr r10\n\t"
  "clr r11\n\t"
  "clr r12\n\t"
  "mov @r13,r9\n\t"
  "push r2\n\t"
  "dint\n\t"
  "nop\n\t"
ENDM
;
; RFINU macro
;
MACRO RFINU
  "mov r9,&__MPY\n\t"
  "mov @r15,&__OP2\n\t"
  "add &__RESLO,2*%d(r13)\n\t"
  "mov @r14,&__MPY\n\t"
  "mov &__RESLO,&__OP2\n\t"
  "add &__RESLO,r9\n\t"
  "addc &__RESHI,r10\n\t"
  "addc r12,r11\n\t"
  "mov r10,r9\n\t"
  "mov r11,r10\n\t"
  "clr r11\n\t"
  "add 2*%d+1(r13),r9\n\t"
  "addc r12,r10\n\t"
  "clr r11\n\t"
ENDM
;  
; RFIND macro
;
MACRO RFIND
  "mov r9,2*%d(r13)\n\t"
  "mov r10,r9\n\t"
  "mov r11,r10\n\t"
  "clr r11\n\t"
  "add 2*%d+1(r13),r9\n\t"
  "addc r12,r10\n\t"
  "clr r11\n\t"
ENDM
;
; REDC_END macro
;
MACRO REDC_END
  "mov r9,2*%d(r15)\n\t"
  "mov r10,2*%d+1(r15)\n\t"
  "pop r2\n\t"
  "eint\n\t"
  :  
  : [a] "m" (a), [b] "m" (b), [ndash] "m" (ndash)
  :"r9","r10","r11","r12","r13","r14","r15"
  );
ENDM
;
; ADD_START macro
;
MACRO ADD_START
  asm(
  "mov %%[a],r11\n\t"
  "mov %%[b],r12\n\t"
  "mov @r11+,r13\n\t"
  "mov @r12+,r14\n\t"
  "add r14,r13\n\t"
  "mov %%[c],r15\n\t"
  "mov r13,2*0(r15)\n\t"
ENDM
;
; ADD macro  - c[.]=a[.]+b[.]
;
MACRO ADD
  "mov @r11+,r13\n\t"
  "mov @r12+,r14\n\t"
  "addc r14,r13\n\t"
  "mov r13,2*%d(r15)\n\t"
ENDM
;
; ADD_END macro.
;
MACRO ADD_END
  "clr r14\n\t"
  "adc r14\n\t"
  "mov r14,%%[carry]\n\t"
  : [carry] "=m" (carry) 
  : [a] "m" (a), [b] "m" (b), [c] "m" (c), "[carry]" (carry) 
  :"r11","r12","r13","r14","r15"
  );
ENDM
;
; INC_START macro. Do first one.
;
MACRO INC_START
  asm(
  "mov %%[a],r12\n\t"
  "mov %%[b],r13\n\t"
  "mov 2*0(r12),r14\n\t"
  "mov @r13+,r15\n\t"
  "add r15,r14\n\t"
  "mov r14,2*0(r12)\n\t"
ENDM
;
; INC macro  a[.]+=b[.]
;
MACRO INC
  "mov 2*%d(r12),r14\n\t"
  "mov @r13+,r15\n\t"
  "addc r15,r14\n\t"
  "mov r14,2*%d(r12)\n\t"
ENDM
MACRO INC_END
  "clr r15\n\t"
  "adc r15\n\t"
  "mov r15,%%[carry]\n\t"
  : [carry] "=m" (carry) 
  : [a] "m" (a), [b] "m" (b), "[carry]" (carry) 
  :"r12","r13","r14","r15"
  );
ENDM
MACRO SUB_START
  asm(
  "mov %%[a],r11\n\t"
  "mov %%[b],r12\n\t"
  "mov @r11+,r13\n\t"
  "mov @r12+,r14\n\t"
  "sub r14,r13\n\t"
  "mov %%[c],r15\n\t"
  "mov r13,2*0(r15)\n\t"
ENDM
;
; SUB macro - c[.]=a[.]-b[.]
;
MACRO SUB
  "mov @r11+,r13\n\t"
  "mov @r12+,r14\n\t"
  "subc r14,r13\n\t"
  "mov r13,2*%d(r15)\n\t"
ENDM
MACRO SUB_END
  "clr r14\n\t"
  "adc r14\n\t"
  "xor.b #1,r14\n\t"
  "mov r14,%%[carry]\n\t"
  : [carry] "=m" (carry) 
  : [a] "m" (a), [b] "m" (b), [c] "m" (c), "[carry]" (carry) 
  :"r11","r12","r13","r14","r15"
  );
ENDM
;
; DEC_START macro
;
MACRO DEC_START
  asm(
  "mov %%[a],r12\n\t"
  "mov %%[b],r13\n\t"
  "mov 2*0(r12),r14\n\t"
  "mov @r13+,r15\n\t"
  "sub r15,r14\n\t"
  "mov r14,2*0(r12)\n\t"
ENDM
; 
; DEC macro  a[.]-=b[.]
;
MACRO DEC
  "mov 2*%d(r12),r14\n\t"
  "mov @r13+,r15\n\t"
  "subc r15,r14\n\t"
  "mov r14,2*%d(r12)\n\t"
ENDM
;
; DEC_END macro
;
MACRO DEC_END
  "clr r15\n\t"
  "adc r15\n\t"
  "xor.b #1,r15\n\t"
  "mov r15,%%[carry]\n\t"
  : [carry] "=m" (carry) 
  : [a] "m" (a), [b] "m" (b), "[carry]" (carry) 
  :"r12","r13","r14","r15"
  );
ENDM
;
; KADD_START macro. Zero Carry
;
MACRO KADD_START
  asm(
  "mov %%[a],r12\n\t"
  "mov %%[b],r13\n\t"
  "mov %%[c],r14\n\t"
  "mov %%[n],r15\n\t"
  "clrc\n\t"
  "k%d:\n"
ENDM
;
; KASL macro
;
MACRO KASL
  "dec r15\n\t"
  "jz k%d\n\t"
  "clr r11\n\t"
  "adc r11\n\t"
  "add #2*%d,r12\n\t"
  "add #2*%d,r13\n\t"
  "add #2*%d,r14\n\t"
  "rrc r11\n\t"
  "jmp k%d\n\t"
  "k%d:\n\t"
ENDM
;
; KADD_END macro
;
MACRO KADD_END
  "clr r11\n\t"
  "adc r11\n\t"
  "mov r11,%%[carry]\n\t"
  : [carry] "=m" (carry)   
  : [a] "m" (a), [b] "m" (b), [c] "m" (c) , [n] "m" (n), "[carry]" (carry) 
  :"r11","r12","r13","r14","r15"
  );
ENDM
;
; KINC_START macro
;
MACRO KINC_START
  asm(
  "mov %%[a],r12\n\t"
  "mov %%[b],r13\n\t"
  "mov %%[n],r15\n\t"
  "clrc\n\t"
  "k%d:\n"
ENDM
;
; KIDL macro
;
MACRO KIDL
  "dec r15\n\t"
  "jz k%d\n\t"
  "clr r14\n\t"
  "adc r14\n\t"
  "add #2*%d,r12\n\t"
  "add #2*%d,r13\n\t"
  "rrc r14\n\t"
  "jmp k%d\n\t"
  "k%d:\n\t"
ENDM
;
; KINC_END macro
;
MACRO KINC_END
  "clr r14\n\t"
  "adc r14\n\t"
  "mov r14,%%[carry]\n\t"
  : [carry] "=m" (carry)   
  : [a] "m" (a), [b] "m" (b), [n] "m" (n), "[carry]" (carry) 
  :"r12","r13","r14","r15"
  );
ENDM
;
; KDEC_START macro. Zero carry
;
MACRO KDEC_START
  asm(
  "mov %%[a],r12\n\t"
  "mov %%[b],r13\n\t"
  "mov %%[n],r15\n\t"
  "clrc\n\t"
  "k%d:\n"
ENDM
;
; KDEC_END macro
;
MACRO KDEC_END
  "clr r14\n\t"
  "adc r14\n\t"
  "mov r14,%%[carry]\n\t"
  : [carry] "=m" (carry)    
  : [a] "m" (a), [b] "m" (b), [n] "m" (n), "[carry]" (carry) 
  :"r12","r13","r14","r15"
  );
ENDM

⌨️ 快捷键说明

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