打印
[技术问答]

M051如何计算出一条指令的运行时间?谢谢!

[复制链接]
1462|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
leeshineSZ|  楼主 | 2016-3-14 16:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
M051如何计算出一条指令的运行时间?谢谢!
沙发
gaoyang9992006| | 2016-3-14 19:01 | 只看该作者
这个是Cortex-M0的核心,你要考察的是这个核心的运行效率。

使用特权

评论回复
板凳
zhuomuniao110| | 2016-3-14 19:03 | 只看该作者
-----------------

  Cortex-M0指令和它们的周期数

操    作
描    述
汇 编 指 令
周    期
MOVE
8-bit immediate
MOVS Rd,#<imm>
     1
Lo to Lo
MOVS Rd,Rm
     1
Any to Any
MOV Rd,Rm
     1
Any to PC
MOV PC,Rm
     3
Add
3-bit immediate
ADDS Rd,Rn,#<imm>
     1
All registers Lo
ADDS Rd,Rn,Rm
     1

续表

操    作
描    述
汇 编 指 令
周    期

Any to Any
ADD Rd,Rd,Rm
     1
Any to PC
ADD PC,PC,Rm
     3
8-bit immediate
ADDS Rd,Rd,#<imm>
     1
With carry
ADCS Rd,Rd,Rm
     1
Immediate to SP
ADD SP,SP,#<imm>
     1
Form address from SP
ADD Rd,SP ,#<imm>
     1
Form address from PC
ADR Rd,<label>
     1
Subtract
Lo to Lo
SUBS Rd,Rn,Rm
     1
3-bit immediate
SUBS Rd,Rn,#<imm>
     1
8-bit immediate
SUBS Rd,Rd,#<imm>
     1

With carry
SBCS Rd,Rd,Rm
     1
Immediate from SP
SUB SP,SP,#<imm>
     1
Negate
RSBS Rd,Rn,#0
     1
Multiply
Multiply
MULS Rd,Rm,Rd
1或32
Compare
Compare
CMP Rn,Rm
     1
Negative
CMP Rn,Rm
     1
Immediate
CMP Rn,#<imm>
     1
Logical
AND
ANDS Rd, Rd, Rm
     1
Exclusive OR
EORS Rd, Rd, Rm
     1
OR
ORRS Rd, Rd, Rm
     1
Bit clear
BICS Rd, Rd, Rm
     1
Move NOT
MVNS Rd, Rm
     1
AND test
TST Rn, Rm
     1
Shift
Logical shift left by immediate
LSLS Rd, Rm, #<shift>
     1
Logical shift left by register
LSLS Rd, Rd, Rs
     1
Logical shift right by immediate
LSRS Rd, Rm, #<shift>
     1
Logical shift right by register
LSRS Rd, Rd, Rs
     1
Arithmetic shift right
ASRS Rd, Rm, #<shift>
     1
Arithmetic shift right by register
ASRS Rd, Rd, Rs
     1
Rotate
Rotate right by register
RORS Rd, Rd, Rs
     1
Load
Word, immediate offset
LDR Rd, [Rn, #<imm>]
     2
Halfword, immediate offset
LDRH Rd, [Rn, #<imm>]
     2
Byte, immediate offset
LDRB Rd, [Rn, #<imm>]
     2
Word, register offset
LDR Rd, [Rn, Rm]
     2

续表

操    作
描    述
汇 编 指 令
周    期

Halfword, register offset
LDRH Rd, [Rn, Rm]
     2
Signed halfword, register offset
LDRSH Rd, [Rn, Rm]
     2
Byte, register offset
LDRB Rd, [Rn, Rm]
     2
Signed byte, register offset
LDRSB Rd, [Rn, Rm]
     2
PC-relative
LDR Rd, <label>
     2
SP-relative
LDR Rd, [SP, #<imm>]
     2
Multiple, excluding base
LDM Rn!, {<loreglist>}
   1+N
Multiple, including base
LDM Rn, {<loreglist>}
   1+N
Store
Word, immediate offset
STR Rd, [Rn, #<imm>]
     2
Halfword, immediate offset
STRH Rd, [Rn, #<imm>]
     2
Byte, immediate offset
STRB Rd, [Rn, #<imm>]
     2
Word, register offset
STR Rd, [Rn, Rm]
     2

Halfword, register offset
STRH Rd, [Rn, Rm]
     2
Byte, register offset
STRB Rd, [Rn, Rm]
     2
SP-relative
STR Rd, [SP, #<imm>]
     2
Multiple
STM Rn!, {<loreglist>}
   1+N
Push
Push
PUSH {<loreglist>}
   1+N
Push with link register
PUSH {<loreglist>, LR}
   1+N
Pop
Pop
POP {<loreglist>}
   1+N
Pop and return
POP {<loreglist>, PC}
   4+N
Branch
Conditional
B<cc> <label>
   1或3
Unconditional
B<label>
    3
With link
BL<label>
    4
With exchange
BX Rm
    3
With link and exchange
BLX Rm
    3
Extend
Signed halfword to word
SXTH Rd, Rm
    1
Signed byte to word
SXTB Rd, Rm
    1
Unsigned halfword
UXTH Rd, Rm
    1
Unsigned byte
UXTB Rd, Rm
    1
Reverse
Bytes in word
REV Rd, Rm
    1
Bytes in both halfwords
REV16 Rd, Rm
    1
Signed bottom half word
REVSH Rd, Rm
    1
State change
Supervisor Call
SVC #<imm>
    -
Disable interrupts
CPSID i
    1

操    作
描    述
汇 编 指 令
周    期

Enable interrupts
CPSIE i
    1
Read special register
MRS Rd, <specreg>
    4
Write special register
MSR <specreg>, Rn
    4
Breakpoint
BKPT #<imm>
    —
Hint
Send event
SEV
    1
Wait for event
WFE
    2
Wait for interrupt
WFI
    2
Yield
YIELD
    1
Hint
No operation
NOP
    1
Barriers
Instruction synchronization
ISB
    4
Data memory
DMB
    4
Data synchronization
DSB
    4
ISO/IEC的C代码不能直接地获取一些Cortex-M0的指令。表7-23列举了CMSIS的C编译器中提供的部分内部函数用于产生这些指令。如果一个C编译器不支持恰当的内部函数,则需要用内嵌汇编来获取有关指令。
表7-23  CMSIS内部函数
指    令
CMSIS内部函数
指   令
CMSIS内部函数
CPSIE i
void __enable_irq(void)
REV
uint32_t __REV(uint32_t int value)
CPSID i
void __disable_irq(void)
REV16
uint32_t __REV16(uint32_t int value)
ISB
void __ISB(void)
REVSH
uint32_t __REVSH(uint32_t int value)
DSB
void __DSB(void)
SEV
void __SEV(void)
DMB
void __DMB(void)
WFE
void __WFE(void)
NOP
void __NOP(void)
WFI
void __WFI(void)
CMSIS也提供了几个函数用于获取特殊的寄存器,如表7-24所示。
表7-24  CMSIS提供的用于获取特殊寄存器的函数
特殊寄存器
获 取 方 式
CMSIS函数
PRIMASK

uint32_t __get_PRIMASK(void)

void __set_PRIMASK(void)
CONTROL

Uint32_t __get_CONTROL(uint32_t value)

Void __set_CONTROL(uint32_t value)
MSP

Uint32_t __get_MSP(void)

Void __set_MSP(uint32_t TopOfMainStack)
PSP

Uint32_t __get_PSP(void)

Void __set_PSP(uint32_t TopOfMainStack)


使用特权

评论回复
地板
leeshineSZ|  楼主 | 2016-3-15 09:37 | 只看该作者
哦,如果周期是一的话,是不是就是1/主频,要考虑分频不?谢谢!

使用特权

评论回复
5
Thethree| | 2016-3-15 14:54 | 只看该作者
每个芯片的指令运行时间是固定的吧,比如这个是cortex的核,arm的datasheet里面应该讲到

使用特权

评论回复
6
ideafor| | 2016-3-15 20:27 | 只看该作者
你说的指令是汇编指令还是C语言的语句?

使用特权

评论回复
7
E-Kaia| | 2016-3-16 09:48 | 只看该作者
这个得看你设置的时钟频率吧,不同指令运行时间不同

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

20

帖子

0

粉丝