在ARMv6T2以及ARMv7架构扩展了Thumb指令集,其中加入了IT指令,进一步增强了代码的紧凑性。

Thumb中有一个比较有意思的指令——IT,这条指令用于根据指定的条件来执行后面相继的四条指令。当然,Thumb-2中大部分算术逻辑指令都含有带条件执行的特征,不过Thumb-2是32位的。如果你需要更紧凑的指令,那么使用Thumb结合ThumbEE来做带条件的指令执行还是不错的选择。Thumb本身不具备带条件指令执行的特性。

IT指令的描述为:IT{<x>{<y>{<z>}}} <firstcond>

其中,<x>表示第二条指令的条件;<y>表示第三条指令的条件;<z>表示第四条指令的条件。<firstcond>是条件操作数,表示第一条指令的条件。

<x>、<y>、<z>的标识其实就两种符号——T或E。T表示Then,表示相应的指令所满足的条件与<firstcond>一致;E表示else,表示相应的指令所满足的条件与<firstcond>完全相反。因此,对于第一条指令而言,总是为T的,因此不需要在IT中显示给出,它直接对应于<firstcond>的条件。

另外,在IT块中不能再使用IT指令。即,相继的四条指令中不允许出现IT指令。

下面给出一些示例代码:

    cmp     r1, #
itete eq
moveq r1, #
movne r2, #
moveq r3, #
movne r12, # stmia r0, {r1-r3, r12} bx lr

可能会觉得奇怪,为何itete 指令中的 ete 已经表示了条件了,为何下面的指令中还需要条件,moveq,movne。这点需要注意。

ARM处理器架构的Thumb指令集中关于IT指令的使用的更多相关文章

  1. ARM 处理器架构【转】

    ARM 处理器架构 转自:http://www.arm.com/zh/products/processors/instruction-set-architectures/index.php ARM 架 ...

  2. ARM 处理器:RISC与CISC 是什么?【转】

    转自:https://blog.csdn.net/willsun2017/article/details/83388990 完全看懂 ARM 处理器:RISC与CISC 是什么? 历史.架构一次看透 ...

  3. ARM处理器的寄存器,ARM与Thumb状态,7中运行模式 【转】

    转自:http://blog.chinaunix.net/uid-28458801-id-3494646.html ARM处理器工作模式一共有 7 种 : USR  模式    正常用户模式,程序正常 ...

  4. ARM处理器的寄存器,ARM与Thumb状态,7中运行模式

     ** ARM处理器的寄存器,ARM与Thumb状态,7中运行模式  分类: 嵌入式 ARM处理器工作模式一共有 7 种 : USR  模式    正常用户模式,程序正常执行模式 FIQ模式(Fast ...

  5. ARM体系架构下的同步操作

    http://blog.hamobai.com/2012/06/28/synchronization-on-ARM-one/ 处理器在访问共享资源时,必须对临界区进行同步,即保证同一时间内,只有一个对 ...

  6. ARM处理器全解析:A8/A9/A15都是什么?

    前不久ARM正式宣布推出新款ARMv8架构的Cortex-A50处理器系列产品,以此来扩大ARM在高性能与低功耗领域的领先地位,进一步抢占移动终端市场份额.Cortex-A50是继Cortex-A15 ...

  7. arm处理器

    arm处理器 arm处理器相关 1.体系架构定义了指令集(ISA)和基于这一体系结构下处理器的编程模型. arm卖的是架构或者已经设计好的公版ip核 卖给苹果高通的是架构,需要苹果高通通过架构设计自己 ...

  8. ARM的体系结构与编程系列博客——ARM处理器系列介绍

    ARM处理器系列介绍 现在到了3月,过年过得过于舒服了.系列博客也停更了近半月,我果然是个慢(lan)性(gui)子,那么趁着到校的第一天晚上,就写一篇博客来继续我的系列博客了!众所周知,ARM处理器 ...

  9. [转] 张凌 ARM体系架构

    很多时候我们都会对M0,M0+,M3,M4,M7,arm7,arm9,CORTEX-A系列,或者说AVR,51,PIC等,一头雾水,只知道是架构,不知道具体是什么,有哪些不同?今天查了些资料,来解解惑 ...

随机推荐

  1. css中的层叠性及权重的比较

    假如同一个标签被多个选择器选中,每个选择器都设置了相同的样式,浏览器中加载时这个样式听谁的? 不同选择器设置的同一个样式,只会选择一个进行加载,不会叠加. 为了解决听谁的问题,引入层叠性的概念. 层叠 ...

  2. docker学习笔记--重基础使用

    最近一直在研究Elasticsearch,后来部门的同事遇到了一个docker集群的未授权访问漏洞,于是稍微看了一下docker进行了一下基本的入门,本文把自己学习docker的过程进行了一个详细的记 ...

  3. java基础05 集合

    一.集合的由来? 我们学习Java,可以操作很多对象 ,存储 的容器有数组和StringBuffer,StringBuilder; 而数组的长度固定,所以不适合做变化的需求,Java就提供了集合供我们 ...

  4. __main() 和 main() 【转】

    因为我们通常在BOOTLOADER中都已做好了比较细致的初始化工作,包括代码的搬运,所以我们最好别再调用库函数__main(),因为__main()作为ADS集成好的库函数,会对系统进行初始化设置,可 ...

  5. 动态语言的灵活性是把双刃剑 -- 以Python语言为例

    本文有些零碎,总题来说,包括两个问题:(1)可变对象(最常见的是list dict)被意外修改的问题,(2)对参数(parameter)的检查问题.这两个问题,本质都是因为动态语言(动态类型语言)的特 ...

  6. SpringMVC源码情操陶冶-FreeMarker之web配置

    前言:本文不讲解FreeMarkerView视图的相关配置,其配置基本由FreeMarkerViewResolver实现,具体可参考>>>SpringMVC源码情操陶冶-ViewRe ...

  7. (转)盒子概念和DiV布局

    CSS盒子和DIV布局 (2013-11-24 16:17:29) 转载▼ 一.认识div层 1.<DIV>标记是一个区块容器标记,在标记之间可以放置其他一些HTML元素,例如p,h1,t ...

  8. (转)volatile关键字

    Java线程:volatile关键字   Java™ 语言包含两种内在的同步机制:同步块(或方法)和 volatile 变量.这两种机制的提出都是为了实现代码线程的安全性.其中 Volatile 变量 ...

  9. 两百条微信小程序跳坑指南(不定时更新)

    微信小程序联盟出品 跳坑textarea<二百二十三>不显示文本及textarea相关问题集合跳坑<二百一十三> background-image无法获取本地资源图片....跳 ...

  10. echarts_部分图表配置_堆叠折线图

    echarts基本图表使用: 1.获取包裹元素(var myChart = echarts.init(document.getElementById('thisId'));)2.设置option(op ...