




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第三章第三章 DSP的软件结构的软件结构 寻址方式:立即数寻址寻址方式:立即数寻址 v短立即数寻址(单字指令)短立即数寻址(单字指令) 在指令字中包括立即操作数在指令字中包括立即操作数 RPT #99 ;将下一条指令循环;将下一条指令循环100次次 LD #0h,DP ;将;将0装入数据页指针装入数据页指针 ADD #0ffh,A ;将;将0ffh加给加给AccA 寻址方式:立即数寻址寻址方式:立即数寻址 寻址方式:立即数寻址寻址方式:立即数寻址 v长立即数寻址长立即数寻址 指令字的后一个字是立即数(双字指令字的后一个字是立即数(双字 指令)指令) ADD #1234h,A ;将;将#1234
2、h加给加给 AccA 寻址方式:立即数寻址寻址方式:立即数寻址 绝对地址寻址绝对地址寻址 v数据存储器地址(数据存储器地址(dmad)寻址)寻址: 用一个符号或一个数来确定数据空间中的用一个符号或一个数来确定数据空间中的 一个地址一个地址 例:例: MVKD sample,*AR5 sample所代表的就是一个所代表的就是一个dmad 绝对地址寻址绝对地址寻址 v程序存储器地址(程序存储器地址(pmad)寻址)寻址: 用一个符号或一个数来确定程序地址用一个符号或一个数来确定程序地址 空间中的一个地址空间中的一个地址 例:例: MVKD table,*AR5 table 所代表的就是一个所代表的
3、就是一个pmad 绝对地址寻址绝对地址寻址 v端口地址端口地址(PA)寻址寻址 用一个符号或常数来确定用一个符号或常数来确定I/O口地址口地址 PORTR PA, Smem PORTW Smem, PA 绝对地址寻址绝对地址寻址 v*(lk)寻址寻址 用一个符号或一个常数来确定数据存储器用一个符号或一个常数来确定数据存储器 中的一个地址中的一个地址 例:例: LD *(BUFFER),),A 把地址为把地址为BUFFER的数据单元中的数据装到的数据单元中的数据装到 AccA中中 累加器寻址累加器寻址 用累加器中的数作为一个地址,可用来对用累加器中的数作为一个地址,可用来对 存放数据的程序存储器
4、寻址:存放数据的程序存储器寻址: READA Smem WRITA Smem vREADA,把累加器,把累加器A所确定的程序存储器单元所确定的程序存储器单元 中的一个字,传送到数据存储器单元中的一个字,传送到数据存储器单元Smem中。中。 vWRITA,把数据单元,把数据单元Smem中的一个字,传送中的一个字,传送 到累加器到累加器A确定的程序存储器单元。确定的程序存储器单元。 存储器映射寄存器存储器映射寄存器(MMR)寻址寻址 v存储器映射寄存器寻址用来修改存存储器映射寄存器寻址用来修改存 储器映射寄存器而不影响当前数据储器映射寄存器而不影响当前数据 页指针(页指针(DP)或堆栈指针()或堆
5、栈指针(SP)的)的 值。存储器映射寄存器寻址既可以值。存储器映射寄存器寻址既可以 在直接寻址中使用,又可以在间接在直接寻址中使用,又可以在间接 寻址中使用。寻址中使用。 堆栈寻址堆栈寻址 系统堆栈用来在中断和子程序期系统堆栈用来在中断和子程序期 间自动存放程序计数器。它也能用间自动存放程序计数器。它也能用 来存放额外的数据项或传递数据值。来存放额外的数据项或传递数据值。 处理器使用一个处理器使用一个16-bit的存储器映射的存储器映射 寄存器寄存器堆栈指针来对堆栈寻址,堆栈指针来对堆栈寻址, 它总是指向存放在堆栈中的最后一它总是指向存放在堆栈中的最后一 个元素。个元素。 寻址方式:直接寻址寻
6、址方式:直接寻址 vTMS320C54的数据存储器分为的数据存储器分为512页,每页,每 页页128字。设置一个数据页指针字。设置一个数据页指针DP(Data Pointer),用),用9-bit指向一个数据页,再指向一个数据页,再 加上一个加上一个7-bit的页内偏移地址,形成的页内偏移地址,形成16- bit的数据地址的数据地址 LD #4,DP ;指向页;指向页4(0200h-027Fh) ADD 9h,A ;将数据页;将数据页4中地址中地址9h的的 数据加给数据加给AccA 寻址方式:直接寻址寻址方式:直接寻址 寻址方式:间接寻址寻址方式:间接寻址 v8个辅助寄存器(个辅助寄存器(AR
7、0-AR7),由一个),由一个 辅助寄存器指针(辅助寄存器指针(ARP 3-bit)来指定)来指定 v辅助寄存器算术单元(辅助寄存器算术单元(ARAU)作)作16-bit 无符号数运算,决定一个新的地址,装入无符号数运算,决定一个新的地址,装入 辅助寄存器中的一个辅助寄存器中的一个 vAR0-AR7的内容相当灵活,可以装入立的内容相当灵活,可以装入立 即数,加上立即数,减去立即数;也可以即数,加上立即数,减去立即数;也可以 从数据存储器装入地址;还可以作以下的从数据存储器装入地址;还可以作以下的 变址寻址:变址寻址: 寻址方式:间接寻址寻址方式:间接寻址 寻址方式:间接寻址寻址方式:间接寻址
8、寻址方式:间接寻址寻址方式:间接寻址 v将该将该AR的内容加的内容加1或减或减1,再寻址,再寻址 (循环常用)(循环常用) v将该将该AR的内容加上或减去的内容加上或减去AR0的的 内容,再寻址。内容,再寻址。 v将该将该AR的内容逆向进位加上或减去的内容逆向进位加上或减去 AR0的内容,再寻址。的内容,再寻址。 寻址方式:间接寻址寻址方式:间接寻址 ADD *,8,A ;将当前辅助寄存;将当前辅助寄存 器所指的地址里的数据,左移器所指的地址里的数据,左移8-bit 后加给后加给AccA ADD *+,8,A,AR4 ;数据左移;数据左移 ,加给,加给AccA后,当前辅助寄存器加后,当前辅助寄
9、存器加1 ,选择辅助寄存器,选择辅助寄存器AR4 寻址方式:间接寻址寻址方式:间接寻址 ADD *0+,8,A ;执行加法后,;执行加法后, 将将AR0的值加给当前辅助寄存器的值加给当前辅助寄存器 ADD *BR0+,8,A ;执行加法后,;执行加法后, 将将AR0的值加给当前辅助寄存器,但的值加给当前辅助寄存器,但 反向进位反向进位 正向进位与反向进位正向进位与反向进位 1 0 0 1 0 0 + 1 0 0 + 1 0 0 1 0 0 0 0 1 0 位倒序寻址位倒序寻址 AR0 = 100 AR1 = 000 按按AR1寻址后,将寻址后,将AR0加给加给AR1, 反向进位反向进位 位倒序
10、寻址位倒序寻址 原序原序 原地址原地址 位倒序后地址位倒序后地址 位倒序位倒序 0 000 000 0 1 001 100 4 2 010 010 2 3 011 110 6 4 100 001 1 5 101 101 5 6 110 011 3 7 111 111 7 .mmregs .bss x, 4, 1 a0.word 012h a1.word 3211h a2.word fe11h a3.word ff03h .sect “program” LD #X, AR1 LD #0, A,AR1 LD #a0, T MAC *+,A LD #a1,T MAC *+,A LD #a2,T MA
11、C *+,A LD #a3,T MAC *,A 33221100 3 0 0 xaxaxaxaxay i ii 循环寻址循环寻址 许多算法,如卷积,相关和许多算法,如卷积,相关和FIR滤波等,滤波等, 都需要在存储器中实现一个循环缓冲器。都需要在存储器中实现一个循环缓冲器。 在这些算法中,一个循环缓冲器就是一在这些算法中,一个循环缓冲器就是一 个包含了最近的数据的滑动窗口。当新个包含了最近的数据的滑动窗口。当新 的数据来到时,缓冲器就会覆盖最早的的数据来到时,缓冲器就会覆盖最早的 数据。循环缓冲器实现的关键是循环寻数据。循环缓冲器实现的关键是循环寻 址的实现。址的实现。C54x间接寻址中提供了
12、循间接寻址中提供了循 环寻址的方式,以环寻址的方式,以%表示表示。 循环寻址循环寻址 定义循环缓冲器大小寄存器(定义循环缓冲器大小寄存器(BK)来确)来确 定循环缓冲器的大小。用循环缓冲器的定循环缓冲器的大小。用循环缓冲器的 有效基地址(有效基地址(EFB)和尾地址()和尾地址(EOB) 来组成循环地址。来组成循环地址。step是加到辅助寄存器,是加到辅助寄存器, 或从辅助寄存器中减去的值。或从辅助寄存器中减去的值。 汇编程序语法汇编程序语法 TMS320的汇编程序包含汇编指令的汇编程序包含汇编指令 (伪指令,(伪指令,assembler directives)、)、 汇编语言指令(汇编语言指
13、令(assembly language instructions)、宏指令()、宏指令(macro directives)和注释()和注释(comments)。)。 C54的指令既可以是助记符方的指令既可以是助记符方 式,也可以是代数式方式式,也可以是代数式方式 助记符方式汇编程序语法助记符方式汇编程序语法 label: mnemonic operand list ;comment 标号标号: 助记符助记符 操作数操作数 ;注释;注释 汇编程序语法汇编程序语法 v所有的语句必须由语句标号、空格、所有的语句必须由语句标号、空格、* * 号或号或 ;号开头。;号开头。 v语句标号不是必须的,如果用
14、,就必须语句标号不是必须的,如果用,就必须 在第一列。在第一列。 v语句中的各部分之间,由一个或多个空语句中的各部分之间,由一个或多个空 格分开。格分开。 v注释不是必须的。注释可以从第一列的注释不是必须的。注释可以从第一列的 * * 号或号或 ;号开头;如果不是从第一列开;号开头;如果不是从第一列开 始,就必须用始,就必须用 ;号开头。;号开头。 语句标号语句标号 由字母、数字、由字母、数字、_、$组成,最多不组成,最多不 超过超过32个字符,对大小写敏感,第个字符,对大小写敏感,第 一个字符不能是数字。后跟一个字符不能是数字。后跟 :,但:,但 分号不是语句标号的组成部分分号不是语句标号的
15、组成部分。 助记符助记符 v助记符不允许从第一列开始,否则助记符不允许从第一列开始,否则 被认为是语句标号。被认为是语句标号。 v助记符可以是机器指令(如助记符可以是机器指令(如ABS, M P Y U , S P H 等 ) 、 伪 指 令等 ) 、 伪 指 令 (如(如.data, .list, .set等)、宏指令等)、宏指令 (如(如.macro, .var, .mexit等)和宏调用。等)和宏调用。 操作数操作数 操作数可以是常数、符号或表达式。操作数可以是常数、符号或表达式。 当操作数多于一个时,用逗号分开当操作数多于一个时,用逗号分开。 常数常数 v二进制常数(如二进制常数(如0
16、1B或或01b) v八进制常数(如八进制常数(如10Q或或10q) v十进制常数(如十进制常数(如23) v十六进制常数(如十六进制常数(如78H或或78h) v字符常数(如字符常数(如A或或b) v字符串(如字符串(如“sample program”) v汇编时使用的常数汇编时使用的常数 表达式表达式 v表达式是一个常数、符号、或用算表达式是一个常数、符号、或用算 术运算符连接起来的常数或符号。术运算符连接起来的常数或符号。 表达式的值的范围为表达式的值的范围为-32768到到32767 指令指令 TMS320C54x的指令集有近两百条指令,的指令集有近两百条指令, 按功能分为如下几类按功能
17、分为如下几类: v算术运算指令算术运算指令 v逻辑运算指令逻辑运算指令 v程序控制指令程序控制指令 v装入和存储指令装入和存储指令 算术运算指令算术运算指令 加法指令加法指令 减法指令减法指令 乘法指令乘法指令 乘加指令乘加指令 乘减指令乘减指令 双数双数/ /双精度指令双精度指令 特殊操作指令特殊操作指令 加法指令加法指令 减法指令减法指令 乘法指令乘法指令 乘加和乘减指令乘加和乘减指令 乘加(乘加(TMS320C50) MAC dma,pma 程序存储器的值乘以程序存储器的值乘以 数据存储器的值并累加到数据存储器的值并累加到ACC (ACC) + (shifted P register)
18、- ACC (dma) - TREG (dma) x (pma, addressed by FPC) - P register Modify AR(ARP) and ARP as specified (FPC) + 1 - FPC MAC X0,Y0,A X:(R0)+,X0 Y:(R4)+N4,Y0 这条指令命令这条指令命令DSP56300 l将寄存器将寄存器X0和和Y0中的数相乘中的数相乘 l结果加到结果加到Acc A中中 l将寄存器将寄存器R0所指的所指的X存储器地址中存储器地址中 的值装入寄存器的值装入寄存器X0 l将寄存器将寄存器R4所指的所指的Y存储器地址中存储器地址中 的值装入寄
19、存器的值装入寄存器Y0 lR0的值加的值加1 l寄存器寄存器N4的值加给的值加给R4 逻辑运算指令逻辑运算指令 移位指令移位指令 测试指令测试指令 程序控制指令程序控制指令 v分支指令分支指令 v调用指令调用指令 v中断指令中断指令 v返回指令返回指令 v循环指令循环指令 v堆栈操作指令堆栈操作指令 v混合程序控制指令混合程序控制指令 转移指令转移指令 调用指令调用指令 中断指令中断指令 返回指令返回指令 循环指令循环指令 堆栈操作指令堆栈操作指令 程序控制指令程序控制指令 装入和存储指令装入和存储指令 v一般的装入和存储指令一般的装入和存储指令 v条件存储指令条件存储指令 v并行装入和存储指
20、令并行装入和存储指令 v并行装入和乘法指令并行装入和乘法指令 v并行存储和加件乘指令并行存储和加件乘指令 v混合装入和存储指令混合装入和存储指令 一般的装入指令一般的装入指令 存贮指令存贮指令 并行装入和乘法指令并行装入和乘法指令 混合装入和存储指令混合装入和存储指令 FIRS指令指令 FIRS指令用于指令用于 线性相位滤波器线性相位滤波器 的处理。一个如的处理。一个如 右图的右图的8阶线性阶线性 相位滤波器的输相位滤波器的输 出表达式出表达式 FIRS *AR2+, *AR3+, COEFFS y = (c0*x0) + (c1*x1) + (c2*x2) + + (c6*x6) + (c7
21、*x7) = c0(x0 + x7) + c1(x1 + x6) + c2(x2 + x5) + c3(x3 + x4) Viterbi译码指令译码指令 DADST、DSADT、CMPS 在信道均衡和解码中经常会使用到在信道均衡和解码中经常会使用到 Viterbi算法,算法,C54x为此提供了专门为此提供了专门 的硬件和指令。根据输入信号确定的硬件和指令。根据输入信号确定 分支似然概率增加量分支似然概率增加量D1/D2,放在,放在T 寄存器中,寄存器中,TRN存储可能信号译码存储可能信号译码 输出。输出。 Viterbi译码指令译码指令 DADST、DSADT、CMPS Viterbi译码指令
22、译码指令 DADST、DSADT、CMPS 最小均方运算最小均方运算LMS 在进行自适应滤波等操作中经常会使在进行自适应滤波等操作中经常会使 用用LMS算法,算法,C54x提供的提供的LMS指令指令 方便了编程。如下图所示的自适应方便了编程。如下图所示的自适应 滤波器设计中,滤波器系数修正公滤波器设计中,滤波器系数修正公 式为:式为: )()(2)() 1(ixieiwiw kk 最小均方运算最小均方运算LMS )()( 1 0 kixwiy N k k 基于基于LMS的自适应滤波程序的自适应滤波程序 数据归一化相关指令数据归一化相关指令EXP、NORM 归一化一个数是先求其指数,然后归一化一
23、个数是先求其指数,然后 把它调整到最大精度格式。实现方把它调整到最大精度格式。实现方 法如下:法如下: 数据块移动数据块移动MVDD、MVDP、MVPD 在在C54x系列系列DSP中,中,数据与数据存数据与数据存 储器、数据与程序存储器之间可以储器、数据与程序存储器之间可以 方便的进行数据传输,结合单指令方便的进行数据传输,结合单指令 循环可实现数据块移动。如循环可实现数据块移动。如16个系个系 数的移动:数的移动: 并行指令并行指令 ST A,*AR4- | MAC *AR5+,B 累加器累加器A中的高位数按原定的位数移动后,中的高位数按原定的位数移动后, 存入存入AR4指定的存储器单元,指
24、定的存储器单元,AR4中的地址中的地址 减减1; AR5指定的存储器单元中的数与指定的存储器单元中的数与T寄存器寄存器 中的数相乘,其积加到累加器中的数相乘,其积加到累加器B 中,中, AR5 中的地址加中的地址加1。 伪指令(伪指令(Assembler Directives) 伪指令为程序提供数据、控制汇编过程。伪指令为程序提供数据、控制汇编过程。 所作的工作包括:所作的工作包括: l将代码和数据汇编到指定的位置。将代码和数据汇编到指定的位置。 l在存储器中为未初始化的变量保留存储空间。在存储器中为未初始化的变量保留存储空间。 l控制列表的方式。控制列表的方式。 l初始化存储器初始化存储器
25、l汇编条件块。汇编条件块。 l定义全局变量。定义全局变量。 l为汇编器指定可以获得宏的库为汇编器指定可以获得宏的库 l检查符号调试信息检查符号调试信息 段定义伪指令段定义伪指令 v.bss 在该段中保留若干字在该段中保留若干字 v.data 汇编入已初始化的数据段汇编入已初始化的数据段 v.sect “section name” 汇编入已命名的段汇编入已命名的段 v.text 汇编入可执行的代码段汇编入可执行的代码段 初始化常数伪指令初始化常数伪指令 v.float 初始化一个初始化一个32-bit的浮点常数的浮点常数 初始化一个或多个初始化一个或多个16-bit的整数的整数 v.
26、string 初始化一个或多个字符串初始化一个或多个字符串 v.word 初始化一个或多个初始化一个或多个16-bit的整数的整数 格式化输出列表的伪指令格式化输出列表的伪指令 v.list 开始源文件列表开始源文件列表 v.nolist 停止源文件列表停止源文件列表 v.length 设置源文件列表的页长度设置源文件列表的页长度 v.title 在列表文件每一页打印文件名在列表文件每一页打印文件名 引用其他文件的伪指令引用其他文件的伪指令 v.copy /.include 包含其他文件的源语句包含其他文件的源语句 v.global 确认一个或多个全局确认一个或多个全局(外部外部)符号符号 v
27、.mlib 定义宏库定义宏库 条件汇编伪指令条件汇编伪指令 v.if/.else/.endif 条件汇编代码块条件汇编代码块 v.loop/.endloop 循环汇编代码块循环汇编代码块 v.break 终止循环汇编代码块终止循环汇编代码块 汇编时的符号汇编时的符号 v.equ/.set 使一个符号等于一个值使一个符号等于一个值 v.end 结束程序结束程序 宏语言宏语言 vMacro: A user-defined routine that can be used as an instruction v汇编器支持宏语言,使用户可汇编器支持宏语言,使用户可 以建立自己的以建立自己的“指令指令”
28、。当程序。当程序 要将特定的任务执行若干次时,要将特定的任务执行若干次时, 尤其有用尤其有用。 宏语言可以使用户:宏语言可以使用户: l定义自己的宏,或重新定义正执行的宏定义自己的宏,或重新定义正执行的宏 l简化长的或复杂的汇编代码简化长的或复杂的汇编代码 l访问由归档器建立的宏库访问由归档器建立的宏库 l在一个宏内定义条件块和可重复的块在一个宏内定义条件块和可重复的块 l在一个宏内操作字符串在一个宏内操作字符串 l 控制展开列表控制展开列表 定义宏定义宏 在程序中使用宏之前,首先必须定在程序中使用宏之前,首先必须定 义它。可以用两种方法来定义:义它。可以用两种方法来定义: (1)在源文件或)
29、在源文件或.include/.copy文件中定义文件中定义 (2)在宏库中定义)在宏库中定义 定义宏定义宏 macname .macro parameter model statements .mexit .endm 定义宏定义宏 vmacname 宏的名字宏的名字 v.macro 是一个伪指令,确认源语句为是一个伪指令,确认源语句为 宏定义的第一行宏定义的第一行 vparameters 选项,作为选项,作为.macro伪指令伪指令 的操作数的操作数 vModel statements 每次调用宏时执行的每次调用宏时执行的 指令或伪指令指令或伪指令 v.endm 终止宏定义终止宏定义 定义宏举
30、例定义宏举例 * add3 p1, p2, p3 * p3 = p1 + p2 + p3 add3 .macro p1, p2, p3 ld p1,a add p2,a add p3,a stl a,p3 .endm 调用宏调用宏 在源程序中用宏的名字作为操作在源程序中用宏的名字作为操作 码来调用宏码来调用宏 add3 x, y, z 展开宏展开宏 v在源程序调用宏时,汇编器将其展在源程序调用宏时,汇编器将其展 开。在展开时,汇编器将变量传递开。在展开时,汇编器将变量传递 给宏参数,用宏定义取代宏调用语给宏参数,用宏定义取代宏调用语 句,然后汇编其源代码。在省缺情句,然后汇编其源代码。在省缺情
31、 况下,宏展开打印在列表文件中。况下,宏展开打印在列表文件中。 可以用伪指令可以用伪指令.mnolist来停止其展开来停止其展开 的列表。的列表。 展开宏展开宏 0000 2000 ld x,a 0001 0001 add y,a 0002 0002 add z,a 0003 6200 stl a,z * Reserve space for vars 0000 .bss x, 1 0001 .bss y, 1 0002 .bss z, 1 宏库宏库 定义宏的一种方法是建立一个宏定义宏的一种方法是建立一个宏 库。宏库是包含有宏定义的文件的库。宏库是包含有宏定义的文件的 集合。必须使用归档器来把这
32、些文集合。必须使用归档器来把这些文 件收集到一个文件中。宏库中的每件收集到一个文件中。宏库中的每 一个成员都包含一个宏定义。该文一个成员都包含一个宏定义。该文 件必须是未汇编的源文件。宏名字件必须是未汇编的源文件。宏名字 和文件名必须相同,且宏文件名的和文件名必须相同,且宏文件名的 扩展名必须是扩展名必须是.asm 访问宏库访问宏库 用伪指令用伪指令.mlib来访问宏库,其语法为:来访问宏库,其语法为: .mlib macro library filename 当汇编器识别到该伪指令时,就打开当汇编器识别到该伪指令时,就打开 该宏库,并建立该宏库内容的表该宏库,并建立该宏库内容的表 TMS32
33、0C54x程序简例程序简例 v一个一个16位的二进制数既可以表示一个整数,也位的二进制数既可以表示一个整数,也 可以表示一个小数。可以表示一个小数。 v当它表示一个整数时,其最低位(当它表示一个整数时,其最低位(D0)表示)表示20, D1位表示位表示21,次高位(,次高位(D14)表示)表示214。 v如果表示一个有符号数时,最高位(如果表示一个有符号数时,最高位(D15)为)为 符号位,符号位,0表示正数,表示正数,1表示负数。表示负数。 v例如,例如,07FFFH表示最大的正数表示最大的正数32767(十进(十进 制),而制),而0FFFFH表示最大的负数表示最大的负数-1(负数用二(负
34、数用二 进制的补码方式显示)。进制的补码方式显示)。 TMS320C54x程序简例程序简例 v当需要表示小数时,小数点的位置始终在最高当需要表示小数时,小数点的位置始终在最高 位后,最高位(位后,最高位(D15)表示符号位。)表示符号位。 v次高位(次高位(D14)表示)表示2-1,然后是,然后是2-2,最低位,最低位 (D0)表示)表示2-15。 v 04000H表示小数表示小数0.5,01000H是小数是小数2-3 = 0.125, 0001H则表示则表示16位定点位定点DSP能表示的最小的小数能表示的最小的小数 (有符号)(有符号) 2-15 = 0.000030517578125。 T
35、MS320C54x程序简例程序简例 v在在DSP中,一个中,一个16进制的数可以表示不同的十进制的数可以表示不同的十 进制数,或者是整数,或者是小数(如果表示进制数,或者是整数,或者是小数(如果表示 小数,必定小于小数,必定小于1),但仅仅是在做整数乘除),但仅仅是在做整数乘除 或小数乘除时,系统对它们的处理才是有所区或小数乘除时,系统对它们的处理才是有所区 别的,而在加减运算时,系统都当成整数来处别的,而在加减运算时,系统都当成整数来处 理。理。 v在后面的例子中,除非有特别说明,我们指的在后面的例子中,除非有特别说明,我们指的 都是有符号数。在都是有符号数。在C54X中,将一个小数用中,将
36、一个小数用16位定位定 点格式来表示的方法是用点格式来表示的方法是用215乘以该小数,然后取乘以该小数,然后取 整。整。 定点加法定点加法 temp3=temp1+temp2 ld temp1,a;变量;变量temp1装入累加器装入累加器A add temp2,a ;变量;变量temp2与累加器与累加器A相相 加,结果放入加,结果放入A中中 stl a,temp3;结果(低;结果(低16位)存入变位)存入变 量量temp3中。中。 v没有特意考虑没有特意考虑temp1和和temp2是整数还是是整数还是 小数小数 定点减法定点减法 stm #temp1,ar3;变量;变量temp1的地址的地址
37、装入装入ar3寄存器寄存器 stm #temp2,ar2;变量;变量temp2的地址的地址 装入装入ar2寄存器寄存器 sub *ar2, *ar3,b ;变量;变量temp2和和temp1 都左移都左移16位,然后相减,结果放入累加位,然后相减,结果放入累加 器器B中(高中(高16位)位) sth b,temp3 ;相减的结果(累加器;相减的结果(累加器B的的 高高16位)存入变量位)存入变量temp3。 定点整数乘法定点整数乘法 vC54X提供了大量的乘法运算指令,其结提供了大量的乘法运算指令,其结 果都是果都是32位,放在位,放在P寄存器中寄存器中 vMPYU是一条专用于无符号数乘法运算
38、是一条专用于无符号数乘法运算 的指令,而其它的乘法指令都是有符号数的指令,而其它的乘法指令都是有符号数 的乘法的乘法 定点整数乘法定点整数乘法 rsbx FRCT ;清;清FRCT标志,准备整数乘标志,准备整数乘 ld temp1,T;变量;变量temp1装入装入T寄存器寄存器 mpy temp2,a;temp2*temp1,结果放入,结果放入 累加器累加器A(32位)位) stha,temp3;结果的高;结果的高16位存入位存入temp3 stla,temp4;结果的低;结果的低16位存入位存入temp4 定点整数乘法定点整数乘法 v例例 temp1=1234H(十进制的(十进制的4660)
39、 temp2=9876H(十进制的(十进制的-26506) 乘法的结果在累加器乘法的结果在累加器A中为中为F8A343F8H( 十进制的十进制的-123517960) 定点小数乘法定点小数乘法 v由于两个有符号的小数相乘,其结果的由于两个有符号的小数相乘,其结果的 小数点的位置在次高的后面,所以必须小数点的位置在次高的后面,所以必须 左移一位,才能得到正确的结果。左移一位,才能得到正确的结果。C54X 中提供了一个状态位中提供了一个状态位FRCT,将其设置为,将其设置为 1时,系统自动将乘积结果左移移位。时,系统自动将乘积结果左移移位。 定点小数乘法定点小数乘法 ssbx FRCT;FRCT=
40、1,准备小数乘法,准备小数乘法 ld temp1,16,a ;temp1装入装入A的高的高16位位 mpyb temp2;temp2乘乘A的高的高16位,结位,结 果在果在B中,同时将中,同时将temp2装入装入T寄存器寄存器 sthb,temp3;将乘积的高;将乘积的高16位存位存temp3 定点小数乘法定点小数乘法 v例例 temp1=0ccdH(十进制的(十进制的0.1) temp2=0599aH(十进制的(十进制的0.7) 两数相乘后两数相乘后B累加器的内容为累加器的内容为08f5f0a4H(十(十 进制的进制的0.07000549323857) 如果仅保存结果的高如果仅保存结果的高1
41、6位位08f5H(十进制的(十进制的 0.06997680664063) 为了提高精度,可以使用为了提高精度,可以使用RND或使用或使用MPYR 指令对低指令对低16位做四舍五入的处理位做四舍五入的处理 定点整数除法定点整数除法 vC54X没有提供专门的除法指令,一般有没有提供专门的除法指令,一般有 两种方法来完成除法。两种方法来完成除法。 v使用乘法来代替,除以某个数相当于乘以使用乘法来代替,除以某个数相当于乘以 其倒数,所以先求出其倒数,然后相乘。其倒数,所以先求出其倒数,然后相乘。 这种方法对于除以常数特别适用。这种方法对于除以常数特别适用。 v使用使用SUBC指令,重复指令,重复16次
42、减法完成除法次减法完成除法 运算。运算。 v下面以下面以temp1/temp2为例,说明如何使用为例,说明如何使用 SUBC指令实现整数除法。指令实现整数除法。 定点整数除法定点整数除法 vtemp1被除数,被除数,temp2除数,除数,temp3商商 先判断结果的符号,将两数相乘,保存先判断结果的符号,将两数相乘,保存A或或B的的 高高16位以便判断结果的符号。然后只做两个正数位以便判断结果的符号。然后只做两个正数 的除法,最后修正结果的符号。的除法,最后修正结果的符号。 为了实现两个数相除,先将被除数装入为了实现两个数相除,先将被除数装入A或或B的的 低低16位,接着重复执行位,接着重复执行SUBC指令,用除数重复指令,用除数重复 减减16次后,除法运算的商在累加器的低次后,除法运算的商在累加器的低16位,余位,余 数在高数在高16位。位。 定点整数除法定点整数除法 ldtemp1,T;被除数装入;被除数装入T寄存器寄存器 mpy temp
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 甘肃省庆阳市庙渠初级中学2024届中考二模数学试题含解析
- 2024-2025公司员工安全培训考试试题附答案【典型题】
- 钣金焊接素材褶边
- 25年公司厂级员工安全培训考试试题及答案审定
- 2025公司、项目部、各个班组三级安全培训考试试题【含答案】
- 2025年公司厂级安全培训考试试题及答案考点精练
- 2025各个班组三级安全培训考试试题含答案AB卷
- 2024-2025新入职工入职安全培训考试试题及答案(全优)
- 2024-2025企业员工岗前安全培训考试试题答案突破训练
- 2024-2025员工三级安全培训考试试题模拟题
- 公司事故隐患内部报告奖励机制
- (新版)三级广告设计师职业技能鉴定考试题库-上(单选题)
- 广东省水利水电建筑工程预算定额(上册)
- 凝中国心铸中华魂铸牢中华民族共同体意识-小学民族团结爱国主题班会课件
- 2024年AI大模型场景探索及产业应用调研报告-前瞻
- 2024年江苏高考数学试题及答案
- 2022-2023年度广东省职业院校学生专业技能大赛智慧零售运营与管理赛项规程
- 08D800-6民用建筑电气设计与施工室内布线
- 基于源流梳理及名词考据的仲景微汗法应用阐释与实证研究
- 《集成电路版图设计》课程标准
- 解除独家合同范本
评论
0/150
提交评论