arm条件执行

发布者:龙腾少年最新更新时间:2016-04-15 来源: eefocus关键字:arm  条件执行 手机看文章 扫描二维码
随时随地手机看文章
条件执行

指令格式
ARM 处理器的一个非常特殊的特征是它的条件执行。我们指的不是基本的如果进位则分支,ARM 使这个逻辑阶段进一步深化为如果进位则 XXX - 这里的 XXX 是任何东西。
为了举例,下面是 Intel 8086 处理器分支指令的一个列表:
JA Jump if Above
JAE Jump if Above or Equal
JB Jump if Below
JBE Jump if Below or Equal
JC Jump if Carry
JCXZ Jump if CX Zero (CX is a register that can be used for loop counts)
JE Jump if Equal
JG Jump if Greater than
JGE Jump if Greater than or Equal
JL Jump if Less than
JLE Jump if Less Than or Equal
JMP JuMP
JNA Jump if Not Above
JNAE Jump if Not Above or Equal
JNB Jump if Not Below
JNBE Jump if Not Below or Equal
JNC Jump if No Carry
JNE Jump if Not Equal
JNG Jump if Not Greater than
JNGE Jump if Not Greater than or Equal
JNL Jump if Not Less than
JNLE Jump if Not Less than or Equal
JNO Jump if Not Overflow
JNP Jump if Not Parity
JNS Jump if Not Sign
JNZ Jump if Not Zero
JO Jump if Overflow
JP Jump if Parity
JPE Jump if Parity Even
JPO Jump if Parity Odd
JS Jump if Sign
JZ Jump if Zero
80386 添加了:
JECXZ Jump if ECX Zero
作为对比,ARM 处理器只提供了:
B 分支
BL 带连接的分支
但 ARM 提供了条件执行,你可以不受这个表面上不灵活的方式的限制:
BEQ Branch if EQual
BNE Branch if Not Equal
BVS Branch if oVerflow Set
BVC Branch if oVerflow Clear
BHI Branch if HIgher
BLS Branch if Lower or the Same
BPL Branch if PLus
BMI Branch if MInus
BCS Branch if Carry Set
BCC Branch if Carry Clear
BGE Branch if Greater than or Equal
BGT Branch if Greater Than
BLE Branch if Less than or Equal
BLT Branch if Less Than
BLEQ Branch with Link if EQual
....
BLLT Branch with Link if Less Than
还有两个代码,
AL - ALways,缺省条件所以不须指定
NV - NeVer,不是非常有用。你无论如何不要使用这个代码...
当你发现所有 Bxx 指令实际上是同一个指令的时候,紧要关头就到了。接着你会想,如果你可以在一个分支指令上加上所有这些条件,那么对一个寄存器装载指令能否加上它们? 答案是可以。
下面是可获得的条件代码的列表:
EQ : 等于
如果一次比较之后设置了 Z 标志。
NE : 不等于
如果一次比较之后清除了 Z 标志。
VS : 溢出设置
如果在一次算术操作之后设置了 V 标志,计算的结果不适合放入一个 32bit 目标寄存器中。
VC : 溢出清除
如果清除了 V 标志,与 VS 相反。
HI : 高于(无符号)
如果一次比较之后设置了 C 标志并清除了 Z 标志。
LS : 低于或同于(无符号)
如果一次比较操作之后清除了 C 标志或设置了 Z 标志。
PL : 正号
如果一次算术操作之后清除了 N。出于定义‘正号’的目的,零是正数的原因是它不是负数...
MI : 负号
如果一次算术操作之后设置了 N 标志。
CS : 进位设置
如果一次算术操作或移位操作之后设置了 C 标志,操作的结果不能表示为 32bit。你可以把 C 标志当作结果的第 33 位。
CC : 进位清除
与 CS 相反。
GE : 大于或等于(有符号)
如果一次比较之后...
设置了 N 标志并设置了 V 标志
或者...
清除了 N 标志并清除了 V 标志。
GT : 大于(有符号)
如果一次比较之后...
设置了 N 标志并设置了 V 标志
或者...
清除了 N 标志并清除了 V 标志
并且...
清除了 Z 标志。
LE : 小于或等于(有符号)
如果一次比较之后...
设置了 N 标志并清除了 V 标志
或者...
清除了 N 标志并设置了 V 标志
并且...
设置了 Z 标志。
LT : 小于(有符号)
如果一次比较之后...
设置了 N 标志并清除了 V 标志。
或者...
清除了 N 标志并设置了 V 标志。
AL : 总是
缺省条件,所以不用明显声明。
NV : 从不
不是特别有用,它表示应当永远不执行这个指令。是穷人的 NOP。
包含 NV 是为了完整性(与 AL 相对),你不应该在你的代码中使用它。
有一个在最后的条件代码 S,它以相反的方式工作。当用于一个指令的时候,导致更改状态标志。这不是自动发生的 - 除非这些指令的目的是设置状态。例如:
ADD R0, R0, R1
ADDS R0, R0, R1
ADDEQS R0, R0, R1
第一个例子是一个基本的加法(把 R1 的值增加到 R0),它不影响状态寄存器。
第二个例子是同一个加法,只不过它导致更改状态寄存器。
最后一个例子是同一个加法,更改状态寄存器。不同在于它是一个有条件的指令。只有前一个操作的结果是 EQ (如果设置了 Z 标志)的时候它才执行。
下面是条件执行的一个工作中的例子。你把寄存器 0 与存储在寄存器 10 中内容相比较。如果不等于 R10,则调用一个软件中断,增加它并分支回来再次做这些。否则清除 R10 并返回到调用它的那部分代码(它的地址存储在 R14)。
\ 条件执行的一个例子
.loop ; 标记循环开始位置
CMP R0, R10 ; 把 R0 与 R10 相比较
SWINE &40017 ; 不等于: 调用 SWI &40017
ADDNE R0, R0, #1 ; 向 R0 加 1
BNE loop ; 分支到 'loop'
MOV R10, #0 ; 等于 : 设置 R10 为零
LDMFD R13!, {R0-R12,PC} ; 返回到调用者
注解:
SWI 编号就象我写的这样。在 RISC OS 下,它是给 Econet_DoImmediate 的编号。不要字面的接受它,这只是一个例子!
你可能以前没见过 LDMFD,它从栈中装载多个寄存器。在这个例子中,我们从一个完全正式的栈中装载 R0 至 R12 和 R14。关于寄存器装载和存储的更多信息请参阅 str.html。
我说要装载 R14。那么为什么要把它放入 PC 中? 原因是此时 R14 存储的值包含返回地址。我们也可以采用:
LDMFD R13!, {R0-R12,R14}
MOV PC, R14
但是直接恢复到 PC 中可以省略这个 MOV 语句。
最后,这些寄存器很有可能被一个 SWI 调用所占用(依赖于在调用期间执行的代码),所以你最好把你的重要的寄存器压入栈中,以后在恢复它们。

关键字:arm  条件执行 引用地址:arm条件执行

上一篇:ARM汇编指令:.align理解和用法
下一篇:STM32 printf函数详解

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

基于ARM核和CAN总线的煤矸石分选系统
  引言   随着嵌入式技术的不断发展,高性能、低功耗、低价格的32位RISC芯片的ARM微控制器呈现出强劲的发展趋势,嵌入式系统和现场总线技术结合,结合二者的优点,为传统的选煤技术提供了新的改造方案。将嵌入式技术和现场总线技术相互融合,设计了一种新的煤块和矸石在线识别与自动分选系统。   煤矸石在线识别与自动分选系统   煤块和矸石在线识别与自动分选系统的原理框图如图1所示。根据选煤工艺要求,本系统主要由下面三大部分构成: 图1 煤矸石在线自动分选系统框图   (1)检测部分:由进料斗、输送带、CCD摄像头、图像数据采集电路等组成。开采出来的原煤常含有矸石,必须将矸石从传送带上挑选出来。CCD摄像头将煤与矸石图像送
[单片机]
基于<font color='red'>ARM</font>核和CAN总线的煤矸石分选系统
ARM基础知识教程六
简介:ARM基础知识- ARM映像文件 1.ELF格式文件的结构 1.1映像文件组成部分 **一个映像文件有一个或多个域组成 **每个域包含一个或多个输出段 **每个输出段包含一个或多个输入段 **各输入段中包含了目标文件中的代码和数据 输入段中包含了四类内容:代码、已经初始化的数据、未经初始化的存储区域、内容初始化成0的存储区域。每个输入段有相应的属性,可以为只读的(RO)、可读写的(RW)以及初始化成0的(ZI)。ARM连接器根据个输入段的属性将这些输入段分组,再组成不同的输出段及域。 一个输出段中包含了一系列的具有相同的RO、RW和ZI属性的输入段。输出段的属性与其中包含的输入段的属性相同。在一个输出段的内
[单片机]
产业复苏在即,MCU期待蛰伏后的新活力
高交会电子展系列技术会议之一的MCU技术创新与应用大会2009近日完美谢幕,超过500名业界精英齐聚一堂,和iSuppli、 恩智浦、ARM、意法半导体、中国软件行业协会、康佳、金凯博、盛扬,以及海尔集成电路的专家一起,分享了MCU最新产品、技术及发展趋势。 随着全球经济复苏和电子设备需求的回升,中国MCU市场有望将在2010年复苏,本次研讨会上,iSuppli行业分析师孔晓明在他题为“中国MCU市场发展趋势”的演讲中,就与大家分享了这一观点,他乐观预测:整个半导体发展形势在今年非常恶劣。从1999年开始到2013年,对半导体产业有两个低谷,第一个低谷是2001年互联网泡沫,但是在2001年大家可以看到中国整个的半导
[单片机]
基于ARM微处理器的十回路智能配电监控单元的设计
0 引言 配电自动化技术正朝着数字化、智能化、网络化、多功能的方向飞速发展。本文以内含ARM7TDMI—STM CPU的微控制器LPC2132芯片作为系统主控制器,针对电力系统数据信号的采集和数据通信,以及电力系统状态监测为研究主题,研究设计出了一种具备智能配电,并可同时监控十个用户回路的终端控制单元,其具备测量各回路中有功功率、无功功率、能量、电压、电流、功率因数等电力参数功能。 1 电力参量的测量原理 对称三相电源通常由三个频率相同、幅值相等和初相角为1200的正弦电压源按一定方式连接而成,三相信号可依次称为A、B、C相,记为uA、uB、uC,它们的瞬时表达式如下: 在交流电路中,电压与电流之间的相位差
[单片机]
基于<font color='red'>ARM</font>微处理器的十回路智能配电监控单元的设计
对比stm32,arm9研究方向的猜想
大二上的寒假,受老师的邀请,去到东莞实习了10天。虽然不是第一次去,但是这次的体会和上次有了很大的不同。这篇文章本来想从东莞回来就写了,但是一直拖到现在才写。在东莞,我工作位置的旁边是一个约27岁的大学生,他的职位大概是嵌入式工程师,他每天都在使用上了ucos2的STM32芯片进行编程。刚好我在学ARM9+LINUX,于是有时候我们也私下讨论了一下STM32和ARM9的那些事儿。 STM32是这几年很火的,有哈佛架构,性价比高,开发使用的函数库齐全等优点,这个芯片我本来也想在大一下的时候买块开发板来学,不过后来项目需要,所以学了ARM9。 在讲之前,问一个问题。假设有这样的一个项目,让你做一个数字示波器的控制和显示部分的
[单片机]
基于S3C6410的ARM11学习(十) 时钟初始化
之前已经用led验证了核心初始化的代码是可以用的了。接着就要进行到下一步,这一步就是时钟初始化,因为在时钟初始化之前,CPU的系统时钟都是跑在外部晶振12M上的,这速度也太慢了,S3C6410可是跑在600多M时钟上的。所以我们就需要对时钟进行配置,将系统时钟调高。 这时候,其实是可以初始化C所用环境,然后用c语言来写,不过为了练习编写汇编代码,就使用汇编代码来写了。 S3C6410的时钟是挺复杂的。比51单片机的时钟要是要复杂多了去了。下面是时钟的框图。 S3C6410共有3个PLL。PLL是时钟倍频用的。我使用的OK6410外部晶振是12M的。但是CPU的时钟是可以跑600多M的,这怎么实现的了。就是靠PLL来实
[单片机]
基于S3C6410的<font color='red'>ARM</font>11学习(十) 时钟初始化
基于ARM的蓝牙实时数据采集系统的硬件与软件设计
1 引言 随着计算机技术的发展,尤其是无线技术广泛深入到人们生活的各个方面,使人们的生 活发生了深刻的变化。就工业数据采集、测量领域来讲,由于测量种类多、数据量大,且存 在许多条件恶劣、人们不易到达或不能时刻停留的地方偶尔采集一些现场数据,因而不但需 要花费大量的人力、物力和财力进行设备的维护,同时给采集带来很多不必要的麻烦。 为了解决上述问题,本文提出了一种基于ARM 的蓝牙实时数据采集系统。采用嵌入式 操作系统Windows CE,对通过蓝牙无线传输方式集中的传感器采集数据,进行控制、显示、 处理,实现工业实时数据的采集。ARM 技术为内核的微控制器指令周期短,处理能力强, 接口丰富,能成功运行操作系统,为控制系统的应用程
[单片机]
Nordic Semiconductor 与 Arm 扩展合作关系
签署最新低功耗处理器设计、软件平台和安全 IP 许可协议 Nordic签署 Arm Total Access 授权许可协议,确保其现有和未来的多协议、Wi-Fi、蜂窝物联网和DECT NR+ 产品具备业界领先的处理器和安全技术 挪威奥斯陆 – 2024年2月20日 – Nordic Semiconductor宣布与世界领先的半导体设计和软件平台企业Arm签署一项多年期Arm Total Access (ATA)授权许可协议 。ATA 保证为Nordic当前和未来的产品 (包括多协议、Wi-Fi、蜂窝物联网和 DECT NR+ 解决方案) 提供广泛的Arm® IP、工具、支持和培训。 两家企业的合作始于 2012
[物联网]
Nordic Semiconductor 与 <font color='red'>Arm</font> 扩展合作关系
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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