9章:TMS320C54X的指令系统.ppt_第1页
9章:TMS320C54X的指令系统.ppt_第2页
9章:TMS320C54X的指令系统.ppt_第3页
9章:TMS320C54X的指令系统.ppt_第4页
9章:TMS320C54X的指令系统.ppt_第5页
已阅读5页,还剩79页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

9 1TMS320C54x指令的寻址方式 9 2TMS320C54x指令系统概述 第9章TMS320C54x的指令系统 返回到课程向导 9 3TMS320C54x的指令系统 9 1 1立即寻址 9 1 2绝对寻址 第9章TMS320C54x的指令系统 9 1 3累加器寻址 返回到本章向导 9 1TMS320C54x指令的寻址方式 9 1 4直接寻址 9 1 5间接寻址 9 1 6存储器映射寄存器寻址 9 1 7堆栈寻址 指令的寻址方式 指执行指令时硬件寻找指令中指定的参与运算的操作数的方法 有两种数值形式 短立即数 3 5 8 9位 16位的长立即数 9 1 1立即寻址 立即寻址 指令中包括了一个固定的立即操作数 返回到本节向导 立即数可包含在单字指令 指令代码只有一个字 或双字指令中 在一条指令中立即数的长度由所使用的指令的类型决定 例如 LD 80H A 9 1 1立即寻址 若指令中给出的数值或符号是立即数 则需要在数值或符号前加 返回到本节向导 以表示该数值或符号为立即数 否则将会引起错误 否则指令就变成了将地址80H中的数据装入到累加器A中 出现错误 支持立即数寻址的指令 指令中包括了一个固定的16位绝对地址 由于指令中的地址是16位的 因此绝对寻址方式指令的长度至少为2个字节 用一个程序标号或一个数据来指定指令所需要的数据空间的地址 9 1 2绝对寻址 该地址指向操作数所在的存储单元 返回到本节向导 1 数据存储器地址 dmad 寻址 例如 MVKDDATA1 AR2 表示将数据空间中DATA1标注的地址单元中的数据复制到寄存器AR2指向的数据存储单元中 DATA1标注的地址是一个16位的dmad值 用一个符号或一个具体的数来指定程序存储器中的一个地址 9 1 2绝对寻址 返回到本节向导 2 程序存储器地址 pmad 寻址 例如 MVPDTABLE1 AR5 表示将程序空间中TABLE1标注的地址单元中的内容复制到寄存器AR5指向的数据存储单元中 TABLE1标注的地址是一个16位的dmad值 使用一个符号或一个16位的常数来指定外部I O存储空间的一个地址 实现对I O备的读 写操作 3 端口地址 PA 寻址 9 1 2绝对寻址 返回到本节向导 3 端口地址 PA 寻址 例如 PORTRFIFO AR5 表示将一个数由端口地址为FIFO的I O口复制到寄存器AR5指向的数据存储单元中去 FIFO标注的地址是一个16位的I O端口地址PA 使用一个符号或一个16位常数来指定数据存储器的地址 4 lk 寻址 例如 LD BUFFER A 该指令将地址为BUFFER的数据存储单元中的数据装到累加器A中 9 1 3累加器寻址 返回到本节向导 累加器寻址 是将累加器中的数值作为地址 去访问该地址指向的程序存储单元 用来对存放数据的程序存储器进行寻址 有两条指令可以使用这种寻址方式 将累加器A中的内容作为地址 将该地址所指程序存储单元的一个字传送到Smem操作数所确定的数据存储器单元中 READASmem 将Smem操作数所确定的数据存储器单元中的一个字传送到累加器A中的数值作为地址的程序存储单元中 WRITASmem 9 1 4直接寻址 返回到本节向导 直接寻址指令 给出的7位地址是待寻址的数据存储器单元的低7位地址 dma 以这低7位dma为偏移地址 与ST1中DP或SP的内容相组合 形成16位的数据存储器实际地址 9 1 4直接寻址 返回到本节向导 间接寻址 以辅助存储器AR0 AR7中的一个内容作为地址进行寻址 辅助存储器AR0 AR7为16位 因此采用间接寻址方式可对64K的数据存储器空间的任何一个存储单元进行寻址 还能在一条指令中访问两个数据存储单元 即从两个独立的存储器单元读数据 或在读一个存储器单元数据的同时写另外一个存储器单元 据此 间接寻址又分为单操作数间接寻址和双操作数间接寻址两种方式 或者读写两个连续的存储单元 9 1 5间接寻址 返回到本节向导 利用这种寻址方式 可以在不改变数据页指针DP或堆栈指针SP内容的前提下 随机的对128个存储单元中的任何一个存储单元进行寻址 直接寻址的语法 用一个符号或一个常数来给出7位的偏移地址 使用时一般在偏移地址前加符号 以标示该指令是直接寻址 如果偏移地址由常数给出可以不加 标示 例如 CPL 1 SP 0120H 指令 LDU34H A 表示将数据空间0120H 34H 0154H单元所存储的内容装载到累加器A中 9 1 5间接寻址 返回到本节向导 1 单操作数间接寻址 指令中只有一个存储器操作数 对存储器只读 写一个操作数 两种特殊的间接寻址方式 循环寻址方式和位倒序寻址方式 表9 1 3给出了单操作数间接寻址的各种形式 格式 9 1 5间接寻址 返回到本节向导 循环寻址方式 在编程实现多数据乘加类算法时 要求在存储器中设置一个循环的缓冲器 作为保存最新数据的滑动窗口 N和R必须满足如下条件2N R 循环缓冲器实现的关键是循环寻址的实现 大小为R的循环缓冲器必须从一个低N位为0的边界开始 N是满足这一条件的最小整数 9 1 5间接寻址 返回到本节向导 循环寻址方式 循环寻址的算法为 if0 index step BK ndex index step elseifindex step BK index index step BK elseifindex step 0 index index step BK 1 单操作数间接寻址 9 1 5间接寻址 返回到本节向导 位倒序寻址 间接寻址的位倒序寻址是将ARx中的内容与AR0中内容以位倒序的方式相加 产生ARx中的新内容 设FFT要求采样点为8点 即进位是从左向右 而不是从右向左 位倒序寻址主要应用于FFT运算中 输人顺序 输出顺序 采用位倒序寻址的方式正好符合FFT算法的要求 9 1 5间接寻址 返回到本节向导 2 双数据存储器操作数间接寻址方式 用在完成两个数据读或一个数据读的同时并行一个数据写的指令中 格式 9 1 5间接寻址 返回到本节向导 2 双数据存储器操作数间接寻址方式 如果源操作数和目的操作数指向了同一个单元 则在并行存储指令中 例如ST LD 读在写之前执行 如果一个双操作数指令 如ADD 指向了同一辅助寄存器 而这两个操作数的寻址方式不同 则用Xmod域所确定的方式来寻址 双数据存储器操作数间接寻址指令代码的位功能说明 9 1 6存储器映射寄存器寻址 返回到本节向导 存储器映射寄存器 MMR 寻址 对存储器映射寄存器的值进行修改 并以存储器映射寄存器被修改后的值去寻址 存储器映射寄存器地址的产生方法有两种 对存储器映射寄存器其值的修改不影响当前DP或SP的值 因此写一个寄存器的开销是最小的 在直接寻址方式下 强制数据存储器地址的高9位置0 而不管DP或SP为何值 以指令寄存器 IR 中的低7位地址访问存储器映射寄存器MMR 9 1 6存储器映射寄存器寻址 返回到本节向导 存储器映射寄存器地址的产生方法有两种 当采用间接寻址方式时 高9位数据存储器地址被置0 以当前辅助寄存器的低7位地址访问存储器映射寄存器MMR 以指令寄存器 IR 中的低7位地址访问存储器映射寄存器MMR 例如 ARl用来指向一个存储器映射寄存器 若AR1 FF25H 则低7位是25H 既然AR1的低7位是25H 而定时器周期寄存器PRD的地址也为0025H 那么AR1就指向了定时器周期寄存器PRD 9 1 6存储器映射寄存器寻址 返回到本节向导 共有8条指令可以使用存储器映射寄存器寻址 9 1 7堆栈寻址 返回到本节向导 系统堆栈 用来在中断或调用子程序时自动将程序计数器PC的内容保存 也可用来保护现场或传递参数 TMS320C54x芯片使用一个16位存储器映射寄存器 堆栈指针SP作为地址 堆栈操作时 将数据由顶部 栈顶 压入 因此SP总是指向存放在堆栈中的最后一个数据 数据进栈时SP减1 数据出栈时SP加1 实现对堆栈的访问 9 1 7堆栈寻址 返回到本节向导 当一个中断响应发生或调用一个子程序时 程序返回时返回地址由堆栈弹出并装入PC中 使用堆栈寻址方式访问堆栈的4条指令 9 2 1汇编语言源程序格式 9 2 2指令系统中规定的符号和缩写 第9章TMS320C54x的指令系统 返回到本章向导 9 2TMS320C54x指令系统概述 9 2 1汇编语言源程序格式 返回到本节向导 TMS320C54x的汇编指令系统包括汇编语言指令 汇编伪指令 宏指令和链接指令 其书写形式有两种 助记符形式和代数式形式 助记符指令 是一种采用助记符号表示的类似于计算机汇编语言的指令 方便与阅读和记忆 代数指令 是一种比汇编语言更高级 类似于高级语言的代数形式指令 TMS320C54x共有129条指令 由于寻址方式的不同衍生至216条指令 其中两次存储器操作指令26条 并行运行操作指令13条 9 2 1汇编语言源程序格式 按照指令的功能可将指令系统分成四种基本类型 算术运算指令 逻辑运算指令 装载和存储指令 程序控制指令 TMS320C54x汇编语言源程序由源说明语句组成 包含汇编语言指令 汇编伪指令 宏伪指令和注释等 一条程序占据编辑器的一行 长度不能超过200个字符 返回到本节向导 9 2 1汇编语言源程序格式 以助记符指令为例 汇编语言语句格式为 标号 指令 操作数列表 注释 其中 内的部分是可选项 编写汇编指令时 应遵循以下格式 语句必须以标号 空格 星号或分号开始 标号为可选项 若要使用标号 则必须从第1列开始 标号长度最多为32个字符 由A Z a z 0 9 和 等组成 但第1个字符不能为数字 标号后可以跟一个冒号 但并不作为标号的一部分 返回到本节向导 9 2 1汇编语言源程序格式 编写汇编指令时 应遵循以下格式 不使用标号时 第1列的字符必须是空格 分号或星号 每个域必须由1个或多个空格分开 注释项是可选择项 注释须用分号标示 指令域部分可以是助记符指令 汇编伪指令 宏伪指令和宏调用 操作数域为操作数的列表 标号后可以跟一个冒号 但并不作为标号的一部分 标号长度最多为32个字符 由A Z a z 0 9 和 等组成 但第1个字符不能为数字 返回到本节向导 9 2 2指令系统中规定的符号和缩写 指令集中符号和缩写 部分 返回到本节向导 9 3 1算术运算指令 9 3 2逻辑运算指令 第9章TMS320C54x的指令系统 返回到本章向导 9 3TMS320C54x的指令系统 9 3 3程序控制指令 9 3 4加载和存储指令 1 加法指令 单操作的数据存储器操作数Smem 双操作的数据存储器操作数Ymem 立即数 lk或累加器src移位后的值 9 3 1算术运算指令 将一个16位的操作数加到指令指定的累加器中 返回到本节向导 16位的操作数可以是 若定义了dst 则将相加的结果存入到dst中 否则存入到src中 操作数左移时低位加0 右移时若SXM 1 则高位进行符号扩展 若SXM 0 则高位加0 9 3 1算术运算指令 返回到本节向导 TMS320C54x的指令系统提供了13条加法指令 9 3 1算术运算指令 返回到本节向导 TMS320C54x的指令系统提供了13条加法指令 示例1 使用ADD命令完成加法 9 3 1算术运算指令 返回到本节向导 LDTEMP1 A 将变量TEMP1的值装入累加器A中 ADDTEMP2 A 将变量TEMP2的值与累加器A相加 结果放入A中 STLA TEMP3 将结果 低16位 存入变量TEMP3中 示例2 利用ADD实现32位数据装入 LD 0 DP 设置数据页指针 LD60H 16 A 将60H的内容装入到A的高16位 ADDS61H A 将61H的内容装入到A的低16位 DLD60H B 直接装入32位到累加器B 2 减法指令 单操作的数据存储器操作数Smem 16位双数据存储器操作数Xmem 立即数 lk或累加器src移位后的值 9 3 1算术运算指令 将从指定的累减器中减去一个16位的减数 返回到本节向导 16位的减数可以是 若定义了dst 则将相减的结果存入到dst中 否则存入到源累加器src中 指令受OVM和SXM状态标志位的影响 执行结果将影响C和OVdst 未指定dst则为OVsrc 9 3 1算术运算指令 返回到本节向导 TMS320C54x的指令系统提供了13条减法指令 9 3 1算术运算指令 返回到本节向导 TMS320C54x的指令系统提供了13条减法指令 示例3 使用SUBC实现整数除 TEMP1 TEMP2 9 3 1算术运算指令 返回到本节向导 LDTEMP1 B 将被除数TEMP1装入累加器B的低16位 RPT 15 重复SUBC指令16次 SUBCTEMP2 B 将结果 低16位 存入变量TEMP3中 商存入B的低16位 余数存入到B的高16位 STLB TEMP3 将商存入到TEMP3中 STHB TEMP4 将余数存入到TEMP4中 在13个减法指令中 SUBB用于带借位的减法运算 SUBS用于无符号的减法运算 SUBC是一个特殊的移位减指令 可用来实现除法运算 TMS320C54x的指令系统没有提供专门的除法指令 3 乘法指令 9 3 1算术运算指令 乘法指令的功能是将T寄存器或一个数据存储器的值与另一个数据存储器的值或一个立即数相乘 并将乘积存放于目的累加器A或B中 返回到本节向导 指令受OVM和ST1中的FRCT状态标志位的影响 执行结果将影响OVdst 3 乘法指令 9 3 1算术运算指令 返回到本节向导 示例4 整数乘法的实现 9 3 1算术运算指令 返回到本节向导 RSBXFRCT 清FRCT标志 准备整数乘法 LDTEMP1 T 将变量TEMP1装入寄存器T中 MPYTEMP2 A 完成TEMP2 TEMP1 其结果存入累加器A 32位 示例5 小数乘法的实现 LDTEMP1 16 A 将TEMP1装入累加器A的高16位中 MPYA 完成TEMP2 累加器A高16位操作 结果在B中 同时将TEMP2的值装入寄存器T中 STHTEMP3 将相乘结果的高16位存入变量TEMP3中 SSBXFRCT FRCT 1 准备小数乘法 4 乘加和乘减指令 9 3 1算术运算指令 乘加指令 先完成一个乘法操作 然后再将乘积与源累加器的内容相加 返回到本节向导 乘减指令 完成从累加器B 或源累加器src或目的累加器dst 减去T寄存器 或一个操作数与另外一个操作数的乘积 的操作 并将其运算结果存入累加器B 或源累加器src或目的累加器dst 中去 这些乘加和乘减指令可大大提高一些算法的运算速度 4 乘加和乘减指令 9 3 1算术运算指令 返回到本节向导 乘加和乘减指令及说明 部分 9 3 1算术运算指令 返回到本节向导 示例6 编程计算 9 3 1算术运算指令 返回到本节向导 示例6 编程计算 5 双操作数指令 9 3 1算术运算指令 双操作数指令是一种双长字 32位 的加法或减法指令 返回到本节向导 指令中有一个操作数Lmem是长数据存储操作数 该指令在ST1中的双16位 双精度算术运算方式位C16的控制下完成一个32位的加法运算或两个16位的加法运算 C16 1 指令以双16位的方式执行 C16 0 指令以双精度 32位 的方式执行 TMS320C54x指令系统提供了6条这样的指令 9 3 1算术运算指令 返回到本节向导 双操作数指令及说明 9 3 1算术运算指令 返回到本节向导 双操作数指令及说明 示例7 DADD AR3 A B 9 3 1算术运算指令 返回到本节向导 由于C 1 指令以双16位的方式执行 B的低16位等于AR3的低16位加上A的低16位 1D89H 9456H 8933H B的高16位等于AR3的高16位加上A的高16位 6BACH 1534H 5678H 指令执行前后累加器A B和辅助寄存器AR3中数据的变化情况 6 特殊运算指令 15条 9 3 1算术运算指令 返回到本节向导 6 特殊运算指令 15条 9 3 1算术运算指令 返回到本节向导 1 逻辑与 AND 运算指令 9 3 2逻辑运算指令 26条逻辑运算指令根据操作数的不同 执行时需要1 2个指令周期 返回到本节向导 逻辑与 AND 运算指令及说明 示例10 AND AR3 A 9 3 2逻辑运算指令 返回到本节向导 指令执行前后A AR3中数据的变化位为 示例11 ANDA B 指令执行前后A B中数据的变化 2 逻辑或 OR 运算指令 9 3 2逻辑运算指令 返回到本节向导 逻辑或 OR 运算指令及说明 示例12 OR AR3 A 9 3 2逻辑运算指令 返回到本节向导 指令执行前后A AR3中数据的变化为 3 逻辑异或 XOR 运算指令 示例13 XOR AR3 A 9 3 2逻辑运算指令 返回到本节向导 指令执行前后A AR3中数据的变化位为 4 移位指令 示例14 SFTLA 8 B 9 3 2逻辑运算指令 返回到本节向导 指令执行前后A B C中数据值的变化为 示例15 SFTAA 8 B 指令执行前后A B C及各状态位的变化为 5 测试指令 9 3 2逻辑运算指令 返回到本节向导 用来测试操作数的指定位的值 也可以用来比较两个操作数是否相等 测试指令及说明 示例16 BIT AR2 12 9 3 2逻辑运算指令 返回到本节向导 该示例测试 AR2 中第3位的值 然后将测试的结果存入ST0中的测试位TC中 指令执行前后TC AR2中数据的变化为 示例17 CMPR2 AR4 9 3 2逻辑运算指令 返回到本节向导 该示例比较寄存器AR4和AR0中的数据是否相等 由于 CC 2 测试AR4 AR0 而7FFFFH FFFFH 所以TC 0 指令执行前后A B中数据的变化 1 分支转移指令 9 3 3程序控制指令 返回到本节向导 用来改变程序指针PC的值 以控制程序从一个地址转移到另外一个地址去执行 示例18 以AR2作为循环计数器 设初值为5 共执行6次加法运算 9 3 3程序控制指令 返回到本节向导 示例19 BACCA 指令执行前后A PC中数据的变化 2 调用子程序指令 9 3 3程序控制指令 返回到本节向导 用来改变程序指针PC的值 以控制程序从一个地址转移到另外一个地址去执行 在执行完调用子程序的指令后要返回到调用指令的下一条指令继续执行 示例20 CALADA 指令执行前后A和PC SP中数据的变化情况 2 调用子程序指令 9 3 3程序控制指令 返回到本节向导 调用子程序指令及说明 3 中断指令 9 3 3程序控制指令 返回到本节向导 发生中断时INTM被置1 屏蔽所有可屏蔽中断 并设置IFR中相应的中断标志位 执行中断指令时 首先将PC压入堆栈 然后将由K所确定的中断向量赋给PC 执行中断服务程序 中断指令及说明 4 返回指令 9 3 3程序控制指令 返回到本节向导 用于执行完子程序调用或中断服务程序执行完后 使程序返回到子程序调用指令或中断发生的地方以继续往下执行 5 重复指令 9 3 3程序控制指令 返回到本节向导 DSP重复执行一条或一段指令 重复指令及说明 5 重复指令 9 3 3程序控制指令 返回到本节向导 DSP重复执行一条或一段指令 在执行PRT或者PRTZ指令时 对和所有可屏蔽中断都不予响应 在执行RPTB指令前 必须将循环的次数置入到块循环计数器BRC寄存器中 示例21 RPT 99H 循环执行NOP指令100次 RC 63H 单字指令 NOP RPT 0FFFFH 将紧跟在RPT后面的下一条指令循环执行100次 在块重复执行期间 可以响应中断 6 堆栈操作指令 9 3 3程序控制指令 返回到本节向导 可以用来对堆栈进行压入 弹出和修改堆栈指针的操作 操作数可以是立即数 数据存储器操作数Smem或存储器映像寄存器MMR 7 其它程序控制指令 9 3 3程序控制指令 返回到本节向导 1 加载指令

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论