Cortex-M0指令集
来源:互联网 发布:沈阳关键词优化 编辑:程序博客网 时间:2024/04/29 08:25
处理器使用的是ARMv6-M Thumb指令集,包括大量的32位的使用Thumb-2技术的指令。表7-22列出了Cortex-M0指令和它们的周期数。周期计数以零等待状态的系统为基准。
表7-22 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)
- Cortex-M0指令集
- Cortex-M0+指令集
- ARM 指令 CORTEX-M0
- 【Cortex-M0】4 ARM微微控制器的指令集
- cortex M0
- 【Cortex-M0】3 ARM Cortex-M0
- 【Cortex-M0】13看门狗
- Cortex-M0启动文件
- 浅谈ARM Cortex-M0
- 【Cortex-M0】2 ARM概述
- 【Cortex-M0】11串口控制器
- 【Cortex-M0】12外部中断
- 【Cortex-M0】19.3 Hex文件
- 【Cortex-M0】19.4功耗控制
- 【Cortex-M0】19.5系统复位
- 【Cortex-M0】19.6 scatter文件
- 【Cortex-M0】19.7 USER配置
- STM32F0DISCOVERY Cortex-M0 开发板
- 图片自动适应大小
- 搜索引擎的那些事(开篇)
- linux内核调试环境搭建-1 Ubuntu10 .10下编译安装qemu
- algo3-3-10.c Hanoi塔问题 (没仔细看)
- linux家目录下各默认目录的定义,如桌面,模板,音乐,公共,视频,文档,下载,图片等
- Cortex-M0指令集
- 浏览器兼容(根据不同的浏览器执行不同的代码)
- 黑马--程序员 总结:多态变量,在编译和运行期间,都参考的是左边(引用类型所属的类)
- Android编译过程详解(一)
- Java annotation
- linux内核调试环境搭建-2 用busybox搭建
- Android编译过程详解(二)
- 2006年百度在线笔试题及答案
- js实现复制功能(文件上传)