七、ARM 指令集

发布者:古古斋最新更新时间:2023-07-11 来源: elecfans关键字:ARM  指令集 手机看文章 扫描二维码
随时随地手机看文章

7.1 数据处理指令

7.1.1 数据传送类

  • MOV 类指令:核内寄存器间的数据传送

  • 加载和存储指令(L/S):核内寄存器与挂在存储器总线上器件的数据传送

  • 注意:

    • 核内寄存器就是 R0-R15

    • 外设寄存器入 GPIO 的寄存器

7.1.2 算术逻辑运算类

  • ADD:假发指令

    • MOV R0,#0x01

    • ADD R0,R0.#0x01

  • SUB:减法指令

  • MUL:乘法指令

  • AND:按位与指令

  • ORR:按位或指令

  • EOR:按位异或指令

  • BIC:清零指令

    • BIC R1,R1,#0x0f

    • 最低 4 位清零

  • 注意:ARM 指令集中没有除法指令,通过软件(移位-比较-相减)实现,不过在 ARMV7 指令集中增加了除法指令

7.1.3 比较指令

  • CMP:比较两个数,会影响标志位

  • TST:测试某一位是否为0,常与 EQ, NE 等条件码结合使用

  • TEQ:判断两个数的位值是否相等,与 EQ, NE 条件码结合使用

  • 注意:它们不需要加后缀 S,它们会直接影响程序状态寄存器,常用于选择/循环结构

7.2 跳转指令

  • B:直接跳到要执行的指令处

  • BL:待返回的跳转指令,相当于 C 语言的函数调用

  • BX:改变状态的跳转,把 RN 的值赋值给 R15(PC),然后改变 CPSR 的 T位, T 位由 RN 里面的最低为即 bit 0 决定

    • Rn[0] = 1, THUMB 状态(在原有的 Rn 上加 1 即可)

    • Rn[0] = 0,ARM 状态

    • BX R0             跳到 R0 地址处

    • 1110 0001 0010 1111 1111 1111 0001 0000

  • BLX:带返回的改变状态的跳转

7.3 协处理指令

  • 协处理器是协助主 CPU 完成一些特定功能(MMU、Cache 和 TLB 等等)的处理器

  • 功能上和操作系统的虚拟地址映射、Cache 管理等有关。

  • 主要的指令有三类

    • 数据操作指令:ARM 处理器通过 CDP 命令通知协处理器完成一些初始化操作,命令的解析由协处理器完成

    • 存储器数据传送指令:ARM 处理器通过 LDC/STC 指令将内存单元的数据读取或者写入到协处理器的寄存器中

    • 寄存器数据传送指令:ARM 处理器通过 MCR/MRC 指令将 ARM 处理器中的寄存器数据与协处理器中的寄存器数据进行数据传送

  • 协处理器有 16 个,一般 CP15 是设置 MMU, Cache, 大小端等关于存储器配置的。

  • CP15 包含 16 个 32 位寄存器, C0 - C15

  • MCR{cond}   coproc, opcode1, Rd, CRn, CRm, opcode2

  • MRC{cond}   coproc, opcode1, Rd, CRn, CRm, opcode2

    • coproc:指令操作的协处理器名,标准名为 pn, n 为 0 ~ 15

    • opcode1:协处理器的特定操作码,对于 CP15 寄存器来说, opcode 永远为0,不为 0 时,操作不可预知

    • Rd:CPU 的寄存器

    • CRn:存放第一个操作数的协处理器寄存器

    • CRm:存放第二个操作数的协处理器,用来区分同一个编号的不同物理寄存器,当不需要提供附加信息时,指定为 C0

    • opcode2:可选的协处理器操作码,用来区分同一个编号的不同物理寄存器,当不需要提供附加信息时,指定为 0

7.4 杂项指令

7.4.1 软中断

  • SWI:软中断,一般用于系统调用,有两种方式完成:

    • MOV R0, #0x12         

    • MOV R1, #0x01

    • SWI 0x00                    产生中断,模式变成 SVC,跳到中断向量位置去

    • MOV R0, #0x01          设置子功能为 0x01

    • SWI 0x12                    调用 0x12 软中断

    • 方式一:

    • 方式二:

7.4.2 寄存器与 PSR 数据传送

  • 指令:MRS 和 MSR

  • PSR 的控制域(fsxc):

    • 位【31:24】位条件标志位域,用 f 表示;

    • 位【23:16】为状态位域,用 s 表示;

    • 位【15:8】为扩展位域,用 x 表示;

    • 位【7:0】位控制位域,用 c 表示

  • mrc r0, cpsr              将 cpsr 的值存入到 r0 中

  • msr cpsr_c, #0xd3   将立即数 0xd3 放入到 cpsr 的 C 控制域中

7.5 伪指令

  • 伪指令不是 ARM 指令,但可以把它当作指令来使用,主要作用是方便编写程序,最终还是会转换成 ARM 指令

  • LDR R0,=0x12345678                 ;绝对地址

  • ADR R0,xxx(地址标号)                ;相对地址

  • ADRL R0, xxx(地址标号)        ;相对地址

  • NOP                                               ;MOV R0, R0

  • 区分:

    • adr   r0, _start                     ;取运行地址                 

    • ldr    r1, _start                   ;取得运行地址中的值(指令)

    • ldr r2, = start                    ;取的是链接地址


关键字:ARM  指令集 引用地址:七、ARM 指令集

上一篇:八、ARM 汇编程序格式和程序控制
下一篇:六、ARM 寻址方式

推荐阅读最新更新时间:2024-11-10 11:46

ARM承认芯片存安全漏洞,安卓iOS设备都有影响
  网易科技讯 1月5日消息,据VentureBeat报道,继承认不安全的内存漏洞会影响数以百万计的英特尔处理器后,ARM今天证实,许多Cortex系列处理器也存在漏洞。ARM的Cortex技术被用于各种各样的Android和iOS设备,以及部分Nvidia Tegra产品、高通骁龙芯片以及索尼的PlayStation Vita上。   在描述了四种不同的可被利用的处理器漏洞后,ARM发布了一个图表,承认它的Cortex-A8、-A9、-A15、-A17、-A57、-A72、-A73以及-A75芯片都容易受到两个以上漏洞的攻击。前三款Cortex处理器被用于老款苹果iOS、Nvidia Tegra、三星Exynos设备以及索尼的P
[嵌入式]
基于ARM的嵌入式Linux移植真实体验(5)――应用实例
应用实例的编写实际上已经不属于Linux操作系统移植的范畴,但是为了保证本系列文章的完整性,这里提供一系列针对嵌入式Linux开发应用程序的实例。 编写Linux应用程序要用到如下工具: (1)编译器:GCC GCC是Linux平台下最重要的开发工具,它是GNU的C和C++编译器,其基本用法为:gcc 。 我们应该使用arm-linux-gcc。 (2)调试器:GDB gdb是一个用来调试C和C++程序的强力调试器,我们能通过它进行一系列调试工作,包括设置断点、观查变量、单步等。 我们应该使用arm-linux-gdb。 (3)Make GNU Make的主要工作是读进一个文本文件,称为makefile。这个文件记
[单片机]
ARM的NEON协处理器是什么
何谓多媒体扩展指令集?由于原理复杂坚涩,小编就简单的打个比方:厂商们分析平时处理器干哪些事情最慢、又最经常用到,然后把这些最消耗时间的事情固化成电路,做成一个额外的部分,和处理器集成到一起。使用的时候,只通过一条指令,就能够访问和计算多组数据,把最消耗时间的事情尽快做完。在计算机词汇里,这种指令集叫做SIMD(Single Instruction Multiple Data,单指令多数据)指令集。 大多数多媒体播放任务,使用SIMD技术都会带来更快的速度。 回到手机上,在ARM的世界里,由于日益增长的多媒体计需求,也出现了属于ARM自己的多媒体扩展指令集,它的名字叫做NEON。它可以帮助处理器加速任何格式视频的编解码,帮助显示芯片加
[单片机]
英国政府内部人士:Arm收购不会成功
据thisismoney报道,“白厅”的消息人士表示,英国相关部门的部长们认为,英国计算机芯片设计师 Arm 出售给一家美国公司的可能性不大,并欢迎其重返伦敦股市。 Arm 是英国科技行业的皇冠上的明珠之一,但在日本软银的所有下苦心经营,后者于 2016 年以 240 亿英镑的价格收购了该公司。 现在,软银正寻求以 300 亿英镑的价格将 Arm 出售给美国芯片巨头英伟达,但该交易面临反对和一系列监管调查。 如果监管机构阻止交易,有人呼吁这家科技公司回来并在伦敦上市。一位白厅消息人士说:“政府中的许多人认为这笔交易不会成功,并希望看到该公司重返伦敦证券交易所。” 这种观点得到了包括劳斯莱斯首席执行官和前 Arm 老板
[半导体设计/制造]
ARM裸机开发:I.MX6U官方SDK包使用
一、硬件平台: 正点原子I.MX6U阿尔法开发板 二、SDK包简介 NXP 官方为 I.MX6ULL 编写了 SDK 包,在 SDK 包里面 NXP 已经编写好了寄存器定义文件, 所以我们可以直接移植 SDK 包里面的文件来用,SDK 在 NXP 官网下载 此处我们下载 Window 版本的,选择一处位置安装 三、SDK包移植 SDK 的移植我们只要关注其中的寄存器封装头文件就行,包含寄存器信息的文件位置如下: fsl_common.h:位置:sdk目录devicesMCIMX6Y2driversfsl_common.h fsl_iomuxc.h: 位置:sdk目录devicesMCIMX6Y2drivers
[单片机]
<font color='red'>ARM</font>裸机开发:I.MX6U官方SDK包使用
ARM总线技术
ARM使用与X86不同的总线技术,一般X86系统采用PCI总线,嵌入式ARM采用片上总线 1、AMBA总线技术 ​AMBA(高级微控制器总线结构)最初包含:ASB(系统总线)和APB(外设总线),后提出AHB(高性能总线) AHB比ASB有更高的数据吞吐量,不同于ASB的双向总线设计,是基于集中多总线机制,可以自高时钟下运行并且具备64位和128位​宽度的总线
[单片机]
采用Arm TrustZone技术的32位MCU打造安全的 IoT终端
随着物联网(IoT)终端的蓬勃发展,安全有时被许多设计人员抛之脑后,这增加了泄漏知识产权(IP)和敏感信息的风险。为了满足日益增长的安全需求,Microchip Technology Inc.(美国微芯科技公司)日前推出全新的SAM L10和SAM L11 MCU系列。 全新的MCU系列基于Arm® Cortex®-M23内核,SAM L11提供适用于Armv8-M的Arm TrustZone® , 这一可编程环境可以在认证库(certified libraries)、IP和应用代码之间提供硬件隔离。Microchip通过加入芯片级的抗干扰、安全启动和安全密钥存储技术实现稳健的安全性,结合TrustZone技术可以保护客户应
[半导体设计/制造]
采用<font color='red'>Arm</font> TrustZone技术的32位MCU打造安全的 IoT终端
系统学习ARM之二 --ARM指令集
一、简介: 定义: ARM 指令集:ARM处理器能够运行的命令的集合。 特点: 所有ARM指令均为32-bits长 大部分为单周期指令 1T 所有指令都可以条件执行 采用 Load/Store 架构 --- load/store指令 mov r1,100 @ r1 =*(100) 把内存地址为100的单元格里的内容赋值给r1,ARM指令 不支持 mov r1,#100 @ r1=100 二、数据处理指令: 1. 指令: 算术指令: ADD ADC SUB SBC RSB RSC 逻辑指令: AND ORR EOR BIC 比较指令: CMP CMN TST TEQ
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved