1.ARMv8引入了执行状态机制,分为AArch32和AArch64

  • AArch32为T32(Thumb)和A32(ARM)。
  • AArch64为A64一种指令集

  A64和A32的指令都是32位宽,可以操作64/32位寄存器和64/32位地址总线

  T32技术兼容Thumb和Thumb2指令集,是16/32位混合指令集

2.在ARMv7后期版本里,引入来Thumb2技术(增加指令个数与位宽,但大多数无条件,可以用it指令带条件,在ARM和Thumb指令之间不需要显示切换状态了),Thumb和ARM指令集被统一位UAL(Unified Assembly Language)语法,即16位汇编指令和32位汇编指令可以无缝的出现在代码里。Thumb和ARM指令本质上一样,只是被编码成不一样的格式。

Originally, there was only ARM 32-bit instructions (1980-mid 1990s). Then ARM made a mode that was like a compression front-end that expanded a strictly 16bit opcodes to 32 bits. This was thumb mode (mid 1990s to ~2005). Then ARM came out with thumb2 (which is somewhat nebulous) mainly typified by a mix of both 16bit and 32bit instructions (~2005 to current).

比较老的语法是这样的,用了Thumb2技术后在UAL下不需要了

ARM、THUMB、THUMBX、CODE16 和 CODE32

ARM 指令和 CODE32 指令是同义词。 它们使用 UAL 或 Thumb-2 以前的汇编语言语法,指示汇编器将后续指令解释为 ARM 指令。

THUMB 指令使用 UAL 语法,指示汇编器将后续指令解释为 Thumb 指令。

THUMBX 指令使用 UAL 语法,指示汇编器将后续指令解释为 Thumb-2EE 指令。

CODE16 指令使用 UAL 以前的汇编语言语法,指示汇编器将后续指令解释为 Thumb 指令。

必要时,这些指令也可插入最多三个填充字节,以对齐到 ARM 的下一个字边界,或插入最多一个填充字节,以对齐到 Thumb 或 Thumb-2EE 的下一个半字边界。

语法

ARM
THUMB
THUMBX
CODE16
CODE32

用法

在包含使用不同指令集的代码的文件中:

  • ARM 必须位于任何 ARM 代码之前。 CODE32ARM 的同义词。

  • THUMB 必须位于用 UAL 语法编写的 Thumb 代码之前。

  • THUMBX 必须位于用 UAL 语法编写的 Thumb-2EE 代码之前。

  • CODE16 必须位于用 UAL 以前的语法编写的 Thumb 代码之前。

这些命令不汇编为任何指令, 也不更改状态。 它们仅指示汇编器适当地汇编 ARM、Thumb 或 Thumb-2EE 指令,并在必要时插入填充字节。

示例

此示例演示如何使用 ARMTHUMB 从 ARM 指令跳转到 Thumb 指令。

        AREA ToThumb, CODE, READONLY    ; Name this block of code
ENTRY ; Mark first instruction to execute
ARM ; Subsequent instructions are ARM
start
ADR r0, into_thumb + 1 ; Processor starts in ARM state
BX r0 ; Inline switch to Thumb state
THUMB ; Subsequent instructions are Thumb
into_thumb
MOVS r0, #10 ; New-style Thumb instructions

   3.常见的指令集有 ARM, Thumb®, Thumb-2, NEON™, VFP,  Wireless MMX instruction sets

4.判断当前代码ARM哪种指令集可以看27-25bit,由A1,A2,T1,T2,T3等

ARM指令集相关知识的更多相关文章

  1. ARM相关知识

    ARM7采用冯·诺依曼(Von-Neumann)结构,数据存储器和程序存储器重合在一起.    同时,此结构也被大多数计算机所采用. ARM7为三级流水线结构(取指,译码,执行),平均功耗为0.6mW ...

  2. 对arm指令集的疑惑,静态库运行,编译报错等问题

    转载自http://www.jianshu.com/p/4a70aa03a4ea?utm_campaign=hugo&utm_medium=reader_share&utm_conte ...

  3. X86 寻址方式、AT&T 汇编语言相关知识、AT&T 与 Intel 汇编语言的比较、gcc 嵌入式汇编

    注:本分类下文章大多整理自<深入分析linux内核源代码>一书,另有参考其他一些资料如<linux内核完全剖析>.<linux c 编程一站式学习>等,只是为了更好 ...

  4. ARM汇编程序基本知识

    ARM汇编程序基本知识 1.汇编程序的基本组成 ARM汇编语言程序中,程序是以程序段为单位组织代码的.段是相对独立的指令或者代码序列,拥有特定的名称.段的种类有代码段.数据段和通用段,代 码段的内容为 ...

  5. ARM指令集(上)

    ADuC702x可以用两套指令集:ARM指令集和Thumb指令集.本小节介绍ARM指令集.在介绍ARM指令集之前,先介绍指令的格式. A.2.1  指令格式         (1)基本格式       ...

  6. ARM指令集——条件执行、内存操作指令、跳转指令

    ARM 汇编指令条件执行 在ARM模式下,任何一条数据处理指令可以选择是否根据操作的结果来更新CPSR寄存器中的ALU状态标志位.在数据处理指令中使用S后缀来实现该功能. 不要在CMP,CMN,TST ...

  7. ARM_Instruction_Set_Encoding_hacking(ARM指令集编码格式解读)

    ARM指令集编码格式解读 说明: 1.本文参考的书籍<ARM Architecture Reference Manual ARMv7-A and ARMv7-R edition>中的Cha ...

  8. ARM指令集—SWP指令

    ARM指令集-SWP指令 SWP和SWPB是ARM指令集中对存储单元的原子操作.即对存储单元的一次读和一次不可被切割. SWP和SWPB分别完毕存储器和寄存器之间 一个字(32bit)和一个字节(8b ...

  9. 常用 ARM 指令集及汇编

    ARM7TDMI(-S)指令集及汇编 ARM 处理器是基于精简指令集计算机(RISC)原理设计的,指令集和相关译码机制 较为简单,ARM7TDMI(-S)具有 32 位 ARM 指令集和 16 位 T ...

随机推荐

  1. 02.JSP的3个编译指令

    本章介绍JSP的3个编译指令,在JSP中常见的编译指令有如下3个:         1.page:用于针对当前页面的指令.         2.include:用于指定包含另一个页面.         ...

  2. Windows下配置使用MemCached

    工具: memcached-1.2.6-win32-bin.zip     MemCached服务端程序(for win) Memcached Manager             win下的Mem ...

  3. 剑指offer--面试题21--相关

    题目:设计包含min函数的栈,pop(),push(),min()的时间复杂度均为O(1) 自己所写代码如下:(写‘栈’的代码还是有些不熟练!) #include <iostream> u ...

  4. matrix_world_final_2012

    B http://acm.hust.edu.cn/vjudge/contest/view.action?cid=98759#problem/B 题意:瓶子侧躺在数轴上,瓶底在xlow,瓶口在xhigh ...

  5. ajax跨域请求,页面和java服务端的写法

    方法一(jsonp): 页面ajax请求的写法: $.ajax({ type : "get", async : false, cache : false, url : " ...

  6. asp.net 分布式缓存

    之前Velocity已被 集成到App Fabric(包含有WCF监控==)中.   网络Velocity使用大多是针对老版本:  老版本的下载地址:  http://www.microsoft.co ...

  7. poj 3254

    状态压缩 dp dp[i][j] 为第 i 行状态为 j 的总数 #include <cstdio> #include <cstdlib> #include <cmath ...

  8. spark分片个数的确定及Spark内存错误(GC error)的迂回解决方式

    我们知道,spark中每个分片都代表着一部分数据,那么分片数量如何被确认的呢? 首先我们使用最常见的HDFS+Spark,sparkDeploy的方式来讨论,spark读取HDFS数据使用的是spar ...

  9. Android的px、dip、sp的区别

    Android的px.dip.sp的区别 我们在页面布局的时候,经常会设置容器的长度,但是到底该使用哪个作为长度的单位而懊恼. 在Android中支持的描述大小区域的类型有以下几种:   px(pix ...

  10. C#中的Delegate

    谈C#中的Delegate http://www.cnblogs.com/hyddd/archive/2009/07/26/1531538.html