📄 rsa68k.s
字号:
/* RSA68K.S - processor-specific C library routines for RSAEURO Copyright (c) J.S.A.Kapp 1994 - 1995. RSAEURO - RSA Library compatible with RSAREF 2.0. All functions prototypes are the Same as for RSAREF. To aid compatiblity the source and the files follow the same naming comventions that RSAREF uses. This should aid direct importing to your applications. This library is legal everywhere outside the US. And should NOT be imported to the US and used there. Secure Standard Library Routines, MC68000 assembler versions. These are only applicable if NN_DIGIT equal to a 32-bit word. Requires the 'as' assembler to assemble. Should work on all 680x0 family processors. The 'as' assembler comes with GNU gcc and is included with 'cc' that comes with UNIX boxes. Revision history 0.90 First revision, this is code designed to run on a M68k processor when compiled using gcc. Support for R_STDLIB.C functions. Also added code for a selection of NN.C functions to improve the speed on the multi-precision math routines. Functions added: _R_memset, _R_memcpy, _R_memcmp, _NN_Digits, _NN_Assign, _NN_Add, _NN_Decode, _NN_Encode, _NN_AssignZero, _NN_Zero, _NN_Cmp. Some speed increases where noticed with the addition of these functions. 1.00 23/6/95, Final Release Version*/ /* R_STDLIB Routines */ .even .globl _R_memset_R_memset: link a6, #0 movel a6@(16), d1 tstl d1 jeq set1 movel a6@(8), a0 moveb a6@(15), d0set2: moveb d0, a0@ addql #1, a0 subql #1, d1 tstl d1 jne set2set1: unlk a6 rts .even .globl _R_memcpy/*Alternative _R_memcpy routine, should work exactly the same as the other._R_memcpy: link a6,#0 tstl a6@(16) jeq cpy1cpy2: movel a6@(8),a0 movel a6@(12),a1 moveb a1@,a0@ addql #1,a6@(12) addql #1,a6@(8) subql #1,a6@(16) tstl a6@(16) jne cpy2cpy1: unlk a6 rts*/_R_memcpy: link a6, #0 movel a6@(16), d1 tstl d1 jeq cpy1 movel a6@(8), a1 movel a6@(12), a0 clrl d0cpy2: moveb a0@(d0:l), a1@(d0:l) addql #1,d0 cmpl d0, d1 jhi cpy2cpy1: unlk a6 rts .even .globl _R_memcmp_R_memcmp: link a6, #0 movel d2, sp@- tstl a6@(16) jeq cmp1 movel a6@(8), a0 movel a6@(12), a1cmp4: moveb a1@, d0 addqw #1, a1 moveb a0@, d1 addqw #1, a0 cmpb d1, d0 jeq cmp2 subqw #1, a0 clrl d0 moveb a0@, d0 subqw #1, a1 clrl d1 moveb a1@, d1 movel d0, d2 subl d1, d2 movel d2, d1 movel d1, d0 jra cmp3cmp2: subql #1, a6@(16) tstl a6@(16) jne cmp4cmp1: clrl d0cmp3: movel a6@(-4), d2 unlk a6 rts /* Multipresecion Math Routines */ .even .globl _NN_Digits_NN_Digits: link a6,#0 movel a6@(8), a0 movel a6@(12), d0 jra digit1digit2: tstl a0@(d0:l:4) jne digitexitdigit1: subql #1, d0 jpl digit2digitexit: addql #1, d0 unlk a6 rts .even .globl _NN_Decode_NN_Decode: link a6,#0 moveml #0x3e20, sp@- movel a6@(8), a2 movel a6@(12), d5 movel a6@(16), a1 subl a0, a0 movel a6@(20), d1 subql #1, d1 jmi dec1dec4: clrl d4 clrl d2 tstl d1 jlt dec2 clrl d3dec3: moveb a1@(d1:l), d3 movel d3, d0 lsll d2, d0 orl d0, d4 subql #1, d1 addql #8, d2 tstl d1 jlt dec2 moveq #31, d6 cmpl d2, d6 jcc dec3dec2: movel d4, a2@(a0:l:4) addqw #1, a0 tstl d1 jge dec4 jra dec1dec5: clrl a2@(a0:l:4) addqw #1, a0dec1: cmpl a0, d5 jhi dec5 moveml a6@(-24), #0x47c unlk a6 rts .even .globl _NN_Encode_NN_Encode: link a6,#0 moveml #0x3c20, sp@- movel a6@(8), a1 movel a6@(16), a2 movel a6@(20), d4 subl a0, a0 movel a6@(12), d1 subql #1, d1 clrl d5 cmpl d5, d4 jls enc1enc4: movel a2@(a0:l:4), d3 clrl d2 tstl d1 jlt enc2enc3: movel d3, d0 lsrl d2, d0 moveb d0, a1@(d1:l) subql #1, d1 addql #8, d2 tstl d1 jlt enc2 moveq #31, d5 cmpl d2, d5 jcc enc3enc2: addqw #1, a0 cmpl a0, d4 jhi enc4 jra enc1enc5: clrb a1@(d1:l) subql #1, d1enc1: tstl d1 jge enc5 moveml a6@(-20), #0x43c unlk a6 rts .even .globl _NN_Assign_NN_Assign: link a6,#0 movel d2,sp@- movel a6@(16), d1 tstl d1 jeq ass1 movel a6@(8), a1 movel a6@(12), a0 clrl d0ass2: movel a0@(d0:l:4), a1@(d0:l:4) addql #1, d0 cmpl d0, d1 jhi ass2ass1: movel a6@(-4), d2 unlk a6 rts .even .globl _NN_AssignZero_NN_AssignZero: link a6,#0 movel d2,sp@- movel a6@(12), d1 tstl d1 jeq ass1 movel a6@(8), a0 clrl d0 clrl d2ass2: movel d2, a0@(d0:l:4) addql #1, d0 cmpl d0, d1 jhi ass2ass1: movel a6@(-4), d2 unlk a6 rts .even .globl _NN_Add_NN_Add: link a6,#0 moveml #0x3030, sp@- movel a6@(20), d2 tstl d2 jeq add1 movel a6@(8), a3 movel a6@(12), a2 movel a6@(16), a1 clrl d0 clrl d1add4: movel d0, a0 addl a2@(d1:l:4), a0 cmpl a0, d0 jls add2 movel a1@(d1:l:4), a0 jra add3add2: addl a1@(d1:l:4), a0 cmpl a1@(d1:l:4), a0 scs d0 extbl d0 negl d0add3: movel a0,a3@(d1:l:4) addql #1, d1 cmpl d1, d2 jhi add4add1: moveml a6@(-16), #0xc0c unlk a6 rts .even .globl _NN_Cmp_NN_Cmp: link a6, #0 movel a6@(8), a1 movel a6@(12), a0 movel a6@(16), d0ncmp4: tstl d0 jeq ncmp1 subql #1, d0 movel a1@(d0:l:4), d1 cmpl a0@(d0:l:4), d1 jls ncmp2 movel #1, d0 jra ncmp3ncmp2: jcc ncmp4 movel #-1, d0 jra ncmp3ncmp1: clrl d0ncmp3: unlk a6 rts .even .globl _NN_Zero_NN_Zero: link a6, #0 movel a6@(8), a0 movel a6@(12), d0 jeq nzero1nzero2: tstl a0@+ jne nzero3 subql #1, d0 jne nzero2nzero3: clrl d0 jra nzero4nzero1: movel #1, d0nzero4: unlk a6 rts
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -