关于asm(” RPT #N || NOP”)的一点解释

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于asm(” RPT #N || NOP”)的一点解释相关的知识,希望对你有一定的参考价值。

关于asm(” RPT #N || NOP”)的一点解释

标签: asmcpuDSP 时钟
技术分享 分类:
 
          其实这条语句在DSP等系统开发中经常要用到,比如更改某些配置后需要延时几个时钟周期才能够生效,这时asm(” RPT #7 || NOP”)便可以闪亮登场了。虽然这个功能我们都知道而且经常使用,但是具体的细节很多人却不知道,包括我。今天在一个交流群里有人突然问这条指令下去执行之后,会占用多少时钟周期呢?结果可想而知问蒙了。

       到论坛上发个帖子提问结果没人搭理,或许高手对这个问题并不关心。那只好动手测试一下了。

简单写段代码编译下载到片子里面(我是用的28335进行测试的!),观察CPU Timer0寄存器的TIMER0TIM位。发现执行asm(” RPT #7 || NOP”)之后,TIMER0TIM位增量是8.也就是说每执行一次需要8个时钟周期。确切的说是8个指令周期。这只是对CPU空闲的情况而言,因为空闲的时候,一个指令周期大约就是一个时钟周期。如果28335有任务的时候,可能就会占用9个抑或更多的时钟周期,这要分析流水线等因素。实际应用时,大可不必如此精准。用别的片子也可能会多于8个时钟,主要看片子执行每条指令需要多少个时钟周期。但有一点可以肯定的是asm(” RPT #7 || NOP”)这条指令必然会侵占8个指令周期.因为这条指令的意思就是重复执行7+1=8次 NOP 指令。

简单的总结一下:

对于TMS320F28335而言asm(” RPT #N || NOP”)会执行N+1次NOP指令,占用N+1个指令周期。正常情况下占用N+1个时钟周期。其他的片子占用的时钟周期自己计算。

以上是关于关于asm(” RPT #N || NOP”)的一点解释的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Visual C++ 的内联汇编器插入重复的 NOP 语句?

ASM字节码操作 转换已有的类 移除Instruction 移除NOP

ASM字节码操作 转换已有的类 清空方法体

关于Power.asm的实现

等效于嵌入式 C 中的 NOP?

逆向---01.Nop中文字符串搜索保存修改后程序