assembly 如何计算指令周期数?

pkmbmrz7  于 2022-11-13  发布在  其他
关注(0)|答案(2)|浏览(166)

下面的代码是一个简单的例子:

#include 
   __config (_INTRC_OSC_NOCLKOUT & _WDT_OFF & _MCLRE_OFF)

   cblock 0x20
Delay1
Delay2
Delay3
    endc

    org 0
Start:
    bsf       STATUS,RP0
    clrf      TRISIO
    bcf       STATUS,RP0
    clrf       Delay1
    clrf       Delay2
    clrf       Delay3
    movlw     0xD0
    movwf     B'100000'
    movlw     .7
    movwf     CMCON
MainLoop:
    bsf       GPIO,GP1
    bsf       0x21,5
EastLoop:
    nop
    decfsz    Delay1,f
    goto      EastLoop
    decfsz    Delay2,f
    goto      EastLoop
    movwf     Delay3
    bcf       0x05,1
    bsf       0x05,4
    decf      Delay3,0
    bsf       0x20,7
    bsf       0x20,3
    bsf       O'40',1
    comf      .32,1
NordLoop:
    decfsz    Delay1,f
    goto      NordLoop
    btfsc     GPIO,GP1
    goto      SetStep
    bsf       GPIO,GP1
    goto      SetSStep
SetStep:
    bcf       GPIO,GP1
SetSStep:
    decfsz    Delay3,f
    goto      NordLoop
    bcf       0x05,1
    bcf       0x05,4
    end

有人能解释一下吗?

ikfrs5lh

ikfrs5lh1#

处理器在不同的指令周期中执行汇编指令(根据指令的复杂性)。您可以通过阅读the datasheet了解指令周期。根据程序逻辑,指令周期总数是所有指令周期的总和。根据数据手册,上述部分命令的指令周期如下:
| 助记符|循环次数|
| - -|- -|
| 无|一个|
| DECFSZ公司|第一届会议 |
| 后藤|2个|
| 移动工作站|一个|
| 生物浓缩因子|一个|
| 生物安全因子|一个|
| DECF公司|一个|
| 通信管理文件|一个|
DECFSZ →如果结果为0,则执行NOP,使其成为2 TCY指令。

相关链接

dauxcl2d

dauxcl2d2#

我猜你正在使用MPLABx。在这种情况下,你可以用模拟器的秒表来计算指令周期数:

  • 将PC放在Eastloop的顶部
  • 启动秒表并将其归零
  • 单步执行循环,并对循环进行计数

相关问题