处理器使用的是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. office - 连接字符串.

    Microsoft ACE OLEDB 12.0 Connect to Excel 2007 (and later) files with the Xlsx file extension. That ...

  2. java事件处理4(焦点,键盘

    FocusEvent焦点事件 接口 addFocusListener(FocusListener listener) 有两个方法 public void focusGains(FocusEvent e ...

  3. v9站点自定义变量

    打开 \phpcms\modules\admin\templates\site_edit.tpl.php 文件,找到最后一个 </fieldset> ,在他后面添加一下代码:<!-- ...

  4. Day02

    1.os.system()和os.popen() os.popen() 功能强于os.system() , os.popen() 可以返回回显的内容,以文件描述符返回 eg: import os re ...

  5. mac 常用的开发工具

    http://www.oschina.net/news/53946/mac-dev-tools 要清楚的认识到,我们寻找的不是开始按钮,而是程序入口,任何一个操作系统,用户要做的事情并不是找到开始菜单 ...

  6. startActivityForResult案例

    Info:startActivty 与 startActivityForResult区别 (1):startActivity 启动了其他Activity之后不会再回调过来,此时启动者与被启动者在启动后 ...

  7. 利用http实现文件的上传和下载

    其他语言都比较方便,使用http上传.但是C++这样就差点,不过还好,Linux下有个curl的命令行工具,这是一个开源项目,底下有个子项目是libcurl,curl就是调用这个API实现的一系列ft ...

  8. android 让一个控件按钮居于底部的几种方法

    android 让一个控件按钮居于底部的几种方法1.采用linearlayout布局:android:layout_height="0dp" <!-- 这里不能设置fill_ ...

  9. android 截取指定位置字符串

    String str = "s\ziyuan"; String newStr = str.subString(str.indexOf("\\"),str.len ...

  10. js 删除效果代码

    效果 css文件delcss.css 代码如下: ;;} #div1{;; filter:alpha(opacity:0); display:none;} #div1 h3{ height:20px; ...