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指令集

时间: 2024-11-04 11:49:08

Cortex-mo指令集的相关文章

arm opcode hook

ARM Cortex M3指令集 在arm中hook我们需要用到 bl 这个转移指令 .其效果和x86中的 call 有点类似. 下面来说说arm bcc的公式.(自己多次尝试总结的,如果有不对的地方希望大家能指点一下.) 计算opcode:(dst - src) / 4 - 2 = opcode 计算dst:src + (opcode + 2) * 4 = dst 不明看例:) 代码: ROM:9D039D3C 108 1C 00 00 1A                 BNE     l

单片机指令周期、机器周期、状态周期、时钟周期

单片机的系统指令周期根据不同的内核架构各有区别. 8051系列单片机采用的是同步式的顺序逻辑系统,整个系统的工作完全是依赖系统内部的时脉信号.它的指令周期.机器周期等也是根据时钟脉冲信号来确定.下面说明机器周期.指令周期等的关系. 时钟周期:又叫时钟振荡周期,指晶振振荡产生的脉冲,一个脉冲表示一个时钟周期. 状态周期:在8051单片机中把一个时钟周期定义为一个节拍(用P表示),二个节拍定义为一个状态周期(用S表示).一个状态周期等于两个时钟周期. 机器周期:一般也叫CPU周期,表示从内存读取一条

ARM cortex M3寄存器及指令集

1.cortex M3拥有通用寄存器R0-R15及一些特殊寄存器: R0‐R7 也被称为低组寄存器.所有指令都能访问它们.它们的字长全是 32 位,复位后的初始值是不可预料的. R8‐R12 也被称为高组寄存器.这是因为只有很少的 16 位 Thumb 指令能访问它们, 32位的指令则不受限制.它们也是 32 位字长,且复位后的初始值是不可预料的 . R13 是堆栈指针.在 CM3 处理器内核中共有两个堆栈指针,于是也就支持两个堆栈.当引用 R13(或写作 SP)时,你引用到的是当前正在使用的那

ARM7与ARM Cortex比较

ARM7与ARM Cortex比较  1.ARM实现方法 ARM Cortex是一种基于ARM7v架构的最新ARM嵌入式内核,它采用哈佛结构,使用分离的指令和数据总线(冯诺伊曼结构下,数据和指令共用一条总 线).从本质上来说,哈佛结构在物理上更为复杂,但是处理速度明显加快.根据摩尔定理,复杂性并不是一件非常重要的事,而吞吐量的增加却极具价值. ARM公司对Cortex的定位是:向专业嵌入式市场提供低成本.低功耗的芯片.在成本和功耗方面,Cortex具有相当好的性能,ARM公司认为它特别适用于汽车

Cortex系列M0-4简单对比

[转贴]Cortex系列M0-4简单对比 原文路径:http://blog.sina.com.cn/s/blog_7dbd9c0e01018e4l.html 针对目前进入大众视野的M0.M3.M4做了如下简单对比,内容来自ARM等官网,这里仅仅是整理了下,看起来更直观点,呵呵. Cortex-M 系列针对成本和功耗敏感的 MCU 和终端应用(如智能测量.人机接口设备.汽车和工业控制系统.大型家用电器.消费性产品和医疗器械)的混合信号设备进行过优化.. 一.比较 Cortex-M 处理器 Cort

【转贴】Cortex系列M0-4简单对比

转载网址:http://blog.sina.com.cn/s/blog_7dbd9c0e01018e4l.html 最近搞了块ST的Cortex-M4处理器,然后下了本文档.分享一下. 针对目前进入大众视野的M0.M3.M4做了如下简单对比,内容来自ARM等官网,这里仅仅是整理了下,看起来更直观点,呵呵. Cortex-M 系列针对成本和功耗敏感的 MCU 和终端应用(如智能测量.人机接口设备.汽车和工业控制系统.大型家用电器.消费性产品和医疗器械)的混合信号设备进行过优化.. 一.比较 Cor

常见指令集架构

电脑微处理器的指令集架构(Instruction Set Architecture)常见的有三种: 复杂指令集运算(Complex Instruction Set Computing,CISC) 目前x86架构微处理器如Intel的Pentium/Celeron/Xeon与AMD的Athlon/Duron/Sempron:以及其64位扩展系统的x86-64架构的Intel 64的Intel Core/Core2/Pentium/Xeon与AMD64的Phenom II/Phenom/Athlon

xcode armv6 armv7 armv7s arm64指令集

郝萌主倾心贡献,尊重作者的劳动成果,请勿转载. 如果文章对您有所帮助,欢迎给作者捐赠,支持郝萌主,捐赠数额随意,重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源码下载:点我传送 之前每个版本的ipa包打出来都才20M出头,后来不知道从哪个版本起打的包每次都将近40M,但是工程中也没有明显的增加很大第三方类或者图片.静态文件.于是就开始了各种瘦身计划:压缩图片,删除不必要静态库.做了一番改动后发现包只比原来小了1M多,收效甚微. 其实是armv6 armv7 armv7s arm64引起

ARM指令集、Thumb指令集、Thumb-2指令集

MCU使用什么指令集主要由内核决定的,比如Cortex-M3使用的是Thumb-2指令集 ARM指令集: 编代码全部是 32bits 的,每条指令能承载更多的信息,因此使用最少的指令完成功能, 所以在相同频率下运行速度也是最快的, 但也因为每条指令是32bits 的而占用了最多的程序空间. Thumb指令集: 编代码全部是 16bits 的,每条指令所能承载的信息少,因此它需要使用更多的指令才能完成功能, 因此运行速度慢, 但它也占用了最少的程序空间 Thumb-2指令集:在前面两者之间取了一个

x86指令集同频性能提升

x86近5000条指令,迄今为止最复杂的指令集.这里不研究CISC & RISC,也不考虑process制程变化,主要是看最近几代IA架构对于同频率下性能的提升. x86指令集nasm文档 http://www.nasm.us/doc/nasmdocb.html http://www.nasm.us/pub/nasm/releasebuilds/2.12.03rc1/doc/nasmdoc.txt skylake架构和haswell架构同频性能对比 : 同频+15%  (geekbench) H