




已阅读5页,还剩72页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第六章汇编语言程序设计 内容提要 6 1程序流程控制6 2堆栈的使用方法6 3加减法运算和乘法运算6 4重复操作6 5数据块传送 内容提要 6 6双操作数乘法6 7长字运算和并行运算6 8小数运算6 9除法运算6 10浮点运算 TMS320C54x具有丰富的程序控制与转移指令 利用这些指令可以执行分支转移 循环控制及子程序操作 基本的程序控制指令如表6 1所示 表6 1基本的程序控制指令 6 1程序的控制与转移 1 条件算符 条件分支转移指令或条件调用 条件返回指令都用条件来限制分支的转移 调用和返回操作 条件算符分成两组 每组组内还有分类 第2组 第1组 选用条件算符时应当注意以下3点 第1组 组内两类条件可以进行与 或运算 但不能在组内同一类中选择两个条件算符与 或 当选择两个条件时 累加器必须是同一个 例如 可以同时选择AGT和AOV 但不能同时选择AGT和BOV 第2组 可从组内3类算符中各选一个条件算符与 或 但不能在组内同一类中选两个条件算符与 或 例如 可以同时测试TC C和BIO 但不能同时测试NTC和TC 组与组之间的条件只能进行或运算 例6 1 条件分支转移 RCTCCCsub BNEQBCnew AGT AOV 说明 单条指令中的多个条件是 与 的关系 如果需要两个条件相 或 只能分两句写 BCnew AGTBCnew AOV 2 循环操作BANZ 在程序设计时 经常需要重复执行某段程序 利用BANZ 当辅助寄存器不为0时转移 指令执行循环计数和操作是十分方便的 SUM STM x AR3STM 4 AR2loop ADD AR3 A 程序存储器BANZloop AR2 STLA y 例6 2 3 比较操作CMPR 编程时 经常需要数据与数据进行比较 这时利用比较指令CMPR是很合适的 CMPR指令测试所规定的AR寄存器 AR1 AR7 与AR0的比较结果 如果所给定的测试条件成立 则TC位置1 然后 条件分支转移指令就可根据TC位的状态进行分支转移了 注意 所有比较的数据都是无符号操作数 STM 5 AR1STM 10 AR0loop AR1 CMPRLT AR1BCloop TC 返回首页 6 2TMS320C54x中断系统 1 中断类型C54x支持软件中断和硬件中断 软件中断由程序指令产生 INTR TRAP或RESET 硬件中断由设备的一个信号产生 包括两种类型 外部硬件中断由外部中断口的信号触发 内部硬件中断由片内外设的信号触发 无论是硬件中断还是软件中断 都属于以下两种类型 1 可屏蔽中断 2 非屏蔽中断 C5402中断源的中断向量及硬件中断优先权 2 中断标志寄存器 IFR 和中断屏蔽寄存器 IMR C54x中断系统设置两个中断寄存器 分别为中断标志寄存器IFR和中断屏蔽寄存器IMR 1 中断标志寄存器IFR 中断标志寄存器IFR是一个存储器映像寄存器 当一个中断出现时 IFR中的相应的中断标志位置1 直到CPU识别该中断为止 C5402中断标志寄存器IFR的结构 中断标志寄存器IFR各位的功能 在 C54x系列芯片中 IFR中5 0位对应的中断源完全相同 分别为外部中断和通信中断标志寄存位 而15 6位中断源根据芯片的不同 定义的中断源类型不同 有三种情况将清除中断标志 相应的IFR标志位置1 使用相应的中断号响应该中断 2 中断屏蔽寄存器IMR 中断屏蔽寄存器是一个存储器映像寄存器 主要用于控制中断源的屏蔽和开放 中断屏蔽寄存器IMR的结构 用户可以对IMR寄存器进行读写操作 3 中断响应过程 如下图所示 1 接受中断请求 2 响应中断 3 执行中断服务程序 ISR 中断操作流程图 4 中断向量地址C54x中断向量地址由PMST中的中断向量指针IPTR 9位 和中断向量号 0 31 左移两位后组成 如图所示 中断向量号左移两位后 中断向量地址 中断向量地址的产生 返回首页 堆栈被用于保存中断程序 调用子程序的返回地址 也用于保护和恢复用户指定的寄存器数据 还可用于程序调用时的参数传递 TMS320C54x提供一个用16位堆栈指针 SP 寻址的软件堆栈 当向堆栈中压入数据时 堆栈从高地址向低地址增长 堆栈指针是减在前 加在后 即先SP 1再压入数据 先弹出数据后SP 1 6 2堆栈的使用方法 如果程序中用到堆栈 则必须先进行设置 方法 size set100stack usect STK sizeSTM stack size SP 上述语句在数据RAM空间开辟一个堆栈区 前两句在数据RAM中自定义一个名为STK的保留空间 共100个单元 第3句将这个保留空间的高地址 stack size 赋给SP 作为栈底 堆栈 设置堆栈之后 就可以使用堆栈了 例如 CALLpmad SP 1 SP PC 2 TOS pmad PCRET TOS PC SP l SP 例6 3 堆栈的使用 title zh2 asm mmregssize set100stack usect STK size defstart textstartSTM 0 SWWSRSTM stack size SPLD 8531 ASTM 16 AR1MVMMSP AR7Loop STLA AR7 BANZloop AR1 end 返回首页 1 加减法 6 3加减法运算和乘法运算 例6 4 计算z x y w title example asm mmregsSTACK usect STACK 10H bssx 1 bssy 1 bssw 1 bssz 1 defstart datatable word10 26 23 textstart STM 0 SWWSRSTM STACK 10H SPSTM x AR1 RPT 2MVPDtable AR1 CALLSUMBend BendSUMB LD x AADD y ASUB w ASTLA zRET end 计算结果 数据寄存器地址存储内容十进制数x0060H000AH10y0061H001AH26w0062H0017H23z0063H000DH13 MEMORY PAGE0 EPROM org 0E000Hlen 0100HVECS org 0FF80Hlen 0004HPAGE1 SPRAM org 0060Hlen 0020HDARAM org 0080Hlen 0100H SECTIONS text EPROMPAGE0 data EPROMPAGE0 bss SPRAMPAGE1STK DARAMPAGE1 vectors VECSPAGE0 2 乘法 例6 5 计算y mx b SU LD m TMPY x AADD b ASTLA yRET end计算结果 数据寄存器地址存储内容十进制数m0060H0003H3x0061H000FH15b0062H0014H20y0063H0041H65 练习 编写计算y x1 a1 x2 a2 x3 a3的汇编源程序 x1 x2 x3分别为1 2 3a1 a2 a3分别为4 5 6 返回首页 6 4重复操作 1 单条指令的重复操作RPT 重复执行下一条指令 和RPTZ 累加器清0后重复执行下一条指令 可重复执行其后的一条指令 重复的次数是指令操作数加1 这个值保存在16位的重复计数寄存器 RC 中 这个值只能由重复指令 RPT或RPTZ 加载 而不能编程设置RC寄存器中的值 一次给定指令重复执行的最大次数是65536 由于重复的指令只需要取指一次 与利用BANZ指令进行循环相比 效率要高得多 例6 9 对数组x 5 0 0 0 0 0 进行初始化 bssx 5STM x AR1LD 0H ARPT 4STLA AR1 或者 bssx 5STM x AR1RPTZ 4STLA AR1 2 块程序重复操作 块程序重复操作RPTB将重复操作的范围扩大到任意长度的循环回路 块程序重复指令RPTB的操作数是循环回路的结束地址 其下条指令就是重复操作的内容 在使用RPTB之前必须先用STM指令将所规定的迭代次数加载到块重复计数器 BRC 中 单条重复指令执行时关闭所有可屏蔽中断 而块重复操作执行期间可以响应中断 例6 10 对数组x 5 中的每个元素加1 bssx 5start LD 1 16 BSTM 4 BRCSTM x AR4RPTBnext 1ADD AR4 16 B ASTHA AR4 next LD 0 B RPTB指令的特点是 对任意长度的程序段的循环开销为0 其本身是一条2字4周期指令 循环开始地址 RSA 是RPTB指令的下一行 结束地址 REA 由RPTB指令的操作数规定 3 循环的嵌套 执行RPT指令时要用到RC寄存器 重复计数器 执行RPTB指令时要用到BRC RSA和RSE寄存器 由于两者用了不同的寄存器 因此RPT指令可以嵌套在RPTB指令中 实现循环的嵌套 当然 只要保存好有关的寄存器 RPTB指令也可以嵌套在另一条RPTB指令中 但效率并不高 下图是一个三重循环嵌套结构 内层 中层和外层三重循环分别采用RPT RPTB和BANZ指令 重复执行N M和L次 返回首页 6 5数据块传送 1 传送速度比加载和存储指令的速度要快 2 传送数据不需要通过累加 3 可以寻址程序存储器 4 与RPT指令相结合 可以实现数据块传送 这些指令的特点如下 1 程序存储器 数据存储器 title zh9 asm mmregsSTACK usect STACK 10H bssx 5 datatable word1 2 3 4 5 defstart textstart STM x AR1RPT 4MVPDtable AR1 end Bend end 例6 11 初始化数组x 5 1 2 3 4 5 2 数据存储器 数据存储器 title zh10 asm mmregsSTACK usect STK 30H bssx 20 bssy 20 datatable word1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 defstart textstart STM x AR1RPT 19MVPDtable AR1 从程序存储器传送到数据存储器中STM x AR2STM y AR3RPT 19MVDD AR2 AR3 从数据存储器传送到数据存储器中end Bend end 例6 12 编写一段程序 将数据存储器中数组x 20 中的数据复制到数组y 20 中 MEMORY PAGE0 EPROM org 0E000Hlen 0100HVECS org 0FF80Hlen 0004HPAGE1 SPRAM org 0060Hlen 0020HDARAM org 0080Hlen 0100H SECTIONS text EPROMPAGE0 data EPROMPAGE0 bss SPRAMPAGE1STK DARAMPAGE1 vectors VECSPAGE0 20个数据从0060H 0073H传送到0074H 0087H 结果如图所示 返回首页 TMS320C54x片内的多总线结构 允许在一个机器周期内通过两条16位数据总线 C总线和D总线 寻址两个数据和系数 如图6 6所示 6 6双操作数乘法 如果求y mx b 则单操作数和双操作数实现方法比较如表6 4所示 表6 4单 双操作数编程比较 用双操作数指令编程的特点为 1 用间接寻址方式获得操作数 且辅助寄存器只能用AR2 AR5 2 占用的程序空间小 3 运行的速度快 双操作数MAC型的指令有4种 如表6 5所示 表6 5MAC型双操作数指令 对于Xmem和Ymem 只能用以下辅助寄存器及寻址方式 辅助寄存器AR2寻址方式 ARnAR3 ARn AR4 ARn AR5 ARn 0 返回首页 1 长字指令 DLDLmem dst dst LmemDSTsrc Lmem Lmem srcDADDLmem src dst dst src LmemDSUBLmem src dst dst src LmemDRSUBLmem src dst dst Lmem src 6 7长字运算和并行运算 1 偶地址排列法 title zhao7 asm mmregsSTACK usect STACK 10H bssa 2 bssy 2 defstarttable word06CACH 0BD90H textstart STM 0 SWWSRSTM STACK 10H SPSTM a AR1RPT 1MVPDtable AR1 STM a AR3DLD AR3 Aend Bend end zhao7 obj ozhao7 out mzhao7 map estartMEMORY PAGE0 EPROM org 0E000Hlen 01F80HVECS org 0FF80Hlen 00080HPAGE1 SPRAM org 00100Hlen 00020HDARAM org 00120Hlen 01380H SECTIONS text EPROMPAGE0 data EPROMPAGE0 bss SPRAMPAGE1STACK DARAMPAGE1 vectors VECSPAGE0 执行前A 0000000000HAR3 0100H 0100H 6CACH 高字 0101H BD90H 低字 执行后A 006CACBD90HAR3 0102H 0100H 6CACH 0101H BD90H 2 奇地址排列法 title zhao8 asm mmregsSTACK usect STACK 10H bssa 2 bssy 2 defstarttable word0BD90H 06CACH textstart STM 0 SWWSRSTM STACK 10H SPSTM a AR1RPT 1MVPDtable AR1 STM a AR3DLD AR3 Aend Bend end zhao8 obj ozhao8 out mzhao8 map estartMEMORY PAGE0 EPROM org 0E000Hlen 01F80HVECS org 0FF80Hlen 00080HPAGE1 SPRAM org 00101Hlen 00020HDARAM org 00120Hlen 01380H SECTIONS text EPROMPAGE0 data EPROMPAGE0 bss SPRAMPAGE1STACK DARAMPAGE1 vectors VECSPAGE0 执行前A 0000000000HAR3 0101H 0101H 6CACH 低字 0102H BD90H 高字 执行后A 00BD906CACHAR3 0103H 0101H 6CACH 0102H BD90H 在使用时 应选定一种方法 这里推荐采用偶地址排列法 将高16位操作数放在偶地址存储单元中 编写汇编语言程序时 应注意将高位字放在数据存储器的偶地址单元中 如下图所示 例6 15 计算Z32 X32 Y32 标准运算 title zh16 asm mmregsSTACK usect STACK 10H bssxhi 1 bssxlo 1 bssyhi 1 bssylo 1 bsszhi 1 bsszlo 1 defstart datatable word1678H 2345H word1020H 0D34AH textstart STM 0 SWWSRSTM STACK 10H SPSTM xhi AR1RPT 3MVPDtable AR1 LD xhi 16 AADDS xlo AADD yhi 16 AADDS ylo ASTHA zhiSTLA zloend Bend end 长字运算 title zh17 asm mmregsSTACK usect STACK 10H bssxhi 2 1 1 bssyhi 2 1 1 bsszhi 2 1 1 defstart datatable long16782345H 1020D34AH textstart STM 0 SWWSRSTM STACK 10H SPSTM xhi AR1RPT 3MVPDtable AR1 DLD xhi ADADD yhi ADSTA zhiend Bend end 2 并行运算 并行运算指令举例 例6 16 用并行运算指令编写计算z x y和f e d的程序 mmregsSTACK usect STACK 10H bssx 3 bssd 3 defstart datatable word0123H 1027H 0 1020H 0345H 0 textstart STM 0 SWWSRSTM STACK 10H SPSTM x AR1RPT 5MVPDtable AR1 STM x AR5STM d AR2LD 0 ASMLD AR5 16 AADD AR5 16 ASTA AR5 并行指令 LD AR2 BADD AR2 16 BSTHB AR2end Bend end 3 64位加法和减法运算 64位数的加法和减法算式如下 例6 17 编写计算Z64 W64 X64 Y64的程序 W X Y和结果Z都是64位数 它们都由两个32位的长字组成 利用长字指令可以完成64位数的加 减法 DLD w1 A A w1w0DADD x1 A A w1w0 x1x0 产生进位CDLD w3 B B w3w2ADDC x2 B B w3w2 x2 CADD x3 16 B B w3w2 x3x2 CDSUB y1 A A w1w0 x1x0 y1y0 产生借位C DSTA z1 z1z0 w1w0 x1x0 y1y0SUBB y2 B B w3w2 x3x2 C y2 C SUB y3 16 B B w3w2 x3x2 C y3y2 C DSTB z3 z3z2 w3w2 x3x2 C y3y2 C 数据计算结果 4 32位乘法运算 32位乘法算式 其中 S 带符号数 U 无符号数 由上算式可见 在32位乘法运算中 实际上包括三种乘法运算 U U S U及S S 一般的乘法运算指令都是两个带符号数相乘 即S S 所以 在编程时 还要用到以下两条乘法指令 MACSUXmem Ymem src 无符号数与带符号数相乘并累加 src U Xmem S Ymem srcMPYUSmem dst 无符号数相乘 dst U T U Smem 例6 18 编写计算W64 X32 Y32的程序 32位乘法实现的64位乘积的程序如下 STM x AR2STM y AR3LD AR2 T T x0MPYU AR3 A A ux0 uy0STLA w0 w0 ux0 uy0LDA 16 A A A 16MACSU AR2 AR3 A A y1 ux0MACSU AR3 AR2 A A x1 uy0STLA w1 w1 ALDA 16 A A A 16MAC AR3 AR2 A A x1 y1STLA w2 w2 A的低16位STHA w3 w3 A的高16位 返回首页 两个16位整数相乘 乘积总是 向左增长 这就意味着多次相乘后乘积将会很快超出定点器件的数据范围 而且要将32位乘积保存到数据存储器 就要耗费两个机器周期以及两个字的程序和RAM单元 然而 两个Q15的小数相乘 乘积总是 向右增长 这就意味着超出定点器件数据范围的将是不太感兴趣的部分 6 8小数运算 定点DSP中数据表示方法定点DSP芯片的数值表示是基于2的补码表示形式 数的定标有Q表示法和S表示法 下表列出了16位数的16种Q表示和S表示 以及它们所能表示的十进制数范围 16位中有一个符号位 Q个小数位和15 Q个整数位来表示一个数 Q表示 S表示及数值范围 1 小数的表示方法 TMS320C54x采用2的补码表示小数 其最高位为符号位 数值范围为 1 1 一个16位的2的补码小数 Q15格式 的每一位的权值为 MSBLSB 1 2 12 22 3 2 15 一个十进制小数乘以32768之后 再将其十进制整数部分转换成十六进制数 就能得到这个十进制小数的2的补码表示 例如 17FFFH0 5正数 乘以327684000H00000H 0 5负数 其绝对值部分乘以32768 再取反加1C000H 18000H在汇编语言程序中 是不能直接写入十进制小数的 若要定义一个系数0 707 可以写成 word32768 707 1000 不能写成32768 0 707 2 小数乘法与冗余符号位 一个小数乘法的例子 假设字长4位 累加器8位 上述乘积是7位 当将其送到累加器时 为保持乘积的符号 必须进行符号位扩展 这样 累加器中的值为11110100 0 09375 出现了冗余符号位 原因是 即两个带符号数相乘 得到的乘积带有2个符号位 造成错误的结果 解决冗余符号位的办法 在程序中设定状态寄存器ST1中的FRCT 小数方式 位为1 在乘法器将结果传送至累加器时就能自动地左移1位 累加器中的结果为 Szzzzzz0 Q7格式 即11101000 0 1875 自动地消去了两个带符号数相乘时产生的冗余符号位 在小数乘法编程时 应当事先设置FRCT位如下 SSBXFRCTMPY AR2 AR3 ASTHA Z这样 TMS320C54x就完成了Q15 Ql5 Q15的小数乘法 返回首页 6 9除法运算 在一般的DSP中都没有除法器硬件 因为除法器硬件代价很高 所以就没有专门的除法指令 同样 在TMS320C54x中也没有一条单周期的16位除法指令 但是 利用条件减法指令 SUBC指令 加上重复指令 RPT 15 就可实现两个无符号数的除法运算 title zhao9f asm mmregs bssnum 1 bssden 1 bssquot 1 defstart datatable word4 32768 10 word 8 32768 10 defstart 1 被除数的绝对值小于除数的绝对值 商为小数0 4 0 8 textstart STM num AR1RPT 1MVPDtable AR1 LD den 16 AMPYA numABSASTHA denLD num 16 AABSARPT 14SUBC den AXC1 BLTNEGASTLA quotend Bend 2 被除数的绝对值大于等于除数的绝对值 商为整数16384 512 返回首页 title zhao9f asm mmregs bssnum 1 bssden 1 bssquot 1 defstart datatable word66 32768 100 word 33 32768 100 defstart textstart STM num AR1RPT 1MVPDtable AR1 LD den 16 AMPYA numABSASTHA denLD num AABSARPT 15SUBC den AXC1 BLTNEGASTLA quotend Bend 6 10浮点运算 1 浮点数的表示方法 在TMS320C54x中 浮点数由尾数和指数两部分组成 它与定点数的关系如下 定点数 尾数 2 指数 例如 定点数0 x2000 0 25 用浮点数表示时 尾数为0 x4000 0 5 指数为1 即0 25 0 5 2 1浮点数的尾数和指数可正可负 均用补码表示 指数的范围为 8 31 2 定点数到浮点数的转换 TMS320C54x通过3条指令可将一个定点数转化成浮点数 1 EXPA取指数指令 指数保持在T中 若A 0 则将0存入T 否则 累加器A的冗余符号位数 8 T 累加器A中的内容不变 例6 23 EXPA执行前执行后A FFFFFFFFCBA FFFFFFFFCBT 0000T 0019 25 例6 23 EXPA执行前执行后A 0785432105A 0785432105T 0007T FFFC 4 2 STT EXPONENT这条紧接在EXP后的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025企业电子产品购销合同
- 2025聘用合同书(参考文本适用于返聘人员)
- 2025酒店股权转让合同范本
- 浙江省宁波市镇海中学浙教版高中信息技术教学设计:Photoshop制作贺卡
- 第8课 体验活字印刷说课稿-2023-2024学年小学劳动六年级下册川民版《劳动教育》
- 甘肃公考真题2025
- 财务报表的格式设置与公式定义说课稿-2025-2026学年中职专业课-会计信息化-财经类-财经商贸大类
- 淄博事业单位笔试真题2025
- 五指山事业单位笔试真题2025
- 阿克苏事业单位笔试真题2025
- 浴室工程施工组织设计方案
- 2024年秋九年级化学上册 第3单元 物质构成的奥秘 课题3 元素 第1课时 物质是由元素组成的说课稿 (新版)新人教版
- 微商基础培训课件
- ISO9001:2024版质量手册资料
- 2023-2024年社会工作者之初级社会综合能力考试题库
- 2025年慢性阻塞性肺疾病全球创议GOLD指南修订解读课件
- 民族宗教团日活动
- 新娘化妆相关知识考核试题及答案
- 食品生产监管能力大比武理论考试题及答案
- 二年级家长会课件下载
- 《PLC应用技术(西门子S7-1200)第二版》全套教学课件
评论
0/150
提交评论