ARM汇编编程基础之三-基本寻址方式与基本指令

发布者:Jinghua6666最新更新时间:2015-09-23 来源: eefocus关键字:ARM  汇编编程  寻址方式  基本指令 手机看文章 扫描二维码
随时随地手机看文章
要想进行ARM的汇编编程,首当其冲要知道最基本、最常用的指令,而要了解指令则必须要了解寻址方式。所以本文将聚焦在——基本寻址方式和基本指令。

首先,来看一看我们已经见过的2条指令:MOV pc, lr; BL addsub

最简单的汇编指令格式是操作码(例如:MOV、BL)和操作数(例如:pc, lr, addsub)。操作码易于理解,例如MOV表示将某个值从一处传送到另一处,BL表示跳转到某处;而操作数则表示一处和另一处到底是哪里(是在寄存器中还是内存中),要跳转的位置在哪里(或者是绝对地址或者是相对地址)。

操作数部分要解决的问题是:到哪里去获得操作数?因此就有了寻址方式的分类。基本上来讲,ARM共有8种寻址方式,本文我们了解其中最基本的3种寻址方式:寄存器寻址、立即数寻址、寄存器间接寻址。

1、寄存器寻址

MOV pc, lr 表示操作数来源于寄存器(pc和lr)。这种寻址方式,在指令的32位机器码中的地址码部分,存放的是寄存器(pc和lr)的编号,故称之为寄存器寻址。

2、立即数寻址

MOV pc, #64 表示将常数64放入寄存器pc,其中常数64被称为立即数。立即数寻址指令中的地址码部分就是操作数本身,也就是说,数据就包含在指令当中,取出指令也就取出了可以立即使用的操作数(故称为立即数)。

这里,可能大家会看出一个问题:由于立即数是位于32位机器码中的,而32位机器码中除了操作数外还有操作码,这就意味着不可能用全部32bit来表示立即数。事实上,ARM机器指令中,仅用了最低的12bit来表示立即数。那么我们自然推论立即数的范围是-2048——2047,这意味着MOV pc, #8192这样的指令是非法的。但事实情况并非如此,MOV pc,#8192是合法且能正常运行的。真实情况是,ARM机器指令可以表示的立即数范围是-2^31--2^31-1,只不过它只能表示这其中的2^12个数而已。ARM是这样用12bit来表示1个立即数的:将12bit划分为2部分——高4位和低8位,将低8位补0扩展为32位,然后循环右移X位(X = 高4位表示的无符号整数*2),例如:如果32位机器码中低12bit为0x512,则其表示的立即数为0x04800000

image

这里,请大家不妨现在先思考2个问题,我们将在后续文章中予以解答:

1)、为什么ARM要这样设计,而不是按照我们最常见的想法(即:12bit就表示-2^11 -- 2^11-1中的数)

2)、如果我们需要mov r0, #10000这样的指令,应该怎么办?(常数10000不能按照如上的方法进行表示)

3、寄存器间接寻址

寄存器间接寻址指令中的地址码给出的是一个通用寄存器的编号,所需的操作数保存在寄存器指定地址的存储单元中,即寄存器为操作数的地址指针。例如:

LDR R0, [R2]表示将R2的值作为内存地址,到该内存处取出存放的数,放到寄存器R0中

image image

       执行LDR R0, [R2]前的情况                     执行LDR R0, [R2]后的情况

 

了解了基本的寻址方式后,我们现在来看一看最常用的汇编指令

1、单寄存器加载指令。主要有

加载字指令:LDR r0, [r1],将内存中的一个字(4个字节)加载到寄存器r0中

加载字节指令:LDRB r0, [r1],将内存中的一个字节加载到寄存器r0中

有符号数加载字节指令:LDRSB r0, [r1],这条指令与上一条指令的不同之处在于,由于加载的是一个字节,而不是一个字,所以需要确定寄存器r0的高24bit是什么。对于上一条指令,r0的高24bit补0,而本条指令,r0的高24bit补符号位,也就是补r0的bit7

2、单寄存器存储指令。主要有

存储字指令:STR r0, [r1],将r0中的值存储到内存的4个字节中

存储字节指令:STRB r0, [r1],将r0的低8bit存储到内存的1个字节中[page]

3、分支指令,共3条:B、BL、BX

B label :跳转到标号label处,也就是说在该条b指令执行后,下一条执行的指令是标号label处的指令。

BL label :与B指令的功能相同,也实现跳转,不同之处在于,bl在跳转的同时还要将返回地址(bl指令的下一条指令的地址)保存到lr中

BX r0 :将r0的值作为地址,跳转到该地址处,并根据r0的值决定是否在ARM和thumb态之间进行切换。(关于BX指令,以及ARM态和thumb态的切换,详见“ARM程序与thumb程序的切换”一文)

特别说明:

B和BL指令,其跳转范围限制在当前指令的±32M字节地址内(ARM指令为字对齐,最低2位地址固定为0)。这是为什么呢?详见“杂项解释”一文。

4、数据处理指令

MOV r0, r1:将r1的值赋给r0

ADD(SUB) r0, r1, r2:将r1的值加上(减去)r2的值,结果存放到r0中

AND(ORR, EOR) r0, r1, r2:将r1的值与(或、异或)r2的值,结果存放到r0中

CMP r1, r2:比较r1与r2值的大小

特别需要说明的问题:

指令CMP r1,r2,其作用细节是:执行r1-r2的操作,如果结果为负数,则置位CPSR的N位,清零Z位;结果为0,则清零CPSR的N位,置位Z位;结果为正,则清零CPSR的N位,清零Z位。但r1-r2的结果并不保存。CMP指令通常用于分支跳转。例如,如下的C程序

int i,j;

if (i == j) {

i++;

} else {

j++;

}

如果使用汇编语句改写的话,就应该写为:

使用ldr指令将变量i的值放入r0

使用ldr指令将变量j的值放入r1

cmp r0, r1

addeq r0, r0, #1

使用streq指令将r0的值放入变量i中

beq label

add r1, r1, #1

使用str指令将r1的值放入变量j中

label   其它代码

……

其中addeq, streq, beq这几条指令,是add, str, b指令的条件执行版本。讲到这里就不得不讲解一下什么是条件执行了。ARM指令集的所有指令均支持条件执行,条件执行指的是,指令可以根据执行时的情况(CPSR的条件代码标志位)决定自身是否被执行。eq表示如果CPSR的Z位为1(对于本程序,实际上就是r0的值与r1的值相等,因为cmp会根据r0与r1的值设置Z位)的情况下,该指令要执行,否则不执行。

其它条件助记符如下:

条件助记符 标志 含义
EQ Z=1 相等
NE Z=0 不相等
CS/HS C=1 无符号数大于或等于
CC/LO C=0 无符号数小于
MI N=1 负数
PL N=0 正数或零
VS V=1 溢出
VC V=0 没有溢出
HI C=1,Z=0 无符号数大于
LS C=0,Z=1 无符号数小于或等于
GE N=V 有符号数大于或等于
LT N!=V 有符号数小于
GT Z=0,N=V 有符号数大于
LE Z=1,N!=V 有符号数小于或等于
AL 任何 无条件执行 (指令默认条件)
NV 任何 从不执行(不要使用)

关键字:ARM  汇编编程  寻址方式  基本指令 引用地址:ARM汇编编程基础之三-基本寻址方式与基本指令

上一篇:ARM汇编编程基础之一-寄存器
下一篇:ARM汇编编程基础之四-ARM汇编伪操作

推荐阅读最新更新时间:2024-03-16 14:33

Maxim 全新Arm Cortex-M4F微控制器可有效提高设备正常运行时间
Maxim Integrated Products, Inc (NASDAQ: MXIM)宣布推出MAX32670低功耗Arm® Cortex®-M4微控制器(MCU),器件带有浮点运算单元,在有效降低功耗、缩小尺寸的同时,提高系统可靠性,理想用于工业、健康和及物联网(IoT)。器件通过误码校正(ECC)保护所有嵌入式存储器,包括闪存和SRAM,提供可靠性最高的MCU。 在许多工业和IoT应用中,高能量微粒或其他恶劣条件会破坏正常工作时的存储器,造成其位翻转(特别是当半导体工艺降至40nm,甚至更低的情况下)。从而中断MCU工作,并产生错误甚至危险的结果。为防止此类灾难性后果的发生,MAX32670利用ECC保护其整个存
[嵌入式]
Maxim 全新<font color='red'>Arm</font> Cortex-M4F微控制器可有效提高设备正常运行时间
基于ARM的电磁流量计设计
0  引言 电磁流量计是一种测量导电介质体积流量的计量仪表,具有测量精度高、稳定性好、可靠性高等特点。电磁流量计除可测量一般导电液体的流量外,还可测量液固两相液体、高粘度液体及盐类、强酸、强碱液体的体积流量,可广泛应用于水泥、化工、轻纺、冶金、矿山、造纸、医药、给排水、食品饮料、环保等工业技术部门,其产品的性能、质量和可靠性对上述企业的经济效益有着重要的影响。 嵌入式系统( Embedded Sy stem) 是以应用为中心和以计算机技术为基础的,并且软硬件是可以裁减的,能满足应用系统对功能、可靠性、成本、体积、功耗等指标的严格要求的专用计算机系统。它是面向用户、面向产品、面向应用的专用系统,与通用的计算机系统相比具有如下
[嵌入式]
基于ARM的智能家居控制通信控制站的设计与实现
0 引言 物体信息化是现代社会信息化建设的“催化剂”和“增倍器”。只有走集成整合信息技术以及信息数据之路,企业的信息化建设才能真正发挥作用,才能进一步推动信息建设上水平。现代物体信息化的发展,直接刺激了新生事物的生长,物联网的出现,让IT业充满了挑战。 智能家居控制系统可以定义为一个过程或者一个系统。利用先进的计算机技术、网络通讯技术、综合布线技术、将与家居生活有关的各种子系统,有机地结合在一起,通过统筹管理,让家居生活更加舒适、安全、有效。与普通家居相比,智能家居不仅具有传统的居住功能,提供舒适安全、高品位且宜人的家庭生活空间。还将原来的被动静止结构转变为具有能动智慧的工具,提供全方位的信息交换功能,帮助家庭与外部保持信息交
[单片机]
基于<font color='red'>ARM</font>的智能家居控制通信控制站的设计与实现
基于ARM Cortex-M4核的低功耗MCU--LPCXpresso54628详解
NXP公司的LPCXpresso54628是基于ARM Cortex-M4核的低功耗MCU,具有丰富外设,非常低功耗和增强的调试特性.ARM Cortex-M4 CPU采用3级流水线,具有单独本地指令和数据总线以及用于外设的第三总线的哈佛架构,支持单周期数字信号处理和SIMD指令,内核还集成了硬件浮点处理器.LPC546xx系列产品包括512KB闪存,200KB SRAM,多达16kB EEPROM,四个SPI闪存接口(SPIFI),高速和全速USB主和设备控制器,以太网AVB,LCD控制器,智能卡接口,SD/MMC,CAN FD和外接存储器控制器(EMC),带PDM麦克风接口和I2S的DMIC子系统,五个通用计时器, SCTIm
[单片机]
基于<font color='red'>ARM</font> Cortex-M4核的低功耗MCU--LPCXpresso54628详解
ARM处理器:“冯·诺依曼”体系结构和“哈佛”体系结构
保存在存储器中的内容可以是程序,也可以是数据。程序是ARM处理器可以运行的指令代码,数据是指令在运行中用到的操作数或者变量。 1、程序存储 ARM处理器支持两种指令,一种是ARM汇编指令,一种是Thumb汇编指令。ARM汇编指令是32位长,即每条ARM汇编指令都是由四个字节的存储空间保存,所以ARM处理器在执行地址a的ARM汇编指令时,会从地址a + 4取下一条指令。Thumb汇编指令是16位长,即每条Thumb汇编指令都是由两个字节的存储空间保存,所以ARM处理器在执行地址a的Thumb汇编指令时,会从地址a + 2取下一条指令。 ARM处理器可以执行两种格式的指令,运行不同格式的汇编指令在执行和取指方面有很大不同。为了区分
[单片机]
<font color='red'>ARM</font>处理器:“冯·诺依曼”体系结构和“哈佛”体系结构
ARM JLINK与JTAG的不同
有以下两种做法: 1.在电脑上写一个服务程序,把IAR、KEIL和ADS中的RDI命令解析成相关的JTAG协议, 然后通后一个物理转换接口(注意,这个转换只是电气 物理层上的转换,就像RS232那样的作用)发送你的的目标板。H-JTAG就是这样的。H-JTAG的硬件就仅是一个物理电平的转换接口,所以很简单。 而电脑中装的h-JTAG软件就是前面说到的服务程序,负责协议转换的。 2.做一个板,用此板直接接收来自IAR、KEIL和ADS等软件的调试命令,由此板做RDI- JTAG协议的转换。然后与目标板通信,这就是JLINK的工作原理。 由上可以看出H-JTAG由于是软件作协议转换的,所以速度较慢,但是硬件简单。而第二种方
[单片机]
Arm中国合资公司四月成立,命名Arm mini China,中资控股
集微网消息,传Arm预定四月分割中国业务,将成立名为「Arm mini China」的新公司。 「Arm mini China」成立后,未来对IP授权可能采取不同计价标准。 日本软银集团于2016年七月以243亿英镑收购原本是英国公司的ARM(现已重新更名为Arm)。 由于软银和Arm的核心业务差异极大,加上交易本益比高达七十倍,当时震撼全球科技圈。 去年五月14日Arm在北京与厚安创新基金签署协议,双方拟在深圳成立合资公司,由Arm提供芯片设计所需知识产权、技术支持和培训,但由中方控股。 目前市场传出Arm和中资合作计划已经敲定,预定四月就会切割中国业务成立名为「Arm mini China」的新公司,其中Arm持股会低于五成,
[嵌入式]
基于MAX194在ARM单片机系统中的设计
火力发电厂和大型工业锅炉,通常采用向炉水中添加少量磷酸盐以防止钙、镁水垢的生成,磷酸根浓度不够,不能有效防止结垢,磷酸根离子含量过高,会导致炉水的pH值变高。因此磷酸根离子浓度是炉水检测的重要参数。ARM处理器具备高性能、低功耗、低成本等优点,将其应用于在线磷酸根离子分析仪的管理控制系统,可以提高磷酸根分析仪的处理速度和精度。 1 结构及测量原理简介 磷酸根离子分析仪整体结构包括光路系统、水路系统和管理控制系统三个部分。 光路系统主要包括:专用的单色LED冷光源、比色皿和光电传感器。 水路系统由比色皿、柱塞泵、多通道切换阀、流通池、样水/标液切换阀、流量计、排污阀、溢流管等组成。 利用化学吸光法原理,即在一定的
[单片机]
基于MAX194在<font color='red'>ARM</font>单片机系统中的设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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