Cortex-mo指令集
处理器使用的是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-mo指令集的更多相关文章
- 在Cortex-M系列上如何准确地做us级延时?
前几天刚好同事问起在Cortex-M上延时不准的问题,在网上也没找到比较满意的答案,干脆自己对这个问题做一个总结. 根据我们的经验,最容易想到的大概通过计算指令周期来解决.该思路在Cortex上并不是 ...
- STM32学习之路入门篇之指令集及cortex——m3的存储系统
STM32学习之路入门篇之指令集及cortex——m3的存储系统 一.汇编语言基础 一).汇编语言:基本语法 1.汇编指令最典型的书写模式: 标号 操作码 操作数1, 操作数2,... ...
- 【转贴】Cortex系列M0-4简单对比
转载网址:http://blog.sina.com.cn/s/blog_7dbd9c0e01018e4l.html 最近搞了块ST的Cortex-M4处理器,然后下了本文档.分享一下. 针对目前进入大 ...
- ARM Cortex M3(V7-M架构)硬件启动程序 二
解析 STM32 的启动过程 解析STM32的启动过程 当前的嵌入式应用程序开发过程里,并且C语言成为了绝大部分场合的最佳选择.如此一来main函数似乎成为了理所当然的起点——因为C程序往往从main ...
- ARM Cortex M3(V7-M架构)硬件启动程序 一
Cortex-m3启动代码分析笔记 启动代码文件名是STM32F10X.S,它的作用先总结下,然后再分析. 启动代码作用一般是: 1)堆和栈的初始化: 2)中断向量表定义: 3)地址重映射及中断向量表 ...
- 痞子衡嵌入式:ARM Cortex-M内核那些事(5)- 指令集
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是ARM Cortex-M指令集. 指令集 指令长度(bits) 包含指令 CortexM0 CortexM0+ CortexM1 Cor ...
- ARM 架构、ARM7、ARM9、STM32、Cortex M3 M4 、51、AVR 之间有什么区别和联系?(转载自知乎)
ARM架构: 由英国ARM公司设计的一系列32位的RISC微处理器架构总称,现有ARMv1~ARMv8种类. ARM7: 一类采用ARMv3或ARMv4架构的,使用冯诺依曼结构的内核. ...
- 【转载】CPU架构、指令集与指令集体系结构(ISA)
最近学习计算机系统基础,了解到指令集体系结构. 对CPU架构.指令集和指令集体系结构的关系不清楚,特此记录. 指令集体系结构(ISA)包括 指令集.指令集编码.基本数据类型等. CPU架构 实现了 指 ...
- ARM与Cortex
arm系列从arm11开始,以后的就命名为cortex,并且性能上大幅度提升. 从cortex开始,分为三个系列,a系列,r系列,m系列. m系列与arm7相似,不能跑操作系统(只能跑ucos2),偏 ...
- 关于CPU、指令集、架构、芯片的一些科普
作者:王强链接:https://zhuanlan.zhihu.com/p/19893066来源:知乎 随着智能设备的广泛普及,这几年媒体上越来越多的出现关于"架构""AR ...
随机推荐
- Android WebView支持WebGL
Android从5.0开始默认支持WebGL,我在实际开发中遇到了一些5.0设备不支持的情况,原来Chromium对运行GPUs不稳定的或者有兼容性问题的设备会禁用WebGL.在Android平台可以 ...
- Jquery插件 easyUI属性汇总
属性分为CSS片段和JS片段. CSS类定义:1.div easyui-window 生成一个window窗口样式. 属性如下: 1)mod ...
- Android的消息处理机制(Looper,Handler,Message)(转)
Handler Handler的定义: 主要接收子线程发送的数据,并用此数据配合主线程更新UI. 当应用程序启动时,Android首先会开启一个主线程(也就是UI线程),主线程为管理界面中的UI空间进 ...
- Android开发之InstanceState详解(转)
本文来自:http://www.cnblogs.com/hanyonglu/archive/2012/03/28/2420515.html 本文介绍Android中关于Activity的两个神秘方法: ...
- 1.1 语言与平台 [Java]
Java语言是静态类型.面向对象的语言: Java平台是提供运行时环境的软件: 生产和使用Java代码的整个过程:.java (javac) .class (类加载器) 转换后的.class (解释器 ...
- mysql innerjoin left join right join 解析
毕业半年多时间,一直都没有学习好join 之前一直是先从一个表里面取出数据然后,然后再从另外一个表里面取出数据,然后再写一个函数循环格式化数据. 还是先写一下学到的东西吧! 转载自w3school ...
- linux awk 中 RS,ORS,FS,OFS 区别与联系【转】
linux awk 中 RS,ORS,FS,OFS 区别与联系 http://blog.csdn.net/jesseen/article/details/7992929
- CentOS安装Nginx,并配置nodejs反向代理
安装介绍 安装位置:/usr/local/nginx nginx安装包下载地址:http://nginx.org/download/nginx-1.7.11.tar.gz 安装依赖软件 安装nginx ...
- Codeforces Round #300 F - A Heap of Heaps (树状数组 OR 差分)
F. A Heap of Heaps time limit per test 3 seconds memory limit per test 512 megabytes input standard ...
- HDU-1176(基础方程DP)
Problem Description 都 说天上不会掉馅饼,但有一天gameboy正走在回家的小径上,忽然天上掉下大把大把的馅饼.说来gameboy的人品实在是太好了,这馅饼别处都不掉, 就掉落在他 ...