ARM-汇编指令集(总结)

发布者:创新之星最新更新时间:2019-12-03 来源: eefocus关键字:ARM  汇编  指令集 手机看文章 扫描二维码
随时随地手机看文章

ARM汇编指令集

指令、伪指令

(汇编)指令:   是机器码的助记符,经过汇编器编译后,由CPU执行。 

(汇编)伪指令:用来指导指令执行,是汇编器的产物,最终不会生成机器码。


有两种不同风格的ARM指令

1).ARM官方的ARM汇编风格:指令一般用大写,Windows中的IDE开发环境。

2).GNU风格的ARM汇编:指令一般用小写。


ARM汇编的特点

1. LDR/STR架构

1).ARM采用RISC架构,CPU本身不能直接读取内存,而需要先将内存中内容加载入CPU中通用寄存器中才能被CPU处理。
2).ldr(load register)指令将内存内容加载入通用寄存器
3).str(store register)指令将寄存器内容存入内存空间中。
4).ldr/str组合用来实现 ARM CPU和内存数据交换。

2. 至此8种寻址方式

1).寄存器寻址mov r1, r2。
2).立即(立即数)寻址 mov r0, #0xFF00。
3).寄存器移位寻址 mov r0, r1, lsl #3。
4).寄存器间接寻址 ldr r1, [r2] 表示内存,内存地址存在r2这个寄存器中,把内存地址里的值给r1。

5).基址变址寻址ldr r1, [r2, #4]内存地址在r2+4里面。

6).多寄存器寻址 ldmia r1!, {r2-r7, r12}一次访问多个寄存器。
7).堆栈寻址 stmfd sp!, {r2-r7, lr}。
8).相对寻址      beq flag。

3. 指令后缀

同一指令经常附带不同后缀,变成不同的指令。经常使用的后缀有:
B(byte)功能不变,操作长度变为8位
H(half word)功能不变,长度变为16位
S(signed)功能不变,操作数变为有符号
如 ldr ldrb ldrh ldrsb ldrsh
S(S标志)功能不变,影响CPSR标志位
如 mov和movs movs r0, #0

4. 条件执行后缀

条件后缀是否成立取决于当前代码的前面的代码。

条件后缀只影响当前代码的执行。

5. 多级指令流水线

为增加处理器指令流的速度,ARM使用多级流水线.,下图为3级流水线工作原理示意图。(S5PV210使用13级流水线,ARM11为8级)
允许多个操作同时处理,而非顺序执行。

1).PC指向正被取指的指令,而非正在执行的指令


数据传输与跳转指令详解

1. 数据处理指令

数据传输指令 mov mvn
算术指令 add sub rsb adc sbc rsc 
逻辑指令 and orr eor bic
比较指令 cmp cmn tst teq
乘法指令 mvl mla umull umlal smull smlal
前导零计数 clz


2. cpsr访问指令

mrs & msr
mrs用来读psr,msr用来写psr
CPSR寄存器比较特殊,需要专门的指令访问,这就是mrs和msr。

3. 跳转(分支)指令

b & bl & bx
b 直接跳转(就没打开算返回)
bl branch and link,跳转前把返回地址放入lr中,以便返回,以便用于函数调用
bx跳转同时切换到ARM模式,一般用于异常处理的跳转。

4. 访存指令

ldr/str & ldm/stm & swp
单个字/半字/字节访问 ldr/str
多字批量访问  ldm/stm
swp r1, r2, [r0]
swp r1, r1, [r0]

5. 软中断指令

swi(software interrupt)
软中断指令用来实现OS中系统调用

ARM汇编中的立即数

合法立即数与非法立即数
ARM指令都是32位,除了指令标记和操作标记外,本身只能附带很少位数的立即数。因此立即数有合法和非法之分。
合法立即数:经过任意位数的移位后非零部分可以用8位表示的即为合法立即数。


协处理器与协处理器指令集

6.协处理器cp15操作指令

mcr & mrc
mrc用于读取CP15中的寄存器
mcr用于写入CP15中的寄存器

7.arm寻址方式

1). 寄存器:    MOV R1,R2 ; R2->R1

2). 立即数:    SUBS R0,R1,#1; R0=R1-1

3). 寄存器移位:MOV R0,R2,LSL #3 ;R2左移三位->R0 

4). 间接寻址:  LDR R1,[R2] ; 装载R2指向的内存数值至R1

5). 基址寻址:  LDR R2,[R3,#0x0F] ;R3+0x0F作为地址,将所

 

指向的置装入R2.R3的值不改变

6). 多寄存器寻址: LDMIA R1!,{R2-R7,R12} ; 将R1所指向的内

 

存块依次装入{}中的寄存器。

STMIA R0!,{R3-R6,R10} ;将{}列出的寄存器里的值依次填入R0所指向的内存块。

7). 相对寻址: BL XXX ;跳转 

BEQ XXX ;条件跳转

协处理器解析:

SoC内部另一处理核心,协助主CPU实现某些功能,被主CPU调用执行一定任务。
ARM设计上支持多达16个协处理器,但是一般SoC只实现其中的CP15.(cp:coprocessor)
协处理器和MMU、cache、TLB等处理有关,功能上和操作系统的虚拟地址映射、cache管理等有关。


MRC & MCR的使用方法

mcr{}   p15, , , , , {}
opcode_1:对于cp15永远为0
Rd:ARM的普通寄存器
Crn:cp15的寄存器,合法值是c0~c15
Crm:cp15的寄存器,一般均设为c0
opcode_2:一般省略或为。

 

ldm/stm与栈的处理

为什么需要多寄存器访问指令

ldr/str每周期只能访问4字节内存,如果需要批量读取、写入内存时太慢,解决方案是stm/ldm
ldm(load register mutiple)
stm(store register mutiple)

举例(uboot start.S 537行)

stmia sp, {r0 - r12}
将r0存入sp指向的内存处(假设为0x30001000);然后地址+4(即指向0x30001004),将r1存入该地址;然后地址再+4(指向0x30001008),将r2存入该地址······直到r12内容放入(0x3001030),指令完成。
一个访存周期同时完成13个寄存器的读写


后缀的种类:

ia(increase after)先传输,再地址+4
ib(increase before)先地址+4,再传输
da(decrease after)先传输,再地址-4
db(decrease before)先地址-4,再传输
fd(full decrease)满递减堆栈
ed(empty decrease)空递减堆栈
fa(·······) 满递增堆栈
ea(·······)空递增堆栈


四种栈解析:

空栈:栈指针指向空位,每次存入时可以直接存入然后栈指针移动一格;而取出时需要先移动一格才能取出。
满栈:栈指针指向栈中最后一格数据,每次存入时需要先移动栈指针一格再存入;取出时可以直接取出,然后再移动栈指针。
增栈:栈指针移动时向地址增加的方向移动的栈。
减栈:栈指针移动时向地址减小的方向移动的栈。


!的作用:

ldmia r0, {r2 - r3}
ldmia r0!, {r2 - r3}

感叹号的作用就是r0的值在ldm过程中发生的增加或者减少最后写回到r0去,也就是说ldm时会改变r0的值。


^的作用:

ldmfd sp!, {r0 - r6, pc}
ldmfd sp!, {r0 - r6, pc}^


^的作用:在目标寄存器中有pc时,会同时将spsr写入到cpsr,一般用于从异常模式返回。


总结:批量读取或写入内存时要用ldm/stm指令。
各种后缀以理解为主,不需记忆,最常见的是stmia和stmfd。
谨记:操作栈时使用相同的后缀就不会出错,不管是满栈还是空栈、增栈还是减栈。

 

常用gun伪指令:

global _start @ 给_start外部链接属性
.section .text @ 指定当前段为代码段
.ascii .byte .short .long .word 
.quad .float .string @ 定义数据
.align 4 @ 以4字节对齐
.balignl 16 0xabcdefgh @ 16字节对齐填充
.equ @ 类似于C中宏定义


偶尔会用到的gun伪指令

.end @标识文件结束
.include @ 头文件包含
.arm / .code32 @声明以下为arm指令
.thumb / .code16 @声明以下为thubm指令

重要的几个伪指令

ldr 大范围的地址加载指令
adr 小范围的地址加载指令
adrl 中等范围的地址加载指令
nop 空操作
ARM中有一个ldr指令,还有一个ldr伪指令
一般都使用ldr伪指令而不用ldr指令

adr与ldr

adr编译时会被1条sub或add指令替代,而ldr编译时会被一条mov指令替代或者文字池方式处理;
adr总是以PC为基准来表示地址,因此指令本身和运行地址有关,可以用来检测程序当前的运行地址在哪里
ldr加载的地址和链接时给定的地址有关,由链接脚本决定。

关键字:ARM  汇编  指令集 引用地址:ARM-汇编指令集(总结)

上一篇:关于ARM的内核架构
下一篇:nandflash的读写(2440)

推荐阅读最新更新时间:2024-11-12 19:28

基于ARM的高分辨率压电陶瓷驱动电源设计方案
  0 引言   压电陶瓷驱动器(PZT)是微位移平台的核心,其主要原理是利用压电陶瓷的逆压电效应产生形变,从而驱动执行元件发生微位移。压电陶瓷驱动器具有分辨率高、响应频率快、推力大和体积小等优点,在航空航天、机器人、微机电系统、精密加工以及生物工程等领域中得到了广泛的应用。然而压电陶瓷驱动器的应用离不开性能良好的压电陶瓷驱动电源。要实现纳米级定位的应用,压电陶瓷驱动电源的输出电压需要在一定范围内连续可调,同时电压分辨率需要达到毫伏级。因此压电陶瓷驱动电源技术已成为压电微位移平台中的关键技术。   1 压电驱动电源的系统结构   1.1 压电驱动电源的分类   随着压电陶瓷微位移定位技术的发展,各种专用于压电陶瓷微位移机
[单片机]
基于<font color='red'>ARM</font>的高分辨率压电陶瓷驱动电源设计方案
ARM:发展专用AI处理器还太早,明年将专攻物联网应用
ARM全球行销和策略联盟副总裁Ian Ferguson揭露明年战略时直言:ARM现在谈AI还太早,明年不会推出专用AI晶片设计,将专攻IoT市场 人工智慧AI已成为今年最火红技术之一,更成为许多大型科技和网路公司,如Google、微软、亚马逊、脸书等,明年全力投入发展的一大重点,就连处理器龙头英特尔也计画明年推出AI专用伺服器晶片,来抢占AI市场商机。不过ARM全球行销和策略联盟副总裁Ian Ferguson近日来台揭露明年战略时则直言:“现在谈AI还太早,明年并不会推出专用AI晶片设计,而将专攻IoT市场。” 发展ARM架构AI晶片还要再等等 尽管AI风潮正席卷全世界,不少大型科技和网路公司开始将AI与自家服务结合,做为电
[手机便携]
基于DDS的任意波信号发生器机交互系统设计
1 引言 信号源作为一种基本电子设备无论是在教学、科研还是在工程技术保障中,都有着广泛的使用。随着科学技术的发展和DDS技术的成熟,基于DDS的任意波信号发生器已成为信号源的主流。目前DDS任意波信号发生器广泛使用中文液晶显示器已成为一个趋势。 本文以Hynix公司生产的HMS30C7202工业级处理器作为控制器,以矩阵键盘作为输入设备,以AMPIRE公司生产的AM-320240LTNQW-00H TFT LCD显示屏作为显示输出设备,研究设计了相应的硬件电路与显示驱动程序,在此基础上完成了人机交互中英文显示系统的设计。 2 显示系统总体方案设计 显示系统由硬件和软件两部分构成,如图1、图2所示。 硬件
[工业控制]
汇编语言的交通灯程序
汇编语言的交通灯程序,单片机采用51单片机,基本完成控制两组交通指示灯交替亮,每个路口有左拐、直行及行人三种指示灯。直行灯设有红、黄、绿三种颜色。非机动车与汽车共用左拐和直行灯。首先东西向直行绿灯和行人灯亮1分钟,左转灯亮30秒,黄灯亮5秒(同时南北向红灯亮95秒),然后东西向红灯亮95秒钟(同时首先南北向直行绿灯和行人灯亮1分钟,左转灯亮30秒,黄灯亮5秒),然后东西向的绿灯亮,依次类推。 每次绿灯亮的时候,对应的行人灯亮。60S/30S/5S/60S/30S/5S 东西道:绿和行人/左转/黄/红/红/红 南北道:红/红/红/绿和行人/左转/黄 行人灯亮的时候有声音提示盲人能通过。突发交通事
[单片机]
Arm为智能摄像头提供安全的计算机视觉
Arm为智能摄像头提供安全的计算机视觉 Arm物联网兼嵌入式事业部副总裁 Mohamed Awad Arm物联网兼嵌入式事业部业务拓展副总裁 马健 中国有句古话,眼观六路,耳听八方,敏锐的观察和感知能力是人类智慧的基础。传统的摄像头只有感知功能,并不能理解图像所描述的人和事物。计算机视觉利用人工智能(AI)让智能摄像头等设备变得聪明,可以解释和理解图像中发生的事情。通过科技重新打造一个与人眼一样强大的传感器,为计算机执行以往需要人类视觉才能进行的任务,开启了广泛而多样的用例,因此计算机视觉正迅速成为物联网获取真实世界数据并处理数据的最重要方式之一。 从计算停车场的汽车数量,到监控零售商店的客流量,或是找出生产线上的
[传感器]
孙正义:20年内ARM芯片年产量可达1万亿片
软银集团股份有限公司(SoftBank Group Corp., 9984.TO)首席执行长孙正义(Masayoshi Son)周四表示,预计未来20年内ARM Holdings PLC (ARM.LN)芯片的年产量将达到1万亿片。此前软银宣布将收购这家英国芯片设计商。 孙正义在东京的一个软银活动上发表演讲时称,20年内,ARM架构将分布在全球各地的1万亿片芯片中,这些芯片用于迅速收集所有的实时数据。 孙正义表示,去年ARM芯片约150亿片,意味着全世界平均每个人拥有2片ARM芯片。 孙正义周四称,软银专注于三大领域:人工智能、智能机器人和 物联网 。 孙正义周四还宣布,软银和本田汽车(Hon
[单片机]
按键的多次击键组合判别技巧汇编源程序
有时在设计中,往往要用一个按键来输入多种信息。如:单击/双击/三击、短击/长击、 还有各种组合击键方式。可以用以下程序来做。 如果按键闭合时间 500MS,判断为一次短击(0); 如果按键闭合时间 500MS,判断为一次长击(1); 两次击键时间间隔应 700MS,如果按键释放后700MS内无键按下,则结束读键。 读键完毕返回一个键号值KEY_NUM。其意义如下: KEY_NUM 意义 00000000 无键按下过 00000001 无意义 00000010 单次短击 00000011 单次长击 00000100 短击 + 短击 00000101 短击 + 长击 00000110 长击 + 短击 0000011
[单片机]
AMD发布G系列X嵌入式芯片 ARM血液流入AMD
    AMD提供嵌入式处理器特别针对专业应用并不稀奇,像是博彩、娱乐系统等等,不过这次最新发布的G系列嵌入式处理器却展示了一些意想不到的东西。芯片上不仅采用 4颗Jaguar核心,而且还有Radeon 8000 GPU和I/O模块。比较关键的问题在于右下角的“X”logo图样,这表示这是来自AMD的x86架构芯片,可关键问题是AMD本来就一直生产x86芯 片,何以特别标注一个X呢? AMD的Arun Iyengar表示,这是为AMD的ARM架构嵌入式系列处理器做好准备,此后标注X标志的x86芯片为9W至25W的功耗产品,而未来标注A字样的版本则在功耗上低于3W。“我们的产品系列上即将同时拥有x86和ARM架构的处理器产品”。
[手机便携]
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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