汇编语言实现的FFT算法
dsp11

; AR3
1 st original input
;累加原始数据到 A ;A右移8位,即A/256,输入数据取平均
; AR3
1 st original input
;B=A-(*FFT_INPUT) ;B=(*FFT_INPUT)-A,即将原始数据去除直流分量 ;除以2以防止溢出后存入原址
②将输入序列位倒序存储,以使算法结束后的输出序列为自然顺序。 首先,将 2N 点的实输入序列拷贝到标记为 FFT_ORIGIN 的连续内存空间中,理解为一 个 N 点的复数序列 d(n)。时序列中索引为偶数的作为 d(n)的实部,索引为奇数的作为 d(n) 的虚部。这一部就是压缩。然后,将得到的复数序列位倒序存储到数据处理缓冲区 fft_data。 0C00h 0C01h 0C02h 0C03h …… 0CFCh 0CFDh 0CFEh 0CFFh R(0)=a(0) I(0)=a(1) R(64)=a(128) I(64)= a(129) …… R(63)=a(126) I(63)=a(127) R(127)=a(254) I(127)=a(255) 0D00h 0D01h 0D02h 0D03h …… 0DFCh 0DFDh 0DFEh 0DFFh a(0) a(1) a(2) a(3) …… a(252) a(253) a(254) a(255)
2
中的,其中的C语言程序如下: #include<stdio.h> # include<stdib.h> int signal(int x)(方波子程序) {int t=x%8; if(t<=3)return 1; else return –1; } void main0 { int i,j,k; FILE*fp; Int mm[256]; for(i=0;i<=255;i++) mm[i]=(sin(3.141593536*i/4+3.1414/16)*(-32768)/2);正弦波程序 //mm[i]=signal(i)*(-32768)/2; k=0; for(i=0;i<=255;i++) { fp=fopen(“sinsin.txt”, “a”); if(k%8=0) fprintf(fp, “\n .word”); fprintf(fp, “0%xh,”mm[i]); fclose(fp); k++; }} 在程序中由于要用到位到序地址计算,如果用汇编则必须使得所分的首地址为整数, 为避免这种情况,采用查表的方法进行位地址的计算,而该表也是由 C 语言生成的其程序 如下: #include<stdio.h> #include<stdib.h> #include<math.h> void main0 { int num[256],i,m=0,n,k,q; FILE*fp; for(i=0;i<=255;i++) {num[i]=I; printf(“%d,”,num[i]); } for(i=0;i<=255;i++) { q=num[i]; for(k=0;k<=7;k++) {
4套DSP(数字信号处理)经典考试试卷

39~32保护位31~16高阶位15~0低阶位11、填空题(共30分,每空1分)1.DSP的狭义理解为数字信号处理器,广义理解为数字信号处理方法。
2.在直接寻址中,指令代码包含了数据存储器地址的低 7 位。
当ST1中直接寻址编辑方式位CPL =0 时,与DP相结合形成16位数据存储器地址;当ST1中直接寻址编辑方式位CPL =1 时,加上SP基地址形成数据存储器地址。
3.TMS320C54有两个通用引脚,BIO和XF, BIO 输入引脚可用于监视外部接口器件的状态; XF 输出引脚可以用于与外部接口器件的握手信号。
4.累加器又叫做目的寄存器,它的作用是存放从ALU或乘法器/加法器单元输出的数据。
它的存放格式为5.桶形移位器的移位数有三中表达方式:立即数; ASM ;T低6位6.DSP可以处理双16位或双精度算术运算,当 C16=0 位双精度运算方式,当 C16=1为双16位运算方式。
7.复位电路有三种方式,分别是上电复位;手动复位;软件复位。
8.立即数寻址指令中在数字或符号常数前面加一个 # 号,来表示立即数。
9.位倒序寻址方式中,AR0中存放的是 FFT点数的一半。
10.一般,COFF目标文件中包含三个缺省的段:.text 段;.data 段和.bss 段。
11.汇编源程序中标号可选,若使用标号,则标号必须从第一列开始;程序中可以有注释,注释在第一列开始时前面需标上星号或分号,但在其它列开始的注释前面只能标分号。
12.’C5402有23条外部程序地址线,其程序空间可扩展到 1M ,内程序区在第0页。
13.指令执行前有关寄存器及数据存储器单元情况如下图所示,请在下图分别填写指令执行后有关寄存器及数据存储器单元的内容。
ADDA 00 00002700 C 1 C 1AR3 0101AR3 01000100h 15000100h 1500*AR3+,14,AA 00 00001200数据存储器2、 简答(共40分)1. TMS320C54x 有多少条16位总线?这些总线各有什么作用?(6分)答:’C54x 共有4组8条16位总线1条程序总线(PB ):传送取自程序存储器的指令代码和立即操作数。
(完整word版)基于DSP的快速傅立叶变换(FFT)的实现(汇编语言)

快速傅立叶变换(FFT )的实现一、实验目的1.了解FFT 的原理及算法;2.了解DSP 中FFT 的设计及编程方法;3.熟悉FFT 的调试方法;二、实验原理FFT 是一种高效实现离散付立叶变换的算法,把信号从时域变换到频域,在频域分析处理信息。
对于长度为N 的有限长序列x (n ),它的离散傅里叶变换为:(2/)j N nk N W e π-=,称为旋转因子,或蝶形因子。
在x (n )为复数序列的情况下,计算X (k ):对某个k 值,需要N 次复数乘法、(N -1)次复数加法;对所有N 个k 值,需要2N 次复数乘法和N (N -1)次复数加法。
对于N 相当大时(如1024)来说,直接计算它的DFT 所作的计算量是很大的,FFT 的基本思想在于: 利用2()j nk N N W e π-=的周期性即:k N k N N W W +=对称性:/2k k N N N W W +=-将原有的N 点序列分成两个较短的序列,这些序列的DFT 可以很简单的组合起来得到原序列的DFT 。
按时间抽取的FFT ——DIT FFT 信号流图如图5.1所示:图5.1 时间抽取的FFT —DIT FFT 信号流图FFT 算法主要分为以下四步。
第一步 输入数据的组合和位倒序∑=-=10)()(N n nk N W n x k X把输入序列作位倒序是为了在整个运算最后的输出中得到的序列是自然顺序。
第二步 实现N 点复数FFT第一级蝶形运算;第二级蝶形运算;第三级至log2N 级蝶形运算;FFT 运算中的旋转因子N W 是一个复数,可表示:为了实现旋转因子N W 的运算,在存储空间分别建立正弦表和余弦表,每个表对应从0度到180度,采用循环寻址来对正弦表和余弦表进行寻址。
第三步 功率谱的计算X (k )是由实部()R X k 和虚部()I X k 组成的复数:()()()R I X k X k jX k =+;计算功率谱时只需将FFT 变换好的数据,按照实部()R X k 和虚部()I X k 求它们的平方和,然后对平方和进行开平方运算。
fft算法原理

fft算法原理FFT算法是快速傅里叶变换( Fast Fourier Transform)的缩写,它是一种高效的计算离散傅里叶变换(DFT)的方法。
傅里叶变换是一种将一个时域信号转换为频域信号的数学技术,广泛应用于信号处理、图像处理、通信等领域。
FFT算法的核心思想是将一个N点的DFT分解为多个较小规模的DFT运算。
具体而言,假设输入序列为x(n),其中n表示时间(或空间)上的一个离散点。
FFT算法将输入序列分为偶数下标和奇数下标的子序列,分别进行递归的FFT运算。
然后将结果重新组合,得到原始序列的DFT。
首先将输入序列x(n)分为两个子序列x_odd(n)和x_even(n),其中偶数下标的元素属于x_even(n),奇数下标的元素属于x_odd(n)。
然后分别对这两个子序列进行递归的FFT运算,得到两个部分的DFT结果X_odd(k)和X_even(k)。
然后将这两个部分的DFT结果重新组合,得到整个输入序列x(n)的DFT结果X(k)。
具体而言,可以利用旋转因子的性质,将X_odd(k)和X_even(k)重新组合成为X(k)的一半。
具体的计算公式如下:X(k) = X_even(k) + W_N^k * X_odd(k)X(k+N/2) = X_even(k) - W_N^k * X_odd(k)其中,k表示频域的一个离散点,取值范围为0到N/2-1;N表示输入序列的长度;W_N表示旋转因子,计算公式为W_N^k = e^(-j*2π*k/N)。
通过递归的方式,FFT算法可以将一个N点的DFT计算时间复杂度从O(N^2)降低为O(NlogN),大大提高了计算效率。
总之,FFT算法利用分治思想将一个N点的DFT分解为多个较小规模的DFT运算,并通过旋转因子的性质将结果重新组合,从而实现快速的傅里叶变换计算。
它在信号处理和频谱分析等领域得到了广泛的应用,并成为了现代科学和工程中的重要算法之一。
基于DSP的通用FFT算法在电网谐波检测中的应用

[ 摘 要 ] 随 着 D P在 数 字化 处理和数 字控 制 系统领 域 日渐成 为一 项成 熟的技 术 , 种基 于 D P S 一 S
的快 速傅 立叶 变换 ( F ) 实现 方法被提 出。该 算 法采 用汇 编语 言 实现 , 采 用 目前控 制领 域 最 FT 的 r 并
高性 能 的处理 器 T S 2 F 8 X系列 D P对 采 样信 号进 行 FT 算 , 快速 检 测 出 电网 中三 相 电 M 30 2 1 S F r运 能 压、 电流 的各 次谐波 , 以进行 谐 波 的 实 时分析 处理 。通 过 实验 和现 场运 行 , 证 了算 法 的正 确性 验 和 高速性 , 可作 为一种 通 用的 算法应 用 于谐 波检 测 。 [ 键词 ] D P F ; 波检 测 关 S ;FT 谐 r [ 中图分 类号 ] T 3 P3 2 [ 文献标 识码 ] A [ 文章 编号 ] 10 .30 20 )302 .5 050 1 (07 0.0 80
及 家庭 中 的应 用 日益广泛 , 波所 造 成 的危 害 日趋 谐 严 重…。世 界各 国都对谐 波 问题 予 以充 分 的关 注 。
国际上 召开 了多次 有关谐 波 问题 的学 术 会议 , 少 不
计算 处 理 能力 和 A M 完 善 的 显 示 功 能研 发 而 成 R 的 。该 便携 式 电能 质 量 监 测分 析 仪 能 实 时 提供 电 压、 电流 、 功功 率 、 功功 率 、 有 无 功率 因素 、 率 等 电 频
基 于 A M 40 + T 最 新 定 点 R 21 I D P 芯 片 S
2 0世纪 7 0年 代 以来 , 由于 电 力 电子 技 术 的飞 速发展 , 各种 电力 电子装 置在 电力 系统 、 工业 、 通 交
fft算法c语言实现

fft算法c语言实现快速傅里叶变换(FFT)是一种高效的离散傅里叶变换算法,用于计算信号在频域的表示。
下面是一个简单的使用 C 语言实现的 FFT 算法示例,它可以用于对输入的时域信号进行离散傅里叶变换。
```c#include <stdio.h>#include <stdlib.h>#include <math.h>#define N 16// 复数结构体typedef struct {double real;double imag;} Complex;// 初始化复数void initComplex(Complex *c, double real, double imag) {c->real = real;c->imag = imag;}// FFT 算法void fft(Complex *c, int n) {int i, j, k;Complex w, u, v;// 层次遍历for (i = 1; i < n; i <<= 1) {// 旋转因子w.real = cos(2 * M_PI * i / n);w.imag = -sin(2 * M_PI * i / n);for (j = 0; j < n; j += i) {for (k = 0; k < i / 2; k++) {u.real = c[j + k].real;u.imag = c[j + k].imag;v.real = c[j + i / 2 + k].real;v.imag = c[j + i / 2 + k].imag;c[j + k].real = u.real + w.real * v.real - w.imag * v.imag; c[j + k].imag = u.imag + w.real * v.imag + w.imag * v.real; c[j + i / 2 + k].real = u.real - w.real * v.real + w.imag * v.imag; c[j + i / 2 + k].imag = u.imag - w.real * v.imag - w.imag * v.real; }}}}// 打印复数void printComplex(Complex c) {printf("%f + %fi\n", c.real, c.imag);}int main() {Complex c[N];// 输入的时域信号for (int i = 0; i < N; i++) {c[i].real = rand() / RAND_MAX;c[i].imag = rand() / RAND_MAX;}printf("输入的时域信号:\n");// 打印输入的时域信号for (int i = 0; i < N; i++) {printComplex(c[i]);}fft(c, N);printf("经过 FFT 变换后的频域信号:\n");// 打印经过 FFT 变换后的频域信号for (int i = 0; i < N; i++) {printComplex(c[i]);}return 0;}```上述代码是一个简单的 C 语言实现的 FFT 算法示例。
利用汇编语言进行F2812编程实现FFT分析常用的库文件-7

; void (*mag)(void *);
; void (*win)(void *);
; }FFTxxxC;
; FFT - Computation Routine (FFT128R_calc)
;===============================================================================
; * This routine takes the 128 point complex data sequence, in bit
; Originator : Advanced Embeeded Control
; Texas Instruments Inc.
;
; Description : This file contain source code for complex FFT
.def _CFFT32_calc
COS45K_LSW .set 799Bh
COS45K_MSW .set 5A82h
;===============================================================================
Xr(0),Xi(0),Xr(1),Xi(1)...Xr(127)&Xi(127)
;===============================================================================
;
; void FFT128C_init(void)
; This function copies the Twiddle factors from load time address to
FFT算法及IIR、FIR滤波器的设计资料

《DSP原理及其应用》实验设计报告实验题目:FFT算法及滤波器的设计摘要随着信息科学的迅猛发展,数据采集与处理是计算机应用的一门关键技术,它主要研究信息数据的采集、存储和处理。
而数字信号处理器(DSP)芯片的出现为实现数字信号处理算法提供了可能。
数字信号处理器(DSP)以其特有的硬件体系结构和指令体系成为快速精确实现数字信号处理的首选工具。
DSP芯片采用了哈佛结构,以其强大的数据处理功能在通信和信号处理等领域得到了广泛应用,并成为研究的热点。
本文主要研究基于TI的DSP芯片TMS320c54x的FFT算法、FIR滤波器和IIR滤波器的实现。
首先大概介绍了DSP和TMS320c54x的结构和特点并详细分析了本系统的FFT变换和滤波器的实现方法。
关键词:DSP、TMS320c54x、FFT、FIR、IIRAbstractWith the rapid development of information science, data acquisition and processing is a key technology of computer applications, the main research of it is collection, storage and processing of information data. The emergence of the digital signal processor (DSP) chip offers the potential for the realization of the digital signal processing algorithm. Digital signal processor (DSP), with its unique hardware system structure and instruction system become the first tool of quickly and accurately realize the digital signal processing.DSP chip adopted harvard structure, with its powerful data processing functions in the communication and signal processing, and other fields has been widely applied, and become the research hot spot.This paper mainly studies the FFT algorithm based on TMS320c54x DSP chip of TI, the realization of FIR filter and IIR filter. First introduced the DSP and TMS320c54x briefly, then analyzed in detail the structure and characteristics of the system of the realization of FFT transform and filter method.Keyword: DSP、TMS320c54x、FFT、FIR、IIR1.绪论1.1课题研究的目的和意义数字信号处理器(DSP)已经发展了多20多年,最初仅在信号处理领域内应用,近年来随着半导体技术的发展,其高速运算能力使很多复杂的控制算法和功能得以实现,同时将实时处理能力和控制器的外设功能集于一身,在控制领域内也得到很好的应用。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
汇编下的FFT算法实现;----------------------------------------------------------- ; 快速付里叶变换子程序;; 入口 : 一维四字节浮点数数组的首地址 ;;; 以 2 为基β的值,信号抽样的点数 = 2^β;;; 出口 : 在原数组的位置保存结果的值;;; 补充说明 :;; 1. 该子程序所需 RAM 的容量为 2^β*12 字节,另外需要;; 少量的堆栈作为临时变量的存储空间;;; 2. 所需 RAM 空间以输入的首地址为基址,向增加的方向;; 扩展;;; 应用举例 :;; PUSH #0A000H ; 数组首地址压栈; PUSH #6 ; β值压栈; CALL FFT;;----------------------------------------------------------- PROC FFTFFT: LD FFT_CX,2[SP]LD FFT_AX,#0001H ;SHL FFT_AX,FFT_CL ; 计算采样点数PUSH FFT_AX ; 将采样点数压栈SHL FFT_AX,#1 ;LD FFT_BX,6[SP] ; 根据采样点数,ADD FFT_BX,FFT_AX ; 计算出其余PUSH FFT_BX ; 三个被占用ADD FFT_BX,FFT_AX ; 空间的首地址;PUSH FFT_BX ; 并依次将首地址SHL FFT_AX,#1 ;ADD FFT_BX,FFT_AX ; 压栈;PUSH FFT_BX ;LD FFT_CX,6[SP]LD FFT_FX,#2LOOP1:CLR FFT_AXSUB FFT_EX,FFT_CX,#1LD FFT_BX,FFT_EXLD FFT_DX,10[SP]LOOP2:SHL FFT_AX,#1 ;SHR FFT_EX,#1 ; 产生倒序数ADDC FFT_AX,0 ;DJNZW FFT_DX,LOOP2 ;SHL FFT_AX,#2SHL FFT_BX,#2 ; FFT_AX : 产生源地址 ADD FFT_AX,12[SP] ; FFT_BX : 产生目的地址 ADD FFT_BX,2[SP] ; 输入数据按倒序排列BMOV FFT_AX,FFT_FX ;DJNZW FFT_CX,LOOP1 ;LD FFT_AX,12[SP]LD FFT_BX,4[SP]LD FFT_DX,#0080HST FFT_DX,[FFT_AX]+ST 0,[FFT_AX]ST 0,[FFT_BX]+ST 0,[FFT_BX]LD FFT_AX,#0DB82H ; 计算分度值SUB FFT_AX,10[SP] ; 即,(2*π)/(2^β)PUSH #490FH ; 的值PUSH FFT_AX ;LD FFT_BX,SPLD FFT_EX,16[FFT_BX]ADD FFT_EX,#4 ;PUSH [FFT_BX] ;PUSH 2[FFT_BX] ; 计算分度的余弦,PUSH FFT_EX ; 结果存入PR[1]CALL FCOS4 ;LD FFT_BX,SPPUSH [FFT_BX] ;PUSH 2[FFT_BX] ; 计算分度的正弦PUSH #FFT_AX ;CALL FSIN4 ; 分度值已完成使命,ADD SP,#4 ; 故收回其使用空间LD FFT_EX,4[SP] ; 将结果取负,ADD FFT_EX,#4 ; 存入PI[1];XOR FFT_BX,#8000H ; 同时,FFT_AX.FFT_BX ST FFT_AX,[FFT_EX] ; 保存PI[1]的ST FFT_BX,2[FFT_EX] ; 值LD FFT_EX,12[SP] ;ADD FFT_EX,#4 ; 取出PR[1]的值PUSH 2[FFT_EX] ; 压入堆栈,作为PUSH [FFT_EX] ; 后面计算的常数使用PUSH FFT_BX ; 将PI[1]的值压入堆栈,PUSH FFT_AX ; 作为后面计算的常数使用SUB SP,#8 ; 予留四个字空间LD FFT_CX,#2LOOP3:PUSH FFT_CX ; FFT_CX : 相当于I的值SUB FFT_DX,FFT_CX,#1 ; FFT_DX : 相当于J的值 SHL FFT_DX,#2ADD FFT_DX,30[SP]LD FFT_BX,SPADD FFT_EX,FFT_BX,#6PUSH [FFT_DX]+PUSH [FFT_DX]PUSH 14[FFT_BX]PUSH 16[FFT_BX]PUSH FFT_EXCALL FMUL4LD FFT_CX,[SP]SUB FFT_DX,FFT_CX,#1SHL FFT_DX,#2ADD FFT_DX,22[SP]LD FFT_BX,SPADD FFT_EX,FFT_BX,#2PUSH [FFT_DX]+PUSH [FFT_DX]PUSH 10[FFT_BX]PUSH 12[FFT_BX]PUSH FFT_EXCALL FMUL4LD FFT_BX,SPLD FFT_EX,[SP]SHL FFT_EX,#2ADD FFT_EX,30[SP]PUSH 6[FFT_BX]PUSH 8[FFT_BX]PUSH 2[FFT_BX]PUSH 4[FFT_BX]PUSH FFT_EXCALL FSUB4LD FFT_BX,SPLD FFT_CX,[SP]SUB FFT_DX,FFT_CX,#1SHL FFT_DX,#2ADD FFT_DX,30[SP]ADD FFT_EX,SP,#6PUSH [FFT_DX]+PUSH [FFT_DX]PUSH 10[FFT_BX]PUSH 12[FFT_BX]PUSH FFT_EXCALL FMUL4LD FFT_BX,SPLD FFT_CX,[SP]SUB FFT_DX,FFT_CX,#1SHL FFT_DX,#2ADD FFT_DX,22[SP]ADD FFT_EX,SP,#2PUSH [FFT_DX]+PUSH [FFT_DX]PUSH 14[FFT_BX]PUSH 16[FFT_BX]PUSH FFT_EXCALL FMUL4LD FFT_BX,SPLD FFT_EX,[SP]SHL FFT_EX,#2ADD FFT_EX,22[SP]PUSH 6[FFT_BX]PUSH 8[FFT_BX]PUSH 2[FFT_BX]PUSH 4[FFT_BX]PUSH FFT_EXCALL FADD4LD FFT_DX,24[SP]SHR FFT_DX,#1POP FFT_CXINC FFT_CXCMP FFT_CX,FFT_DXJC NEXT1JMP LOOP3NEXT1:ADD SP,#16PUSH FFT_DXLOOP5:PUSH FFT_DX ; 产生一个奇偶交替的SHL FFT_DX,#1 ; 计数序列SUB FFT_CX,FFT_DX,#1 ; FFT_CX : 奇数序列SUB FFT_DX,#2 ; FFT_DX : 偶数序列SHL FFT_CX,#2 ;SHL FFT_DX,#2 ;ADD FFT_CX,6[SP] ; FFT_CX : FR[OLD]的首地址ADD FFT_DX,6[SP] ; FFT_DX : FR[EVEN]的首地址PUSH FFT_CX ;PUSH 2[FFT_DX] ; VR在堆栈中的存放PUSH [FFT_DX] ; 顺序为高位在前,低位在后LD FFT_BX,SPPUSH [FFT_BX]PUSH 2[FFT_BX]PUSH [FFT_CX]PUSH 2[FFT_CX]PUSH FFT_DXCALL FADD4LD FFT_CX,4[SP]LD FFT_BX,SPPUSH [FFT_BX]PUSH 2[FFT_BX]PUSH [FFT_CX] ;PUSH 2[FFT_CX] ; 完成第一级PUSH FFT_CX ; 蝶形单元的CALL FSUB4 ; 运算ADD SP,#6 ; 该循环退出时,POP FFT_DX ; [SP]的值仍然DJNZW FFT_DX,LOOP5 ; 保存N/2NFFT2:LD FFT_EX,2[SP] ; DO FI[I]=0.0 UNTIL I=64,1,I-- LD FFT_CX,8[SP]LOOP55:PUSH FFT_CXDEC FFT_CXSHL FFT_CX,#2ADD FFT_CX,FFT_EXST 0,[FFT_CX]ST 0,2[FFT_CX]POP FFT_CXDJNZW FFT_CX,LOOP55NEXT22:PUSH #2PUSH [SP]LD FFT_AX,16[SP]DEC FFT_AXLOOP6:PUSH FFT_AXLD FFT_AX,6[SP]SHR FFT_AX,#1ST FFT_AX,6[SP]LD FFT_AX,4[SP]ST FFT_AX,2[SP]SHL FFT_AX,#1ST FFT_AX,4[SP]LD FFT_CX, 6[SP]LOOP7:PUSH FFT_CXLD FFT_CX,4[SP]LOOP8:PUSH FFT_CXLD FFT_AX,[SP]DEC FFT_AXLD FFT_EX,10[SP]MULU FFT_CX,FFT_AX,FFT_EXSHL FFT_CX,#2PUSH FFT_CX ; NILD FFT_BX,4[SP]DEC FFT_BXLD FFT_EX,10[SP]MULU FFT_CX,FFT_BX,FFT_EXADD FFT_CX,FFT_AXLD FFT_DX,FFT_CXSHL FFT_CX,#2PUSH FFT_CX ; NKLD FFT_CX,12[SP]SHR FFT_CX,#1ADD FFT_CX,FFT_DXSHL FFT_CX,#2PUSH FFT_CX ; NJLD FFT_AX,30[SP] ; PR的首地址LD FFT_BX,20[SP] ; FR的首地址ADD FFT_AX,4[SP]ADD FFT_BX,[SP] ;SUB SP,#4 ; 先调整堆栈指针LD FFT_EX,SP ; 再进行浮点数运算 PUSH [FFT_AX] ; 在并发环境下PUSH 2[FFT_AX] ; 至关重要PUSH [FFT_BX] ;PUSH 2[FFT_BX]PUSH FFT_EXCALL FMUL4LD FFT_AX,26[SP] ; PI的首地址LD FFT_BX,22[SP] ; FI的首地址ADD FFT_AX,8[SP] ;ADD FFT_BX,4[SP] ; 先调整堆栈指针 SUB SP,#4 ; 再进行浮点数运算LD FFT_EX,SP ; 在并发环境下PUSH [FFT_AX] ; 至关重要PUSH 2[FFT_AX] ;PUSH 2[FFT_BX]PUSH FFT_EXCALL FMUL4LD FFT_BX,SPSUB SP,#4LD FFT_EX,SPPUSH 4[FFT_BX]PUSH 6[FFT_BX]PUSH [FFT_BX]PUSH 2[FFT_BX]PUSH FFT_EXCALL FSUB4 ; PODDRLD FFT_AX,42[SP] ; PR的首地址 LD FFT_BX,30[SP] ; FI的首地址 ADD FFT_AX,16[SP]ADD FFT_BX,12[SP]ADD FFT_EX,SP,#8PUSH [FFT_AX]PUSH 2[FFT_AX]PUSH [FFT_BX]PUSH 2[FFT_BX]PUSH FFT_EXCALL FMUL4LD FFT_AX,34[SP] ; PI的首地址 LD FFT_BX,32[SP] ; FR的首地址 ADD FFT_AX,16[SP]ADD FFT_BX,12[SP]ADD FFT_EX,SP,#4PUSH [FFT_AX]PUSH 2[FFT_AX]PUSH [FFT_BX]PUSH 2[FFT_BX]PUSH FFT_EXCALL FMUL4LD FFT_BX,SPSUB SP,#4LD FFT_EX,SPPUSH 8[FFT_BX]PUSH 10[FFT_BX]PUSH 4[FFT_BX]PUSH 6[FFT_BX]PUSH FFT_EXCALL FADD4 ; PODDILD FFT_BX,FFT_AX ADD FFT_AX,16[SP] ADD FFT_BX,18[SP] LD FFT_EX,SPPUSH [FFT_BX]PUSH 2[FFT_BX]PUSH 4[FFT_EX]PUSH 6[FFT_EX]PUSH FFT_AXCALL FSUB4LD FFT_AX,34[SP] LD FFT_BX,FFT_AX ADD FFT_AX,16[SP] ADD FFT_BX,18[SP] LD FFT_EX,SPPUSH [FFT_BX]PUSH 2[FFT_BX]PUSH [FFT_EX]PUSH 2[FFT_EX]PUSH FFT_AXCALL FSUB4LD FFT_AX,36[SP] ADD FFT_AX,18[SP] LD FFT_EX,SPPUSH [FFT_AX]PUSH 2[FFT_AX]PUSH 4[FFT_EX]PUSH 6[FFT_EX]PUSH FFT_AXCALL FADD4LD FFT_AX,34[SP] ADD FFT_AX,18[SP] LD FFT_EX,SPPUSH [FFT_AX]PUSH 2[FFT_AX]PUSH [FFT_EX]PUSH 2[FFT_EX]PUSH FFT_AXCALL FADD4ADD SP,#22POP FFT_CXDJNZW FFT_CX,NEXT3 POP FFT_CXDJNZW FFT_CX,NEXT4 POP FFT_AXJMP NEXT6NEXT3:JMP LOOP8NEXT4:JMP LOOP7NEXT5:JMP LOOP6NEXT6:ADD SP,#6LD FFT_CX,6[SP] LOOP9:PUSH FFT_CXDEC FFT_CXSHL FFT_CX,#2LD FFT_AX,4[SP] ADD FFT_AX,FFT_CX SUB SP,#4LD FFT_BX,SPPUSH [FFT_AX]PUSH 2[FFT_AX]PUSH [FFT_AX]PUSH 2[FFT_AX]PUSH FFT_BXCALL FMUL4LD FFT_AX,6[SP] LD FFT_CX,4[SP] DEC FFT_CXSHL FFT_CX,#2ADD FFT_AX,FFT_CX SUB SP,#4LD FFT_BX,SPPUSH [FFT_AX]PUSH 2[FFT_AX]PUSH [FFT_AX]PUSH 2[FFT_AX]PUSH FFT_BXCALL FMUL4LD FFT_BX,SPPUSH [FFT_BX]PUSH 2[FFT_BX]PUSH 4[FFT_BX]PUSH 6[FFT_BX]PUSH #FFT_AXCALL FADD4ADD SP,#8LD FFT_CX,[SP]DEC FFT_CXSHL FFT_CX,#2ADD FFT_EX,FFT_CXPUSH FFT_AXPUSH FFT_BXPUSH FFT_EXCALL FSQRTPOP FFT_CXDJNZW FFT_CX,LOOP9LD FFT_AX,8[SP]ST FFT_AX,12[SP]ADD SP,#12RETPROCEND:END;===========================================================签名:路漫漫其修远兮,吾将上下而求索艾诺仪器公司。