




已阅读5页,还剩96页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
汇编程序语法 TMS320的汇编程序包含汇编指令 伪指令 assemblerdirectives 汇编语言指令 assemblylanguageinstructions 宏指令 macrodirectives 和注释 comments C54的指令既可以是助记符方式 也可以是代数式方式 助记符方式汇编程序语法 label mnemonic operandlist comment 标号 助记符 操作数 注释 汇编程序语法 所有的语句必须由语句标号 空格 号或 号开头 语句标号不是必须的 如果用 就必须在第一列 语句中的各部分之间 由一个或多个空格分开 注释不是必须的 注释可以从第一列的 号或 号开头 如果不是从第一列开始 就必须用 号开头 语句标号 由字母 数字 组成 最多不超过32个字符 对大小写敏感 第一个字符不能是数字 后跟 但分号不是语句标号的组成部分 助记符 助记符不允许从第一列开始 否则被认为是语句标号 助记符可以是机器指令 如ABS MPYU SPH等 伪指令 如 data list set等 宏指令 如 macro var mexit等 和宏调用 操作数 操作数可以是常数 符号或表达式 当操作数多于一个时 用逗号分开 常数 二进制常数 如01B或01b 八进制常数 如10Q或10q 十进制常数 如23 十六进制常数 如78H或78h 字符常数 如 A 或 b 字符串 如 sampleprogram 汇编时使用的常数 表达式 表达式是一个常数 符号 或用算术运算符连接起来的常数或符号 表达式的值的范围为 32768到32767 TMS320C54x的助记符指令集有近两百条指令 按功能分为如下几类 装入和存储指令 逻辑运算指令 程序控制指令 算术运算指令 一 装入和存储指令 装入和存储指令包括 一般的装入和存储指令条件存储指令并行装入和存储指令并行装入和乘法指令并行存储和加减乘指令混合装入和存储指令 1 一般的装入指令 装入指令应用举例 Eg1 LD AR3 16 A Beforeinstruction Afterinstruction A SXM AR3 1 FFFEDC0000 1 0300 0301 0000000000 FEDC FEDC Datamemory0300h Eg2 LD 23 DP Beforeinstruction Afterinstruction DP ASM 00 017 0F 1FF Eg3 LD 15 ASM 2 存贮指令 存储指令应用举例 Eg1 STT AR7 Beforeinstruction Afterinstruction T AR7 0321 4210 0320 4210 1200 4210 Datamemory0321h Eg2 STHA DAT10 Beforeinstruction Afterinstruction DP 00 FF87654321 8765 FF87654321 004 004 A DAT10 4 条件存储指令 数据块传送程序 可以用于数据传送的指令有10条 分别可以实现数据存储器之间 数据存储器和MMR之间 程序存储器和数据存储器之间 程序存储器和数据存储器之间的数据块传送等 这些指令传送速度比加载和存储指令快 传送数据不需要通过累加器 可以寻址程序存储器 与RPT指令相结合可以实现数据块传送 7 混合装入和存储指令 1 数据传送指令 用于数据传送指令可分为四类 1 数据存储器之间的数据传送 MVDKSmem dmadMVKDdmad SmemMVDDXmem Ymem 2字2周期2字2周期1字1周期 1 数据传送指令 2 数据存储器与MMR之间的数据传送 MVDMdmad MMRMVMDMMR dmadMVMMMMRx MMRy 2字2周期2字2周期1字2周期 3 程序存储器和数据存储器之间的数据传送 MVPDpmad SmemMVDPSmem pmadREADASmemWRITASmem 2字3周期2字4周期1字5周期1字5周期 1 数据传送指令 4 从PA口读 写数据 PORTRPA SmemPORTWSmem PA 2字2周期2字2周期 数据传送指令的特点 传送速度比加载和存储指令要快 数据传送不通过累加器 可寻址程序存储器 与RPT结合 可实现数据块传送 1 程序存储器至数据存储器的数据传送 重复执行MVPD指令 可以实现程序存储器至数据存储器的数据传送 在系统初始化过程中十分有用 例1 数组x 8 0 1 2 3 4 5 6 7 初始化 bssx 8 dataTBL word0 1 2 3 4 5 6 7 textSTART STM x AR5RPT 7MVPDTBL AR5 2 数据存储器之间的数据传送 在数字信号处理时 经常需要将数据存储器中的一批数据传送到数据存储器的另一个地址空间 例2 编写一段程序将数据存储器中的数组X 20 复制到数组Y 20 中 bssx 20 bssy 20 STM x AR2STM y AR3RPT 19MVDD AR2 AR3 二 算术运算指令 算术运算指令是实现数学计算的重要指令集合 C54x的算术指令具有运算功能强 指令丰富等特点 包括 加法指令 ADD 减法指令 SUB 乘法指令 MPY 乘法 累加 减指令 MAC MAS 双字运算指令 DADD 特殊用途指令 1 加法指令 C54x的加法指令共有13条 可完成两个操作数的加法运算 移位后的加法运算 带进位的加法运算和不带符号位扩展的加法运算 操作码 ADD ADDC ADDM ADDS 指令格式 操作码源操作数 移位数 目的操作数 源操作数 Smem Xmem Ymem lk src 移位数 TS 16 SHIFT SHFT ASM 目的操作数 src dst Smem 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乘以该小数 然后取整 1 加法指令 LDtemp1 A 将变量temp1装入寄存器AADDtemp2 A 将变量temp2与寄存器A相加 结果放入A中STLA temp3 将结果 低16位 存入变量 temp3中 注意 这里完成计算temp3 temp1 temp2 我们没有特意考虑temp1和temp2是整数还是小数 在加法和下面的减法中整数运算和定点的小数运算都是一样的 定点加法temp3 temp1 temp2 2 减法指令 C54x的减法指令共有13条 可完成两个操作数的减法运算 移位后的减法运算 带借位的减法运算 条件减法运算和不带符号位扩展的减法运算 SUBSUBBSUBCSUBS 指令格式 操作码源操作数 移位数 目的操作数 SmemXmemYmem lksrc TS16SHIFTSHFTASM srcdst 2 减法指令 实现16位定点减法 C54X中提供了多条用于减法的指令 如SUB SUBB SUBC和SUBS SUB指令与ADD指令一样 有许多的寻址方式 定点减法 STM temp1 AR3 变量temp1的地址装入ar3寄存器STM temp2 AR2 变量temp2的地址装入ar2寄存器SUB AR2 AR3 B 变量temp2和temp1都左移16位 然后相减 结果放入累加器B中 高16位 STHB temp3 相减的结果 累加器B的高16位 存入变量temp3 LD x A 直接寻址ADD y ASUB w A A A wSTLA z 例3 编写完成Z X Y W的功能 特殊的减法指令 其中SUBS用于无符号数的减法运算SUBB用于带进位的减法运算 如32位扩展精度的减法 而SUBC为移位减 DSP中的除法就是用该指令来实现的 SUBB指令应用举例 SUBBSmem srcExecution src Smem logicalinversionofc src Eg1 SUBBDAT5 A Beforeinstruction Afterinstruction A CDP Datamemory0405h Eg2 SUBB AR1 B Beforeinstruction Afterinstruction B CAR1 Datamemory0405h 思考题 10分 谷物产量传感器 冲击板 参考板 传感器AX x1 q 谷粒 收割机 传感器BX q 编程实现求解谷物产量相关信号x1 利用SUBC实现除法 在 C54X中没有提供专门的除法指令 一般有两种方法来完成除法 一种是用乘法来代替 除以某个数相当于乘以其倒数 所以先求出其倒数 然后相乘 这种方法对于除以常数特别适用 另一种方法是使用SUBC指令 重复16次减法完成除法运算 3 乘法指令 C54x的指令系统提供了10条乘法运算指令 其运算结果都是32位的 存放在累加器A和B中 而参与运算的乘数可以是T寄存器 立即数 存储单元和累加器A的高16位 格式 操作码源操作数1 源操作数2 目的操作数 操作码 MPY MPYR MPYA MPYU SQUR 源操作数1 Smem Xmem lk 源操作数2 Ymem lk 目的操作数 dst 3 乘法指令 定点整数乘法 例 temp1 1234H 十进制的4660 temp2 9876H 十进制的 26506 乘法的结果在累加器A中为F8A343F8H 十进制的 123517960 定点整数乘法 RSBXFRCT 清FRCT标志 准备整数乘LDtemp1 T 变量temp1装入T寄存器MPYtemp2 A temp2 temp1 结果放入累加器A 32位 STHA temp3 结果的高16位存入temp3STLA temp4 结果的低16位存入temp4 例 编写实现方程y mx b的程序 单操作数法 LD m TMPY x AADD b ASTLA y 双操作数法 MPY AR2 AR3 AADD b ASTLA y 特殊的乘法指令 MPYR 将乘积四舍五入MPYA 累加器A的高阶位做乘数MPYU 专用于无符号数乘法运算 可以使用MPYR完成四舍五入 比较如下结果 MPYRtemp1 B T temp1 b 注 无论是小数乘法还是整数乘法 MPYR指令只保留高16位 而将低16位四舍五入 全部清零 Beforeinstruction Afterinstruction B TFRCT Datamemory0200h Eg MPYRDAT0 B 注 1234 h 5678 h 6260060 h 4 乘法 累加和乘法 减法指令 这类指令共计22条 除了完成乘法运算外 还具有加法或减法运算 因此 在一些复杂的算法中 可以大大提高运算速度 参与运算的乘数可以是T寄存器 立即数 存储单元和累加器A或B的高16位 乘法运算结束后 再将乘积与目的操作数进行加法或减法运算 4 乘法 累加和乘法 减法指令 格式 操作码源操作数1 源操作数2 目的操作数 操作码 MAC MACR MACA MACAR MACD MACP MACSU MAS MASR 源操作数1 Smem Xmem lk T 源操作数2 Ymem lk pmad 目的操作数 src dst B 4 乘加和乘减指令 Beforeinstruction Afterinstruction A TFRCTAR5 Datamemory0100h 0000001000 0400 0 0100 Eg1 MAC AR5 A 1234 1234 注 0400 h 1234 h 1000 h 48E000 h Eg2 MACR AR5 A Beforeinstruction Afterinstruction A TFRCTAR5 Datamemory0100h 0400 0 0100 1234 1234 0000001000 Beforeinstruction Afterinstruction A TFRCTAR3 Datamemory0100h 0000770000 0008 0 0100 Eg3 MACD AR3 COEFFS A 0055 0055 注 0055 h 1234 h 770000 h 7D0B44 h ProgrammemoryCOEFFS 1234 1234 0066 0055 Datamemory0101h 例 编写实现方程y mx b的程序 单操作数法 LD m TMPY x AADD b ASTLA y 双操作数法 MPY AR2 AR3 AADD b ASTLA y 双操作数法指令的特点 1 需要用间接方式寻址操作 并且只能用AR2 AR52 采用双操作数占用程序空间小 3 速度快 进一步优化MAC AR2 AR3 ASTLA y 例 计算y xl al x2 a2 程序 LD x1 TMPY a1 BLD x2 TMAC a2 BSTLB ySTHB y 1 T x1 B x1 a1 T x2 乘法累加 B x1a1 x2a2 计算结果的低字BL存入y中 计算结果的高字BH存入y 1中 思考 信号调制 三 程序控制指令 C54x的程序控制指令共有31条 可分为6类 包括 分支转移指令子程序调用指令中断指令返回指令堆栈操作指令其他程序控制指令 无条件分支转移 无条件执行分支转移 条件分支转移 要在满足用户一个或多个条件时才执行分支转移 远程分支转移 允许分支转移到扩展存储器 1 分支转移程序 例5 3 1 分支转移举例 STM 88H AR0LD 1000H Azhong SUBAR0 ABCzhong AGT AOV 将操作数 88H装入AR0 将操作数 1000H装入ACC 将A中的内容减去AR0中的 内容结果装入A 若累加器A 0且溢出 则转至zhong 否则往下执行 1 分支指令 分支指令应用举例 Eg1 B2000h Beforeinstruction Afterinstruction PC 2000 1F45 Eg2 BD1000HANDM4444H AR1 Beforeinstruction Afterinstruction PC 1000 1F45 注 如果分支指令被延迟 有后缀D 则在分支跳转之前 先将紧跟的两条一个字的指令或一条两个字的指令先取出执行 如上例 先将操作数与4444H与之后 程序再从1000H的地址开始执行 Word 2 2 调用与中断指令 条件调用指令举例 Eg1 CC2222h AGT Beforeinstruction Afterinstruction A PC SP 0025 0000003000 2222 1111 1110 0000003000 4567 0027 Datamemory1110h Eg2 CCD1000h BOVANDM4444h AR1 Beforeinstruction Afterinstruction PC OVB SP 1 1000 1 1111 1110 0025 4567 0029 Datamemory1110h 3 返回指令 2堆栈的使用方法 当程序调用中断服务程序或子程序时 需要将程序计数器PC的值和一些重要的寄存器值进行压栈保护 以便程序返回时能从间断处继续执行 C54x提供一个用16位堆栈指针SP寻址的软件堆栈 当向堆栈中压入数据时 堆栈是从高地址向低地址方向填入 堆栈指针SP先减1 然后将数据压入堆栈 当从堆栈中弹出数据时 数据先从堆栈中弹出 然后堆栈指针SP加1 5 堆栈操作指令 堆栈操作指令共有5条 可对系统堆栈进行管理 实现数据的进栈和出栈 指令格式 FRAMEK 指令功能 SP K SP FRAME 功能说明 将短立即数偏移K加到SP中 操作数 K 9位短立即数 取值 128 127 FRAME 操作数 K 9位短立即数 取值 128 127 指令格式 FRAMEK FRAME 操作数 K 9位短立即数 取值 128 127 指令功能 SP K SP 指令格式 FRAMEK FRAME 操作数 K 9位短立即数 取值 128 127 2 堆栈操作指令 堆栈操作指令共有5条 可对系统堆栈进行管理 实现数据的进栈和出栈 指令格式 FRAMEK 指令功能 SP K SP FRAME 功能说明 将短立即数偏移K加到SP中 操作数 K 9位短立即数 取值 128 127 操作数 K 9位短立即数 取值 128 127 指令格式 FRAMEK 操作数 K 9位短立即数 取值 128 127 指令功能 SP K SP 指令格式 FRAMEK 功能说明 将短立即数偏移K加到SP中 指令功能 SP K SP 指令格式 FRAMEK FRAME 操作数 K 9位短立即数 取值 128 127 堆栈的设置 size set120stack usect STACK sizeSTM stack size SP 在数据RAM空间开辟一个堆栈区 在RAM中定义一个STACK的保留空间 共120个单元 设置堆栈指针 stack size SP 保留区的高地址赋给SP 作为堆栈的栈底 若程序中要使用堆栈 必须先进行设置 如 设置好堆栈后 就可以使用堆栈了 如 CALLpmad SP 1 SP PC 2 TOS pmad PCRET TOS PC SP 1 SP 3循环操作程序 在程序设计时 经常需要重复执行某一段程序 利用BANZ 当辅助寄存器不为0时转移 指令可实现循环计数和操作 循环操作指令 BANZ转移地址 辅助寄存器指令功能 当辅助寄存器不为0时 则转至转移地址 否则顺序执行 例5 3 4 bssx 10 给x保留10个空间 bssy 1 给y保留1个空间STM x AR1 设置数据段的首地址STM 9 AR2 设置循环计数值LD 0 A 累加器清0loop ADD AR1 A 累加运算 并修改地址BANZloop AR2 若计数值不为0 则循环 并计数值减1若计数值为0 则结束循环STLA y 累加和存入y中 用AR2作为循环计数器 由BANZ实现程序的循环控制 注意 BANZloop AR2 先判断 再修正AR2 AR2 1 4重复操作指令 重复操作指令可以使紧随其后的一条指令或程序块重复执行 分为单指令重复和程序块重复 单指令重复操作是指通过RPT或RPTZ指令使其下一条指令被重复执行 重复执行的次数由指令操作数给出 其值等于操作数加1 最大重复次数为65536 4 重复指令和堆栈操作指令 C54x的重复操作是使CPU重复执行一条指令或一段指令 可以分为单指令重复和块程序重复 实现重复操作的指令 RPT 重复下条指令 RPTZ 累加器清0 并重复下条指令 RPTB 块重复指令 使用RPT RPTZ能重复下一条指令 而RPTB用于重复代码块若干次 利用重复指令可实现比BANZ指令更快的循环程序 重复指令应用举例 Eg1 RPTDAT127 DAT127 EQU0FFFH Beforeinstruction Afterinstruction RC DP 0FFFH 31 000C 31 000C 000C 0 Eg2 RPT 2 repeatthenextinstructions3times Beforeinstruction Afterinstruction RC 2 0 Eg3 RPT 1111H repeatthenextinstructions4370times Beforeinstruction Afterinstruction RC 1111 0 例5 4 3 计算y 程序 table word1 2 3 4 word8 6 4 2 textstart STM 0 SWWSRSTM STACK 10h SPSTM a AR1RPT 7MVPDtable AR1 CALLSUMend Bend 变量初始化 插入0个等待状态 设置堆栈指针 AR1指向a 移动8个数据 从程序存储器到数据存储器 调用SUM子程序 例5 4 3 计算y 程序 SUM STM a AR3STM x AR4RPTZA 3MAC AR3 AR4 ASTLA yRET end 子程序执行 程序块重复操作可以使紧随RPTB指令之后的程序块重复执行 块起始地址 RSA RPTB指令的下一行 块结束地址 REA 由RPTB指令的操作数给出 块重复执行次数 由块重复计数器BRC的内容来确定 对于整个程序块需要重复操作时 可采用程序块重复操作 块程序重复操作 块重复操作的特点 程序块的起始地址RSA是RPTB指令的下一行 块结束地址REA由RPTB指令的操作数规定 对程序块进行重复操作时 不论程序块多长 重复次数多大 所用的机器周期为0 与单指令重复操作不同 块重复操作可以响应中断 块程序重复操作 块程序重复指令的特点是对任意长程序段的循环开销为0 循环由ST1状态寄存器的块重复标志位 BRAF 和紧跟在ST1状态寄存器后面的存储器映像寄存器控制 循环过程 将块重复标志位BRAF置1 激活块程序重复循环 将一个取值在0 65535范围里的循环次数N加载到BRC 块重复指令把块重复的起始地址放在块重复开始地址寄存器RSA中 块重复指令把块重复的末地址放在块重复结束地址寄存器REA中 例5 5 2 对数组x 8 中的每一元素加1 bssx 8begin LD 1 16 BSTM 7 BRCSTM x AR4RPTBnext 1ADD AR4 16 B ASTHA AR4 next LD 0 B 设置数组空间 立即数1送入BH 设置重复次数 BRC 7 循环8次 数组首地址x送入AR4 设置循环结束地址 数组数据左移16位与BH相加 存入数组结果 并修改地址 B清0 注意 块结束地址REA通常取程序块最后一条指令的下一条指令地址 1 重复次数为7次 RPTB指令可以响应中断 例 编写完成y aixi i 1 20 采用单操作数方法 LD 0 BSTM a AR2STM x AR3STM 19 BRCRPTBDone 1LD AR2 TMPY AR3 A ADDA BDone STHB ySTLB y 1 采用双操作数的方法 LD 0 BSTM a AR2STM x AR3STM 19 BRCRPTBDone 1MPY AR2 AR3 A ADDA BDone STHB ySTLB y 1 进一步优化的程序 STM x AR2STM a AR3RPTZA 19MAC AR2 AR3 ASTHA ySTLA y 1 5 混合程序控制指令 四 特殊指令 五 逻辑运算指令 逻辑指令包括与 或 异或 移位和测试指令 1 与指令 AND Eg1 AND AR3 A Beforeinstruction Afterinstruction A AR3 Datamemory0100h 0100 0000001000 0101 1500 1500 0000FF1200 Eg2 ANDA 3 B Beforeinstruction Afterinstruction A B 0000001800 0000001200 0000001000 0000001200 2 或 异或指令 Eg1 OR AR3 A Beforeinstruction Afterinstruction A AR3 Data
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 人教版七年级上册第一章第二节乡村与城市说课稿3
- 2025塑料管道购销合同
- 2025贷款协议合同号按月付息
- Unit 1 I hope that you can join us one day. 说课稿 2024-2025学年外研版英语八年级下册
- 2024-2025学年七年级生物上册 3.1.1 藻类、苔藓和蕨类植物说课稿 (新版)新人教版
- 2025《建筑材料采购与应用专用合同》
- 淮南事业单位笔试真题2025
- 2025年的租赁合同与买卖合同解析
- 2025设备租赁合同(模板工程)完
- 2025年智能保温杯销售代理合同
- QB/T 2660-2024 化妆水(正式版)
- 围手术期病人管理
- 垃圾中转站运营管理项目整体服务方案
- 血常规报告单
- 《昆山反杀案》课件
- 电路检查记录表
- 前牙黑三角的树脂充填
- 华为质量管理评估模型(31个评估要素和评估报告)
- 模具凸凹模工艺文件工序卡
- 储备店长培训工作流程-课件
- 药品效期管理
评论
0/150
提交评论