处理器使用的是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指令集的更多相关文章

  1. 在Cortex-M系列上如何准确地做us级延时?

    前几天刚好同事问起在Cortex-M上延时不准的问题,在网上也没找到比较满意的答案,干脆自己对这个问题做一个总结. 根据我们的经验,最容易想到的大概通过计算指令周期来解决.该思路在Cortex上并不是 ...

  2. STM32学习之路入门篇之指令集及cortex——m3的存储系统

    STM32学习之路入门篇之指令集及cortex——m3的存储系统 一.汇编语言基础 一).汇编语言:基本语法 1.汇编指令最典型的书写模式: 标号 操作码        操作数1, 操作数2,... ...

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

    转载网址:http://blog.sina.com.cn/s/blog_7dbd9c0e01018e4l.html 最近搞了块ST的Cortex-M4处理器,然后下了本文档.分享一下. 针对目前进入大 ...

  4. ARM Cortex M3(V7-M架构)硬件启动程序 二

    解析 STM32 的启动过程 解析STM32的启动过程 当前的嵌入式应用程序开发过程里,并且C语言成为了绝大部分场合的最佳选择.如此一来main函数似乎成为了理所当然的起点——因为C程序往往从main ...

  5. ARM Cortex M3(V7-M架构)硬件启动程序 一

    Cortex-m3启动代码分析笔记 启动代码文件名是STM32F10X.S,它的作用先总结下,然后再分析. 启动代码作用一般是: 1)堆和栈的初始化: 2)中断向量表定义: 3)地址重映射及中断向量表 ...

  6. 痞子衡嵌入式:ARM Cortex-M内核那些事(5)- 指令集

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是ARM Cortex-M指令集. 指令集 指令长度(bits) 包含指令 CortexM0 CortexM0+ CortexM1 Cor ...

  7. ARM 架构、ARM7、ARM9、STM32、Cortex M3 M4 、51、AVR 之间有什么区别和联系?(转载自知乎)

    ARM架构:  由英国ARM公司设计的一系列32位的RISC微处理器架构总称,现有ARMv1~ARMv8种类. ARM7:       一类采用ARMv3或ARMv4架构的,使用冯诺依曼结构的内核. ...

  8. 【转载】CPU架构、指令集与指令集体系结构(ISA)

    最近学习计算机系统基础,了解到指令集体系结构. 对CPU架构.指令集和指令集体系结构的关系不清楚,特此记录. 指令集体系结构(ISA)包括 指令集.指令集编码.基本数据类型等. CPU架构 实现了 指 ...

  9. ARM与Cortex

    arm系列从arm11开始,以后的就命名为cortex,并且性能上大幅度提升. 从cortex开始,分为三个系列,a系列,r系列,m系列. m系列与arm7相似,不能跑操作系统(只能跑ucos2),偏 ...

  10. 关于CPU、指令集、架构、芯片的一些科普

    作者:王强链接:https://zhuanlan.zhihu.com/p/19893066来源:知乎 随着智能设备的广泛普及,这几年媒体上越来越多的出现关于"架构""AR ...

随机推荐

  1. OpenXml2.0 - 找不到类型或命名空间名称“DocumentFormat”

    在使用 OpenXml SDK2.0的过程中,很是郁闷的是总是报 '找不到类型或命名空间名称“SpreadsheetDocument”(是否缺少 using 指令或程序集引用?)'的错误,命名已经添加 ...

  2. ssh key报but this does not map back to the address – POSSIBLE BREAK-IN ATTEMPT!错误

    在/etc/hosts 文件加上对方的主机名  ip地址,可以ping通主机名即可.

  3. ASP.NET 文本编辑器使用(CKEditor)与上传图片

    CKEditor是什么 CKEidtor是一个在线富文本编辑器,可以将让用户所见即所得的获得编辑在线文本,编辑器或自动将用户编辑的文字格式转换成html代码. 方法一.在ASP.NET工程中添加CKE ...

  4. wm_char

    用于接收键盘输入的消息 int CXuexi2View::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CView::OnCreate(lpCreateS ...

  5. php开发通用采集程序

    php采集程序构建基本步骤: 采集程序是什么?获取远程数据(文字.图片.图片)并快速保存到本地或指定地址. 如天气预报(小偷程序): 远程获取-->替换内容-->展示给用户 如实时更新的新 ...

  6. nodejs学习记录

    一.环境搭建 1.安装express 局部安装 npm i express 全局安装 npm i -g express (命令行express无法使用) 环境变量 npm i -g express-g ...

  7. .net转php laraval框架学习系列(一) 环境搭建

    之前也没写过什么博客,可能文章结构比较混乱,想到那写到哪. 主要是把自己学习中的经验写下来. 为什么选择laravel框架,是因为laravel框架目前是Php最流行的框架,深入研究后发现和asp.n ...

  8. The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. (关于jdbc)

    The last packet sent successfully to the server was milliseconds ago. The driver has not received an ...

  9. WinMain与WndProc以及窗口诞生过程总结

    一.int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR szCmdLine, int nCmdShow) 四个 ...

  10. 【持久化框架】Mybatis与Hibernate的详细对比

        前言 这篇博文我们重点分析一下Mybatis与hibernate的区别,当然在前面的博文中我们已经深入的研究了Mybatis和Hibernate的原理. Mybatis [持久化框架]Myba ...