




已阅读5页,还剩262页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第三章DSP的软件结构 Introduction 汇编语言程序编写方法TMS320C54x的寻址方式TMS320C54x指令的表示方法TMS320C54x的指令系统汇编伪指令 汇编程序语法 TMS320的汇编程序包含汇编指令 伪指令 assemblerdirectives 汇编语言指令 assemblylanguageinstructions 宏指令 macrodirectives 和注释 comments 汇编程序源程序格式 label mnemonic operandlist comment 标号 助记符 操作数 注释 SYM1 set2 符号SYM1 2Begin LD SYM1 AR1 将2装入AR1 汇编程序语法 所有的语句必须由语句标号 空格 号或 号开头 语句标号不是必须的 如果用 就必须在第一列 语句中的各部分之间 由一个或多个空格分开 注释不是必须的 注释可以从第一列的 号或 号开头 如果不是从第一列开始 就必须用 号开头 语句标号 由字母 数字 组成 最多不超过32个字符 对大小写敏感 第一个字符不能是数字 后跟 但分号不是语句标号的组成部分 助记符 助记符不允许从第一列开始 否则被认为是语句标号 助记符可以是机器指令 如ABS MPYU SPH等 伪指令 如 data list set等 宏指令 如 macro var mexit等 和宏调用 操作数 操作数可以是常数 符号或表达式 当操作数多于一个时 用逗号分开 汇编器允许指定常数 符号或表达式作为地址 立即数或间接地址 操作数前缀规定如下 前缀 表示操作数为立即数 如 Label ADD 123 B 表示将操作数123 十进制 和累加器B中的内容相加 前缀 操作数为间接地址 使用操作数的内容作为地址 如 Label LD AR4 A 操作数 AR4为间接地址 将AR4中的内容作为地址 然后将该地址的内容装入到指定的累加器A 常数 二进制常数 如01B或01b 八进制常数 如10Q或10q 十进制常数 如23 十六进制常数 如78H或78h 字符常数 如 A 或 b 字符串 如 sampleprogram 符号 符号用于作标号 常数和替代符号 符号名可长达200个字符 可由A Z a z 0 9 组成 且第一个字符不能是数字 符号对大小写敏感 符号仅在定义它的汇编程序中有效 除非用 global或 def伪指令声明为外部符号 例 K set1024 表3 1指令系统中的符号和缩写 表3 1指令系统中的符号和缩写 续1 表3 1指令系统中的符号和缩写 续2 表3 1指令系统中的符号和缩写 续3 表3 1指令系统中的符号和缩写 续4 表达式 表达式是一个常数 符号 或用算术运算符连接起来的常数或符号 表达式的值的范围为 32768到32767例 X set50hsym1 set100h X 可以用在表达式中的运算符 优先级 符号 含义 括弧内的表达式最先计算一元加 减 反码 逻辑非乘 除 模运算加 减左移 右移小于 小于等于 大于 大于等于等于 不等于按位与按位异或按位或 123456789 注释区 注释区可以从任何一列开始 可能包含ASCII字符和空格 注释打印在列表文件中 但不影响汇编工作 TMS320C54x的寻址方式 立即寻址 指令中有一个固定的立即数 绝对地址寻址 指令中有一个固定的地址 16位 累加器寻址 按累加器的内容作为地址去访问程序存储器中的一个单元 直接寻址 指令编码中含有的7位地址与DP或SP一起合成数据存储器中操作数的实际地址 间接寻址 通过辅助寄存器寻址 存储器映射寄存器寻址 修改存储器映射寄存器中的值 而不影响当前数据页面指针DP和当前堆栈指针SP的值 堆栈寻址 把数据压入或弹出系统堆栈 寻址指令中用到的缩写符号及其含义 立即寻址 短立即数寻址 单字指令 在指令字中包括立即操作数 RPT 99 将下一条指令循环100次 LD 0h DP 将0装入数据页指针 ADD 0ffh A 将0ffh加给AccA 立即寻址 立即寻址 长立即数寻址 指令字的后一个字是立即数 双字指令 ADD 1234h A 将 1234h加给AccA 立即寻址 绝对地址寻址 数据存储器地址 dmad 寻址 用一个符号或一个数来确定数据空间中的一个地址例 MVKDsample AR5 sample所代表的就是一个dmadMVKD1000h AR5 将数据存储器1000h单元的数据传送到由AR5所指的存储单元中 1000h代表的是一个dmad 绝对地址寻址 程序存储器地址 pmad 寻址 用一个符号或一个数来确定程序地址空间中的一个地址例 MVPDtable AR5table所代表的就是一个pmad 绝对地址寻址 端口地址 PA 寻址用一个符号或常数来确定I O口地址 PORTRPA Smem 从PA单元端口读入一个数据 传送到Smem所指的数据单元中去 PORTWSmem PA 从Smem所指的数据单元取出一个数据 传送到PA单元端口 PORTRFIFO AR5 把一个数从端口为FIFO的I O口传送到AR5所指向的数据单元 绝对地址寻址 lk 寻址用一个指定数据空间的地址符号或一个常数来确定数据存储器中的一个地址例 LD BUFFER A 把地址为BUFFER的数据单元中的数据装到AccA中 累加器寻址 用累加器中的数作为一个地址 可用来对存放数据的程序存储器寻址 READASmem WRITASmem READA 把累加器A所确定的程序存储器单元中的一个字 传送到数据存储器单元Smem中 WRITA 把数据单元Smem中的一个字 传送到累加器A确定的程序存储器单元 直接寻址 TMS320C54的数据存储器分为512页 每页128字 设置一个数据页指针DP DataPointer 用9 bit指向一个数据页 再加上一个7 bit的页内偏移地址 形成16 bit的数据地址 LD 4 DP 指向页4 0200h 027Fh ADD9h A 将数据页4中地址9h的数据加给AccA 直接寻址 间接寻址 8个辅助寄存器 AR0 AR7 由一个辅助寄存器指针 ARP3 bit 来指定 辅助寄存器算术单元 ARAU 作16 bit无符号数运算 决定一个新的地址 装入辅助寄存器中的一个 间接寻址 间接寻址 可完成以下操作 用单指令对存储器进行16位数据的读操作或写操作 用单指令可以完成对两个独立的数据存储单元的读操作 用单指令可以读和写两个连续的数据存储单元 用单指令可以在读一个数据存储单元的同时 向另一个存储单元进行写操作 1 单操作数寻址 用来完成存储单元中16位单数据的读写操作 指令格式 注1 寻址16位字时增 减量为1 32位字时增 减量为2 注2 这种方式只能用写操作指令 注3 这种方式不允许对存储器映像寄存器寻址 注1 寻址16位字时增 减量为1 32位字时增 减量为2 注3 这种方式不允许对存储器映像寄存器寻址 间接寻址 AR0 AR7的内容相当灵活 可以装入立即数 加上立即数 减去立即数 也可以从数据存储器装入地址 举例 间接寻址 ADD 8 A 将当前辅助寄存器所指的地址里的数据 左移8 bit后加给AccA ADD 8 A AR4 数据左移加给AccA后 当前辅助寄存器加1 选择辅助寄存器AR4 ADD 8 A 将当前辅助寄存器所指的地址里的数据 左移8 bit后加给AccA 当前辅助寄存器加1 间接寻址 ADD 0 8 A 执行加法后 将AR0的值加给当前辅助寄存器 ADD AR0 8 A 执行加法后 将AR0的值加给当前辅助寄存器 但反向进位 正向进位与反向进位 100100 100 100 1000010 位倒序寻址 AR0 100AR1 000按AR1寻址后 将AR0加给AR1 反向进位 位倒序寻址 原序原地址位倒序后地址位倒序 00000000 10011004 20100102 30111106 41000011 51011015 61100113 71111117 2 双操作数寻址 用于完成执行2次读操作或者1次读和1次的并行存储操作 用 表示 这些指令代码都是1个字长 而且只能以间接寻址方式进行操作 两个数据存储器操作数由Xmem和Ymem表示 Xmem 读操作数 Ymem 在两次读操作的指令中 表示一个读操作数 在一次读和一次写的指令中 表示写操作数 2 双操作数寻址 用于完成执行2次读操作或者1次读和1次的并行存储操作 这些指令代码都是1个字长 而且只能以间接寻址方式进行操作 指令格式 2 双操作数寻址 2 双操作数寻址 在指令中 由于只有2位可以用于选择辅助寄存器 所以根据Xar或Yar的值可以选择4个寄存器 间接寻址特点 通过辅助寄存器和辅助寄存器指针来寻址数据空间存储单元 并自动实现增量 减量 变址寻址 循环寻址 共有16种修正地址的方式 间接寻址特点 存储器映射寄存器 MMR 寻址 存储器映射寄存器寻址用来修改存储器映射寄存器 存储器映射寄存器寻址既可以在直接寻址中使用 又可以在间接寻址中使用 STM 8888h T 存储器映射寄存器寻址 T暂存器 存储器映像寄存器寻址 是一种不考虑DP和SP为何值 以0为基地址来访问MMR的寻址方式 主要用于修改存储器映像寄存器的内容 1 采用直接寻址方式 2 采用间接寻址方式 高9位数据存储器地址置0 利用指令中的低7位地址直接访问MMR 高9位数据存储器地址置0 按照当前辅助寄存器ARx的低7位地址访问MMR LDMMMR dst 将MMR加载到累加器MVDMdmad MMR 数据存储器向MMR传送数据MVMDMMR dmad MMR向指定地址传送数据MVMMMMRx MMRy MMRx向MMRy传送数据POPMMMR 将数据从栈顶弹至MMRPSHMMMR 将MMR数据压入堆栈STLMsrc MMR 累加器低位存入MMRSTM lk MMR 长立即数lk存入MMR C54x共有8条指令可以进行MMR寻址 存储器映射寄存器 MMR 寻址 堆栈寻址 系统堆栈用来在中断和子程序期间自动存放程序计数器 它也能用来存放额外的数据项或传递数据值 处理器使用一个16 bit的存储器映射寄存器 堆栈指针 SP 来对堆栈寻址 它总是指向存放在堆栈中的最后一个元素 在压入堆栈操作时 SP先减1 然后将数据压入堆栈 在弹出堆栈操作时 数据从堆栈中弹出后 SP再加1 PUSH 把一个数据存储器数据压入堆栈POP 从堆栈中弹出一个数据至数据存储器单元 堆栈寻址 C54x的堆栈是向低地址生长 并由16位堆栈指针SP管理 SP总是指向栈顶 堆栈寻址 利用SP指针 按照先进后出的原则进行寻址 当进栈操作时 SP先减1 然后数据进入堆栈 当出栈操作时 数据先出栈 然后SP加1 0001 0010 0011 0100 0101 0110 0001 0010 0011 0100 0101 0110 0011 sp 操作前的堆栈和SP 0010 sp 操作后的堆栈和SP X1 X1 X2 图 堆栈操作对堆栈指针的影响 堆栈寻址 采用堆栈寻址的指令 PSHDSmem 将Smem中的数据压入堆栈PSHMMMR 将MMR中的数据压入堆栈POPDSmem 将数据从栈顶弹至Smem中POPMMMR 将数据从栈顶弹至MMR中 指令 TMS320C54x的指令集有近两百条指令 按功能分为如下几类 算术运算指令 逻辑运算指令 程序控制指令 装入和存储指令 算术运算指令 加法指令 减法指令 乘法指令 乘加指令 乘减指令 双数 双精度指令 特殊操作指令 加法指令 加法指令 共4条 ADD ADDC ADDM ADDS 加法指令 功能 把一个16bit数加到选定累加器dst src 中 加法指令 该指令受SXM和OVM影响 且影响C和OVdst OVsrc ADD AR3 A ADD AR3 14 A 将AR3指向的地址单元0100h的内容1500h左移14位 得到5400000h加上1200h 将结果5401200h存在累加器A中 加法指令举例 ADD 11D8H 8 A B ADDA 8 B 加法指令 功能 把16bit的Smem和进位位C的值加到src中 ADDC AR2 5 A 将AR2加上5后指向的地址单元内容 并进位加到累加器A中 此指令计算0013h 0004h 1h 0018h 加法指令 功能 16bit的Smem与16bit立即数1k相加 结果放在Smem中 加法指令举例 ADDM 0123BH AR4 DataMemory ADDM 0FFF8H AR4 DataMemory 加法指令举例 加法指令 功能 把无符号16bit的Smem加到src中 加法指令举例 ADDS AR2 B DataMemory 减法指令 减法指令 减法指令 续 共4条 SUB SUBB SUBC SUBS 功能 从选定累加器或双Xmem中减去一个16bit值 结果放在dst src SUB AR1 14 A DataMemory 减法指令举例 SUBA 8 B 减法指令举例 SUB 12345 8 A B 减法指令举例 减法指令 功能 从源累加器中减去Smem的值和进位位C的逻辑反 SUBBDAT5 A DataMemory 减法指令举例 SUBB AR1 B DataMemory 减法指令举例 减法指令 功能 16bit的Smem左移15bit 再从src中减去移位后的值 若结果大于0 则结果左移一位加上1 放入src中 否则只把src的值左移一位 放入src中 SUBCDAT2 A DataMemory 减法指令举例 减法指令 功能 从源累加器src中减去16bit无符号Smem的值 SUBS AR2 B DataMemory 减法指令举例 乘法指令 乘法指令 共4条 MPY R MPYA MPYU SQUR 功能 T寄存器的值或一个数据存储器值与另一个数据存储器的值或一个立即数相乘 结果放入dst 在读操作数阶段把Smem或Xmem的值装入T寄存器中 该指令受FRCT和OVM的影响 并能影响OVdst MPYDAT13 A MPY 0FFFEH A 乘法指令举例 乘法指令 功能 A的高位与Smem或T寄存器的值相乘 结果放dst或B中 在读操作数期间把Smem装入T寄存器 MPYA AR2 DataMemory 乘法指令举例 MPYAB 乘法指令举例 乘法指令 功能 无符号T寄存器值与无符号Smem相乘 结果放入dst MPYU AR0 A DataMemory 乘法指令举例 乘法指令 功能 Smem或累加器A的高位平方后 结果放在dst中 SQURA B 乘法指令举例 乘加和乘减指令 乘加和乘减指令 乘加和乘减指令 共9条 乘 加 MAC R MACA R MACD MACP MACSU SQURA乘 减 MAS R MASA R SQURS 乘加和乘减指令 功能 完成乘和累加运算 并可进行凑整 结果放dst src中 乘加和乘减指令 该指令受FRCT和OVM的影响 并能影响OVdst MAC AR5 A MAC 345h A B B A T 345h MAC AR5 AR6 A B B A AR5 AR6 T AR5 MACR AR5 A A rnd A T AR5 MACR AR5 AR6 A B B rnd A AR5 AR6 T AR5 乘加和乘减指令 功能 A的高位与Smem或T寄存器中的内容相乘 乘积加到累加器B中或src中 MACA AR5 B B AR5 A 31 16 T AR5 AR5 AR5 1 MACAT B 乘 累加指令举例 DataMemory 乘 累加指令举例 MACAR AR5 B 乘加和乘减指令 功能 Smem与pmad相乘 乘积和src值相加 结果放src中 并把Smem装入下一数据单元和T寄存器 ProgramMemory 乘 累加指令举例 MACD AR3 COEFFS A 乘加和乘减指令 功能 Smem与pmad相乘 乘积和src相加 结果放src中 同时把Smem复制到T寄存器中 ProgramMemory 乘 累加指令举例 MACP AR3 COEFFS A 乘加和乘减指令 功能 无符号Xmem与带符号Ymem相乘 乘积与src相加 结果放src中 同时把Xmem存入T寄存器 MACSU AR4 AR5 A 乘 累加指令举例 乘加和乘减指令 功能 对Smem求平方并加到src中 同时Smem放到T寄存器中 SQURA AR3 A DataMemory 乘 累加指令举例 乘加和乘减指令 功能 Xmem在读操作数阶段装入到T寄存器中 一个存储器操作数与T寄存器内容相乘 或两个存储器操作数相乘 再从src或dst中减去该乘积 结果存放src或dst中 MAS AR5 A DataMemory 乘 减指令举例 MASR AR5 AR6 A B 乘 减指令举例 DataMemory 乘 减指令举例 例3 81MASA AR5 MASA AR5 B MASAT B 乘 减指令举例 SQURSDAT9 A 乘 减指令举例 MACX0 Y0 AX R0 X0Y R4 N4 Y0 这条指令命令DSP56300 将寄存器X0和Y0中的数相乘 结果加到AccA中 将寄存器R0所指的X存储器地址中的值装入寄存器X0 将寄存器R4所指的Y存储器地址中的值装入寄存器Y0 R0的值加1 寄存器N4的值加给R4 bssx 4 1a0 word012ha1 word3211ha2 wordfe11ha3 wordff03h sect program LD X AR1LD 0 A AR1LD a0 T MAC ALD a1 TMAC ALD a2 TMAC ALD a3 TMAC A 逻辑运算指令 与逻辑运算指令 共2条 AND ANDM AND AR3 A A A AR3 AR3 AR3 1 ANDM 00FFh AR4 AR4 AR4 00FF AR4 AR4 1 或逻辑运算指令 共2条 OR ORM ORA 3 B 或指令举例 ORM0404H AR4 或指令举例 异或逻辑运算指令 共2条 XOR XORM XORA 3 B XOR AR3 A 异或指令举例 XORM 0404H AR4 DataMemory 异或指令举例 移位指令 移位指令 共6条 ROL ROLTC ROR SFTA SFTC SFTL ROLA ROLTCA RORA SFTAB 5 累加器算术移位 SFTAA 5 B SHIFT 0 指令执行算术右移 SXM 1 移出的高位用符号位填 SFTCA SFTLA 5 B 逻辑右移 高位补0 测试指令 测试指令 共5条 BIT BITF BITT CMPM CMPR BIT AR5 15 12 指令中的 15 12 表示测试第12位TC AR5 15 12 AR5 AR5 1 BITF5 00FFh 测试Smem中指定的某些位 lk常数在测试一位或多位时起屏蔽作用 假如指定的一位或多位为0 状态寄存器ST0的TC位清0 否则该位置1 BITT AR7 0 CMPM AR4 0404h 比较16位单数据存储器操作数Smem和16位常数lk是否相等 若相等 ST0寄存器的TC位置1 否则该位清0 CMPR2 AR4 测试AR4是否大于AR0 程序控制指令 分支指令 调用指令 中断指令 返回指令 循环指令 堆栈操作指令 混合程序控制指令 转移指令 转移指令 功能 指令指针指向指定的pmad 一个符号或数字 共6条 B D BACC D BANZ D BC D FB D FBACC D BD1000h 程序指针指向指定的程序存储器地址 pmad 该地址可以是符号或一个数字 如果是延迟转移 指令带有后缀D 紧接着该指令的两条单字指令或一条双字指令从程序存储器中取出先执行 BACCA 程序指针指向src的低16位所确定的地址 如果是延迟转移 指令带有后缀D 紧跟着该指令的两条单字或一条双字指令从程序存储器中取出先执行 BANZ2000h AR3 指令的条件代码所对应的条件 条件说明条件说明AEQA 0ANEQA 0ALTA0ALEQA 0AGEQA 0AOVAOV 0ANOVAOV 1CC 1NCC 0TCTC 1NTCTC 0 BC2000h AGT FB012000h FBACCA 调用指令 子程序调用指令 功能 程序指针转移到src的低位所确定的16bit地址单元 返回地址压入栈顶 CALAA 程序指针转移到src的低位所确定的地址单元 返回地址压入栈顶 如果是延迟调用 紧接着该指令的两条单字指令或一条双字指令从程序存储器中取出来先执行 CALLD1000h CC2222h AGT FCALAA 中断指令 中断指令 功能 程序指针PC指向由K所确定的中断向量 该指令影响INTM和IFR INTR3 TRAPl0h 返回指令 返回指令 共6条 FRET D FRETE D RC D RET D RETE D RETF D FRET FRETE RCANOV RET RETE 循环指令 重复指令 功能 指令执行时 首先把循环的次数装入循环计数器 RC RPTDATA127 该指令实现对下一条指令的自动循环执行 在循环执行期间 所有外部的中断都不会响应 如果有较长时间的循环 一定保证循环期间没有中断产生 ST 99 BRC 执行循环块100次RPTBend block 1 循环执行一段指令块 循环的次数由存储器映射的块循环计数器 BRC 确定 BRC的值必须在指令执行之前设置 程序执行时 块循环起始地址寄存器 RSA 中装入程序指针PC 2 如果是采用了延迟就是PC 4 块循环尾地址寄存器 REA 中装入程序存储器地址 pmad RPTZA 1023 对目的累加器dst清0 并且循环执行下一条指令n 1次 堆栈操作指令 堆栈操作指令 功能 把一短立即数偏移k加到SP中 FRAME10h 把一个短立即数K加到堆栈指针SP中 POPD10 把由堆栈指针SP寻址的数据存储器单元的内容转移到由Smem确定的数据存储器单元中 然后堆栈指针SP执行加1操作 POPMAR5 把由堆栈指针SP寻址的数据存储器单元的内容转移到指定的存储器映射寄存器MMR中 然后堆栈指针SP执行加1操作 PSHD AR3 SP减1后将数据压入堆栈 PSHMBRC BRC 存储器映射的块循环计数器 SP减1后 将MMR压入堆栈 程序控制指令 混合程序控制指令 IDLEK 1 K 3 执行 PC 1PC状态位受INTM位的影响强迫程序执行等待操作直至不可屏蔽中断产生或复位中断产生 芯片保持空闲状态 低功耗方式 不论INTM如何设置 只要有一个不可屏蔽中断出现 系统就退出空闲状态 如果INTM 1 程序继续执行紧接着IDLE的指令 不会响应中断 如果INTM 程序转移到相应的中断服务程序 IDLEK K的值决定了可以使芯片从空闲状态中激活的中断类型 K 1定时器和串口等外围设备在空闲状态时仍有效 此时定时器和串口仍然有输出时钟信号 外围中断和复位以及外部中断可以激活芯片 K 2定时器和串口中等外围设备在空闲状态时无效 此时定时器和串口没有输出时钟信号 复位和外部中断可以激活芯片 K 3定时器和串口等外围设备在空闲状态时无效 锁相环PLL被禁止 此时芯片将彻底进入空闲状态 MAR AR3 修改由Smem所确定的辅助寄存器的内容 在兼容方式下 CMPT 1 并且ARx AR0 指令会修改ARx的内容以及辅助寄存器指针 ARP 的值 在非兼容方式下 CMPT 0 指令只修改辅助寄存器的值 而不改变ARP NOP 执行PC 1PC该指令除了程序指针执行加 操作以外不执行任何操作 这在建立流水和执行延迟方面比较有用 STLMA AR1LD AR1 B STLMA AR1NOPNOPLD AR1 B RESET 非屏幕的软件复位 该指令不受INTM的影响 但它对INTM置位以禁止中断 RSBXSXMRSBX1 8 对状态寄存器ST0和ST1的特定位清0 N指明了被修改的状态寄存器 N 0表示修改ST0寄存器 N 1表示修改ST1寄存器 SBIT确定被修改的位 可直接用状态寄存器中的一个特定位的名称作为操作数 这样就不需要使用N和SBIT SSBXSXMSSBX1 8 对状态寄存器ST0和ST1的特定位置1 XC1 ALEQMAR AR1 该指令的运行情况由n和所选择的条件决定 如果n 1并且满足条件 就执行该指令的下一条单字指令 如果n 2并且满足条件 就执行该指令的下两条单字指令或者一条双字指令 如果不满足条件 执行n次nop操作 装入和存储指令 一般的装入和存储指令条件存储指令并行装入和存储指令并行装入和乘法指令并行存储和加减乘指令混合装入和存储指令 一般的装入指令 一般装载指令 共7条 DLD LD LD LDM LDR LDU LTD DLD AR3 B 把一个32位的长操作数Lmem装入目的累加器dst中 LD AR4 DP 把一个数据存储器的值或一个短立即数装入T寄存器或状态寄存器中的DP ASM和ARP位 LDMAR4 A 把存储器映射寄存器MMR中的值装入到目的累加器的低位字中 累加器的高位字和保护位清0 不论DP的当前内容或ARx的高9位是多少 有效地址的高9位清0 将数据页指针设置为0 LDR AR1 A 把单数据存储器操作数Smem左移16位后装入目的累加器DST的高端 位31 16 Smem通过对累加器的位14 0清0进行四舍五入运算 累加器的第15位设置为1 LDU AR1 A 把单数据存储器Smem的值装入目的累加器dst的低端 位15 0 dst的保护位和高端 位39 16 清0 因此 数据被看成是一个无符号的16位数 不管SXM位的状态如何都不进行符号扩展 存贮指令 一般存储指令 共6条 DST ST STH STL STLM STM DSTB AR3 把源累加器的内容存放在一个32位的长数据储存器单元中Lmem中 STTRN 5 STT AR7 ST FFFFh 0 STHA 10 把源累加器src的高端 位31 16 存放到数据存储器单元Smem中 STHB 8 AR7 把源累加器移位后位31 16存放到数据存储器单元 Smem或Xmem 中 STLMA BRC 把源累加器src的低端 位15 0 存放到存储器映射寄存器MMR中 无论DP的当前值或ARx的高9位是多少 有效地址的高9位清0 并行装入和乘法指令 并行加载和乘法指令 LD AR4 16 A MAC AR5 B 16位双数据存储器操作数Xmem左移16位后装入目的累加器的高端 同时并行执行一个双数据操作数Ymem与T寄存器的值相乘再把乘积加到dst 中的操作 LD AR4 16 A MACR AR5 B 指令带有R后缀 则对乘积和累加器操作的结果进行四舍五入 再存在dst中 四舍五入的方法是 给该值加上215 然后将结果的低端 位15 0 清0 混合装入和存储指令 混合加载和存储指令 MVDD AR3 AR5 将Xmem寻址的数据存储器单元的内容复制到Ymem寻址的数据存储器单元中 部分特殊运算指令 详见教材P89页 FIRS指令 FIRS指令用于线性相位滤波器的处理 一个如右图的8阶线性相位滤波器的输出表达式 FIRS AR2 AR3 COEFFS y c0 x0 c1 x1 c2 x2 c6 x6 c7 x7 c0 x0 x7 c1 x1 x6 c2 x2 x5 c3 x3 x4 Viterbi译码指令DADST DSADT CMPS 在信道均衡和解码中经常会使用到Viterbi算法 C54x为此提供了专门的硬件和指令 根据输入信号确定分支似然概率增加量D1 D2 放在T寄存器中 TRN存储可能信号译码输出 最小均方运算LMS 在进行自适应滤波等操作中经常会使用LMS算法 C54x提供的LMS指令方便了编程 如下图所示的自适应滤波器设计中 滤波器系数修正公式为 最小均方运算LMS 伪指令 AssemblerDirectives 伪指令为程序提供数据 控制汇编过程 所作的工作包括 将代码和数据汇编到指定的位置 在存储器中为未初始化的变量保留存储空间 控制列表的方式 初始化存储器 汇编条件块 定义全局变量 为汇编器指定可以获得宏的库 检查符号调试信息 段定义伪指令 bss在该段中保留若干字 data汇编入已初始化的数据段 sect sectionname 汇编入已命名的段 text汇编入可执行的代码段 初始化常数伪指令 float初始化一个32 bit的浮点常数 int初始化一个或多个16 bit的无符号整数 string初始化一个或多个字符串 word初始化一个或多个16 bit的带符号整数 格式化输出列表的伪指令 list开始源文件列表 nolist停止源文件列表 length设置源文件列表的页长度 title在列表文件每一页打印文件名 引用其他文件的伪指令 copy include包含其他文件的源语句 global确认一个或多个全局 外部 符号 mlib定义宏库 条件汇编伪指令 if else endif条件汇编代码块 loop endloop循环汇编代码块 break终止循环汇编代码块 汇编时的符号 equ set使一个符号等于一个值 end结束程序 宏语言 Macro Auser definedroutinethatcanbeusedasaninstruction 汇编器支持宏语言 使用户可以建立自己的 指令 当程序要将特定的任务执行若干次时 尤其有用 宏语言可以使用户 定义自己的宏 或重新定义正执行的宏 简化长的或复杂的汇编代码 访问由归档器建立的宏库 在一个宏内定义条件块和可重复的块 在一个宏内操作字符串 控制展开列表 定义宏 在程序中使用宏之前 首先必须定义它 可以用两种方法来定义 1 在源文件或 include copy文件中定义 2 在宏库中定义 定义宏 macname macro parameter modelstatements mexit endm 定义宏 macname宏的名字 macro是一个伪指令 确认源语句为宏定义的第一行 parameters 选项 作为 macro伪指令的操作数 Modelstatements每次调用宏时执行的指令或伪指令 endm终止宏定义 定义宏举例 add3p1 p2 p3 p3 p1 p2 p3add3 macrop1 p2 p3ldp1 aaddp2 aaddp3 astla p3 endm 调用宏 在源程序中用宏的名字作为操作码来调用宏 add3x y z TMS320C54x程序简例 一个16位的二进制数既可以表示一个整数 也可以表示一个小数 当它表示一个整数时 其最低位 D0 表示20 D1位表示21 次高位 D14 表示214 如果表示一个有符号数时 最高位 D15 为符号位 0表示正数 1表示负数 例如 07FFFH表示最大的正数32767 十进制 而0FFFFH表示最大的负数 1 负数用二进制的补码方式显示 TMS320C54x程序简例 当需要表示小数时 小数点的位置始终在最高位后 最高位 D15 表示符号位 次高位 D14 表示2 1 然后是2 2 最低位 D0 表示2 15 04000H表示小数0 5 01000H是小数2 3 0 125 0001H则表示16位定点DSP能表示的最小的小数 有符号 2 15 0 000030517578125 TMS320C54x程序简例 在DSP中 一个16进制的数可以表示不同的十进制数 或者是整数 或者是小数 如果表示小数 必定小于1 但仅仅是在做整数乘除或小数乘除时 系统对它们的处理才是有所区别的 而在加减运算时 系统都当成整数来处理 在后面的例子中 除非有特别说明 我们指的都是有符号数 在C54X中 将一个小数用16位定点格式来表示的方法是用215乘以该小数 然后取整 定点加法temp3 temp1 temp2 ldtemp1 a 变量temp1装入累加器Aaddtemp2 a 变量temp2与累加器A相加 结果放入A中stla temp3 结果 低16位 存入变量temp3中 没有特意考虑temp1和temp2是整数还是小数 定点减法 stm temp1 ar3 变量temp1的地址装入ar3寄存器stm temp2 ar2 变量temp2的地址装入ar2寄存器sub ar2 ar3 b 变量temp2和temp1都左移16位 然后相减 结果放入累加器B中 高16位 sthb temp3 相减的结果 累加器B的高16位 存入变量temp3 定点整数乘法 C54X提供了大量的乘法运算指令 其结果都是32位 放在P寄存器中 MPYU是一条专用于无符号数乘法运算的指令 而其它的乘法指令都是有符号数的乘法 定点整数乘法 rsbxFRCT 清FRCT标志 准备整数乘ldtemp1 T 变量temp1装入T寄存器mpytemp2 a temp2 temp1 结果放入累加器A 32位 stha temp3 结果的高16位存入temp3stla temp
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 淘宝服装拍摄合同范本
- 签订沙石买卖合同范本
- 活动策划拍摄合同范本
- 民间最效借款合同范本
- 甲方更换土方合同范本
- 正规物业电梯合同范本
- 综合固定总价合同范本
- 2025至2030中国耐热玻璃器皿行业发展研究与产业战略规划分析评估报告
- 2025至2030中国积实油行业项目调研及市场前景预测评估报告
- 2025至2030中国硅灰石行业现状规模与前景趋势研究报告
- (高清版)DBJ∕T 13-318-2025 《建筑施工盘扣式钢管脚手架安全技术标准》
- 《机械基础(第二版)》中职全套教学课件
- Cpk 计算标准模板
- 封起DE日子博文 2006
- 锂离子电池生产安全讲座
- 画魂空手套无删减全文下载
- 主题教育苏轼生平介绍人物经历等PPT模板(内容完整)
- 眼科学-眼科检查(课件)
- 产品碳足迹课件
- 部编人教版六年级道德与法治上册全册教学课件
- 美国地图高清中文版
评论
0/150
提交评论