第4章-汇编语言程序设计.ppt

  1. 1、本文档共139页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第4章 汇编语言程序设计 1)定点加法运算 例4-35 计算0.5+0.89=1.39。被加数和加数采用Q15就可满足,但其和却超出了Q15的表示范围,即产生了溢出。解决的方法是将数据进行Q14定标。程序段如下: .bss x,2 .bss sum,1 table: .word 5*16384/10 ;0.5的Q14定标 .word 89*16384/100 ;0.89的Q14定标 .text STM #x,AR2 RPT #1 MVPD table,*AR2+ LD x,A ADD x+1,A STL A,*AR2 * 第4章 汇编语言程序设计 2)定点乘法运算 因为16位×16位=32位,所以乘法不会产生溢出。 两定点数相乘通常有下列三种情况: 整数×整数:Q0×Q0=Q0,结果仍为纯整数,小数点在结果的D0位后面。 小数×小数:Q15×Q15=Q30,结果仍为纯小数,小数点在乘积的D30位后面,也就是说,D31和D30位都是符号位,且其值相同。对这种纯小数乘法可将乘积左移一位,去掉多余的符号位,然后保留高16位结果,仍是Q15定标。C54x的硬件乘法器已提供了对乘积的处理功能,编程者只需将标志位FRCT置1,硬件就可自动完成对乘积左移一位操作 混合小数乘法:Qi×Qj = Qi+j * 第4章 汇编语言程序设计 2)定点乘法运算 例4-37 混合小数乘法:计算7.62×1.84 = 14.0208。程序段如下: .bss x,2 .bss prod,2 table: .word 762*4096/100 ;7.62的Q12定标 .word 184*16384/100 ;1.84的Q14定标 .text STM #x,AR2 RPT #1 MVPD table,*AR2+ STM #x,AR4 STM #x+1,AR5 MPY *AR4,*AR5,A DST A,prod ;乘积为Q26定标,32位,没有进行移位和只保留高16位的处理。 * 4.5.4 流水线冲突及其解决的方法 第4章 汇编语言程序设计 采用C/C++语言编程,经过C编译器产生的代码避免了资源争用和时序上的错误,不会产生流水线冲突。 采用汇编语言编程,在下列情况下可能会产生流水线冲突: 对MMR进行写操作所引发的流水线冲突 条件执行指令有可能发生的流水线冲突 改变PMST可能引起的流水线冲突 * 1.对MMR进行写操作所引发的流水线冲突 第4章 汇编语言程序设计 对下列硬件资源进行写访问时有可能产生未保护性的流水线冲突: 累加器AG、AH、AL、BG、BH、BL 状态寄存器ST0、ST1 处理器工作方式状态寄存器PMST 辅助寄存器AR0~AR7 堆栈指针SP 暂存器T 块重复计数器BRC 重复块长度寄存器BK * 1.对MMR进行写操作所引发的流水线冲突 第4章 汇编语言程序设计 例4-38 分析下列指令的流水线冲突及解决方法。 STLM A,AR1;(A)→AR1 STM #8,AR2;8→AR2 它们的流水线操作如下图所示。两条指令在写MMR时产生了资源争用,也就产生了流水线冲突。 * 1.对MMR进行写操作所引发的流水线冲突 第4章 汇编语言程序设计 解决的方法是:在两条指令之间插入1个空跳NOP,则流水线变为下图所示。写AR2的时间延时了一个周期,避开了写操作的资源争用,解决了流水线的冲突。 * 2.条件执行指令有可能发生的流水线冲突 第4章 汇编语言程序设计 例4-40 分析下列程序的流水线操作情况,其流水线如下图所示。 LD *AR2,B XC 2,BEQ ;若(B)=0,则执行后面的2条指令 …… * 2.条件执行指令有可能发生的流水线冲突 第4章 汇编语言程序设计 解决的方法是:在两条指令中插入2个NOP,使得条件稳定后再去进行条件检测。 * 3.改变PMST可能引起的流水线冲突 第4章 汇编语言程序设计 在处理器工作方式状态寄存器(PMST)中有一些非常重要的位,在修改PMST的这些位时,如果紧跟其后的指令立即使用新的地址空间去进行访问,就有可能产生错误。 例4-41 在修改DROM位之后,插入3个NOP,才能去访问它所影响的存储空间。 ORM #8h, PMST ;令DROM = 1,本例设DP=0 NOP NOP NOP LD *AR3, A ;从片内ROM读数据 * 3.改

文档评论(0)

kbook + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档