📄 fft2.lis
字号:
.module fft2.c
.area text(rom, con, rel)
0000 .dbfile D:\HJN\Design\AVR\fft\fft2.c
0000 .dbfunc e FFT _FFT fV
0000 ; l0 -> y+36
0000 ; vi -> y+32
0000 ; vr -> y+28
0000 ; is -> y+26
0000 ; i -> y+24
0000 ; poddi -> y+20
0000 ; poddr -> y+16
0000 ; q -> y+12
0000 ; p -> y+8
0000 ; s -> y+4
0000 ; m -> y+2
0000 ; nv -> y+0
0000 ; it -> R20,R21
0000 ; j -> R10,R11
0000 ; il -> y+70
0000 ; l -> y+68
0000 ; fi -> R12,R13
0000 ; fr -> R14,R15
0000 ; k -> y+62
0000 ; n -> y+60
0000 ; pi -> y+58
0000 ; pr -> y+56
.even
0000 _FFT::
0000 0E940000 xcall push_arg4
0004 0E940000 xcall push_gset5
0008 AE97 sbiw R28,46
000A FE01 movw R30,R28
000C E05C subi R30,192 ; addi 64
000E FF4F sbci R31,255
0010 E080 ldd R14,z+0
0012 F180 ldd R15,z+1
0014 FE01 movw R30,R28
0016 EE5B subi R30,190 ; addi 66
0018 FF4F sbci R31,255
001A C080 ldd R12,z+0
001C D180 ldd R13,z+1
001E .dbline -1
001E .dbline 10
001E ; #include<math.h>
001E ;
001E ; /*pr:输入实部
001E ; pi:输入虚部
001E ; n为2^k,n不小于数据个数
001E ; l:为0表示正变换,1表示反变换
001E ; il:1表示fr为取模结果。0表示fr输出实部fi输出虚部
001E ; */
001E ; void FFT(double* pr, double* pi, int n, int k, double* fr, double* fi, int l, int il)
001E ; {
001E .dbline 13
001E ; int it,m,is,i,j,nv,l0;
001E ; double p,q,s,vr,vi,poddr,poddi;
001E ; for(it = 0;it <= n - 1;it ++)
001E 4427 clr R20
0020 5527 clr R21
0022 6BC0 xjmp L5
0024 L2:
0024 .dbline 14
0024 ; {
0024 .dbline 15
0024 ; m = it;
0024 5B83 std y+3,R21
0026 4A83 std y+2,R20
0028 .dbline 16
0028 ; is = 0;
0028 2224 clr R2
002A 3324 clr R3
002C 3B8E std y+27,R3
002E 2A8E std y+26,R2
0030 .dbline 17
0030 ; for(i = 0;i <= k - 1;i ++)
0030 398E std y+25,R3
0032 288E std y+24,R2
0034 22C0 xjmp L9
0036 L6:
0036 .dbline 18
0036 .dbline 19
0036 22E0 ldi R18,2
0038 30E0 ldi R19,0
003A 0A81 ldd R16,y+2
003C 1B81 ldd R17,y+3
003E 0E940000 xcall div16s
0042 5801 movw R10,R16
0044 .dbline 20
0044 02E0 ldi R16,2
0046 10E0 ldi R17,0
0048 9501 movw R18,R10
004A 0E940000 xcall empy16s
004E 2A80 ldd R2,y+2
0050 3B80 ldd R3,y+3
0052 201A sub R2,R16
0054 310A sbc R3,R17
0056 2A8D ldd R18,y+26
0058 3B8D ldd R19,y+27
005A 02E0 ldi R16,2
005C 10E0 ldi R17,0
005E 0E940000 xcall empy16s
0062 2801 movw R4,R16
0064 420C add R4,R2
0066 531C adc R5,R3
0068 5B8E std y+27,R5
006A 4A8E std y+26,R4
006C .dbline 21
006C BB82 std y+3,R11
006E AA82 std y+2,R10
0070 .dbline 22
0070 L7:
0070 .dbline 17
0070 888D ldd R24,y+24
0072 998D ldd R25,y+25
0074 0196 adiw R24,1
0076 998F std y+25,R25
0078 888F std y+24,R24
007A L9:
007A .dbline 17
007A 8EAD ldd R24,y+62
007C 9FAD ldd R25,y+63
007E 0197 sbiw R24,1
0080 288C ldd R2,y+24
0082 398C ldd R3,y+25
0084 8215 cp R24,R2
0086 9305 cpc R25,R3
0088 B4F6 brge L6
008A .dbline 23
008A 2A8D ldd R18,y+26
008C 3B8D ldd R19,y+27
008E 04E0 ldi R16,4
0090 10E0 ldi R17,0
0092 0E940000 xcall empy16s
0096 F801 movw R30,R16
0098 08AC ldd R0,y+56
009A 19AC ldd R1,y+57
009C E00D add R30,R0
009E F11D adc R31,R1
00A0 2080 ldd R2,z+0
00A2 3180 ldd R3,z+1
00A4 4280 ldd R4,z+2
00A6 5380 ldd R5,z+3
00A8 04E0 ldi R16,4
00AA 10E0 ldi R17,0
00AC 9A01 movw R18,R20
00AE 0E940000 xcall empy16s
00B2 F801 movw R30,R16
00B4 EE0D add R30,R14
00B6 FF1D adc R31,R15
00B8 2082 std z+0,R2
00BA 3182 std z+1,R3
00BC 4282 std z+2,R4
00BE 5382 std z+3,R5
00C0 .dbline 24
00C0 2A8D ldd R18,y+26
00C2 3B8D ldd R19,y+27
00C4 04E0 ldi R16,4
00C6 10E0 ldi R17,0
00C8 0E940000 xcall empy16s
00CC F801 movw R30,R16
00CE 0AAC ldd R0,y+58
00D0 1BAC ldd R1,y+59
00D2 E00D add R30,R0
00D4 F11D adc R31,R1
00D6 2080 ldd R2,z+0
00D8 3180 ldd R3,z+1
00DA 4280 ldd R4,z+2
00DC 5380 ldd R5,z+3
00DE 04E0 ldi R16,4
00E0 10E0 ldi R17,0
00E2 9A01 movw R18,R20
00E4 0E940000 xcall empy16s
00E8 F801 movw R30,R16
00EA EC0D add R30,R12
00EC FD1D adc R31,R13
00EE 2082 std z+0,R2
00F0 3182 std z+1,R3
00F2 4282 std z+2,R4
00F4 5382 std z+3,R5
00F6 .dbline 25
00F6 L3:
00F6 .dbline 13
00F6 4F5F subi R20,255 ; offset = 1
00F8 5F4F sbci R21,255
00FA L5:
00FA .dbline 13
00FA 8CAD ldd R24,y+60
00FC 9DAD ldd R25,y+61
00FE 0197 sbiw R24,1
0100 8417 cp R24,R20
0102 9507 cpc R25,R21
0104 0CF0 brlt X3
0106 8ECF xjmp L2
0108 X3:
0108 .dbline 26
0108 ; {
0108 ; j = m / 2;
0108 ; is = 2 * is + (m - 2 * j);
0108 ; m = j;
0108 ; }
0108 ; fr[it] = pr[is];
0108 ; fi[it] = pi[is];
0108 ; }
0108 ; pr[0] = 1.0;
0108 00E0 ldi R16,<L10
010A 10E0 ldi R17,>L10
010C 0E940000 xcall lpm32
0110 1801 movw R2,R16
0112 2901 movw R4,R18
0114 E8AD ldd R30,y+56
0116 F9AD ldd R31,y+57
0118 2082 std z+0,R2
011A 3182 std z+1,R3
011C 4282 std z+2,R4
011E 5382 std z+3,R5
0120 .dbline 27
0120 ; pi[0] = 0.0;
0120 00E0 ldi R16,<L11
0122 10E0 ldi R17,>L11
0124 0E940000 xcall lpm32
0128 1801 movw R2,R16
012A 2901 movw R4,R18
012C EAAD ldd R30,y+58
012E FBAD ldd R31,y+59
0130 2082 std z+0,R2
0132 3182 std z+1,R3
0134 4282 std z+2,R4
0136 5382 std z+3,R5
0138 .dbline 28
0138 ; p = 6.283185306 / (1.0 * n);
0138 00E0 ldi R16,<L12
013A 10E0 ldi R17,>L12
013C 0E940000 xcall lpm32
0140 3A93 st -y,R19
0142 2A93 st -y,R18
0144 1A93 st -y,R17
0146 0A93 st -y,R16
0148 00E0 ldi R16,<L10
014A 10E0 ldi R17,>L10
014C 0E940000 xcall lpm32
0150 3A93 st -y,R19
0152 2A93 st -y,R18
0154 1A93 st -y,R17
0156 0A93 st -y,R16
0158 ; stack offset 8
0158 FE01 movw R30,R28
015A EC5B subi R30,188 ; addi 68
015C FF4F sbci R31,255
015E 0081 ldd R16,z+0
0160 1181 ldd R17,z+1
0162 0E940000 xcall int2fp
0166 3A93 st -y,R19
0168 2A93 st -y,R18
016A 1A93 st -y,R17
016C 0A93 st -y,R16
016E 0E940000 xcall empy32fs
0172 0E940000 xcall div32f
0176 FE01 movw R30,R28
0178 0087 std z+8,R16
017A 1187 std z+9,R17
017C 2287 std z+10,R18
017E 3387 std z+11,R19
0180 .dbline 29
0180 ; pr[1] = cos(p);
0180 FE01 movw R30,R28
0182 0085 ldd R16,z+8
0184 1185 ldd R17,z+9
0186 2285 ldd R18,z+10
0188 3385 ldd R19,z+11
018A 0E940000 xcall _cos
018E 1801 movw R2,R16
0190 2901 movw R4,R18
0192 E8AD ldd R30,y+56
0194 F9AD ldd R31,y+57
0196 2482 std z+4,R2
0198 3582 std z+5,R3
019A 4682 std z+6,R4
019C 5782 std z+7,R5
019E .dbline 30
019E ; pi[1] = -sin(p);
019E FE01 movw R30,R28
01A0 0085 ldd R16,z+8
01A2 1185 ldd R17,z+9
01A4 2285 ldd R18,z+10
01A6 3385 ldd R19,z+11
01A8 0E940000 xcall _sin
01AC 3A93 st -y,R19
01AE 2A93 st -y,R18
01B0 1A93 st -y,R17
01B2 0A93 st -y,R16
01B4 0E940000 xcall neg32f
01B8 EAAD ldd R30,y+58
01BA FBAD ldd R31,y+59
01BC 0483 std z+4,R16
01BE 1583 std z+5,R17
01C0 2683 std z+6,R18
01C2 3783 std z+7,R19
01C4 .dbline 31
01C4 ; if(l != 0)
01C4 FE01 movw R30,R28
01C6 EC5B subi R30,188 ; addi 68
01C8 FF4F sbci R31,255
01CA 0080 ldd R0,z+0
01CC 1180 ldd R1,z+1
01CE 0020 tst R0
01D0 11F4 brne X0
01D2 1120 tst R1
01D4 A1F0 breq L13
01D6 X0:
01D6 .dbline 32
01D6 ; pi[1] = -pi[1];
01D6 8AAD ldd R24,y+58
01D8 9BAD ldd R25,y+59
01DA 0496 adiw R24,4
01DC 1C01 movw R2,R24
01DE FC01 movw R30,R24
01E0 4080 ldd R4,z+0
01E2 5180 ldd R5,z+1
01E4 6280 ldd R6,z+2
01E6 7380 ldd R7,z+3
01E8 7A92 st -y,R7
01EA 6A92 st -y,R6
01EC 5A92 st -y,R5
01EE 4A92 st -y,R4
01F0 0E940000 xcall neg32f
01F4 F101 movw R30,R2
01F6 0083 std z+0,R16
01F8 1183 std z+1,R17
01FA 2283 std z+2,R18
01FC 3383 std z+3,R19
01FE L13:
01FE .dbline 33
01FE ; for(i = 2;i <= n - 1;i ++)
01FE 82E0 ldi R24,2
0200 90E0 ldi R25,0
0202 998F std y+25,R25
0204 888F std y+24,R24
0206 E4C0 xjmp L18
0208 L15:
0208 .dbline 34
0208 .dbline 35
0208 288D ldd R18,y+24
020A 398D ldd R19,y+25
020C 04E0 ldi R16,4
020E 10E0 ldi R17,0
0210 0E940000 xcall empy16s
0214 F801 movw R30,R16
0216 3497 sbiw R30,4
0218 08AC ldd R0,y+56
021A 19AC ldd R1,y+57
021C E00D add R30,R0
021E F11D adc R31,R1
0220 2080 ldd R2,z+0
0222 3180 ldd R3,z+1
0224 4280 ldd R4,z+2
0226 5380 ldd R5,z+3
0228 5A92 st -y,R5
022A 4A92 st -y,R4
022C 3A92 st -y,R3
022E 2A92 st -y,R2
0230 F001 movw R30,R0
0232 2480 ldd R2,z+4
0234 3580 ldd R3,z+5
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -