📄 lfsr.s
字号:
#define Polynom_S 0xC7D5621F
#define Polynom_A 0x5703CF4C
#define rS0 r2 // register S
#define rS1 r3
#define rS2 r4
#define rS3 r5
#define rA0 r6 // register A
#define rA1 r7
#define rA2 r8
#define rA3 r9
#define pS0 r18 // polynom S
#define pS1 r19
#define pS2 r20
#define pS3 r21
#define pA0 r26 // polynom A
#define pA1 r27
#define pA2 r30
#define pA3 r31
#define rR0 r22 // result
#define rR1 r23
#define rR2 r24
#define rR3 r25
#define cnt r0 // bit counter
.data
.extern lfsr_S
.extern lfsr_A
.text
.global lfsr
.type lfsr, @function
lfsr:
push rS0
push rS1
push rS2
push rS3
push rA0
push rA1
push rA2
push rA3
mov cnt, r24 // bitcount
clr rR0 // result = 0
clr rR1
clr rR2
clr rR3
ldi pS3, 0xC7
ldi pS2, 0xD5
ldi pS1, 0x62
ldi pS0, 0x1F
ldi pA3, 0x57
ldi pA2, 0x03
ldi pA1, 0xCF
ldi pA0, 0x4C
lds rS0, lfsr_S +0
lds rS1, lfsr_S +1
lds rS2, lfsr_S +2
lds rS3, lfsr_S +3
lds rA0, lfsr_A +0
lds rA1, lfsr_A +1
lds rA2, lfsr_A +2
lds rA3, lfsr_A +3
_0: bst rS0, 0 // t = odd(register s)
lsr rS3 // register s = register s >> 1
ror rS2
ror rS1
ror rS0
lsr rA3 // register a = register a >> 1
ror rA2
ror rA1
ror rA0
brcc _1 // register a was even ??
eor rA3, pA3 // register a = register a xor polynom a
eor rA2, pA2
eor rA1, pA1
eor rA0, pA0
sec
_1: brtc _0 // if register s was even
rol rR0 // result = result << 1 + odd(register a) before right shift
rol rR1
rol rR2
rol rR3
eor rS3, pS3 // register s = register s xor polynom s
eor rS2, pS2
eor rS1, pS1
eor rS0, pS0
dec cnt
brne _0
sts lfsr_S +0, rS0
sts lfsr_S +1, rS1
sts lfsr_S +2, rS2
sts lfsr_S +3, rS3
sts lfsr_A +0, rA0
sts lfsr_A +1, rA1
sts lfsr_A +2, rA2
sts lfsr_A +3, rA3
pop rA3
pop rA2
pop rA1
pop rA0
pop rS3
pop rS2
pop rS1
pop rS0
ret
#undef Polynom_S
#undef Polynom_A
#undef rS0
#undef rS1
#undef rS2
#undef rS3
#undef rA0
#undef rA1
#undef rA2
#undef rA3
#undef pS0
#undef pS1
#undef pS2
#undef pS3
#undef pA0
#undef pA1
#undef pA2
#undef pA3
#undef rR0
#undef rR1
#undef rR2
#undef rR3
#undef cnt
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -