Thumb指令集

 

       Thumb指令能够看做是ARM指令压缩形式的子集。是针对代码密度【1】的问题而提出的。它具有16为的代码密度。Thumb不是一个完整的体系结构,不能指望处理程序仅仅运行Thumb指令而不支持ARM指令集。

因此。Thumb指令仅仅须要支持通用功能。必要时,可借助完好的ARM指令集,比如:全部异常自己主动进入ARM状态。

在编写Thumb指令时。先要使用伪指令CODE16声明,并且在ARM指令中要使用BX指令跳转到Thumb指令,以切换处理器状态。编写ARM指令时,可使用伪指令CODE32声明。

【1】.代码密度:单位存储空间中包括的指令的个数。比如

              ARM指令是32位的。而Thumb指令时16位的,假设在1K的存储空间中,能够放32条ARM指令,就能够放64条Thumb指令,因此在存放Thunb指令时,代码密度高。

 

 

 

Thumb指令集与ARM指令集的差别

 

       Thumb指令集没有协处理器指令、信号量指令以及訪问CPSR或SPSR的指令,没有乘加指令及64位乘法指令等,且指令的第二操作数受到限制;除了跳转指令B有条件运行功能外,其它指令均为无条件运行。大多数Thumb数据处理指令採用2地址格式。Thumb指令集与ARM指令集的差别一般有例如以下几点:

Ø         跳转指令

程序相对转移,特别是条件跳转与ARM代码下的跳转相比,在范围上有很多其它的限制,转向子程序是无条件的转移。

Ø         数据处理指令

数据处理指令是对通用寄存器进行操作。在大多数情况下。操作的结果须放入当中一个操作数寄存器中。而不是第三个寄存器中。

数据处理操作比ARM状态的更少。訪问寄存器R8—R15受到一定限制。

(除MOV和ADD指令訪问寄存器R8—R15外,其它数据处理指令总是更新CPSR中ALU状态标志)

訪问寄存器R8—R15的Thumb数据处理指令不能更新CPSR中的ALU状态标志

Ø         单寄存器载入和存储指令

在Thumb状态下,单寄存器载入和存储指令仅仅能訪问寄存器R0—R7

Ø         批量寄存器载入和存储指令

LDM和STM指令能够将不论什么范围为R0——R7的寄存器子集载入或存储

Thumb指令集与ARM指令集的差别的更多相关文章

  1. 常用 ARM 指令集及汇编

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

  2. ARM指令集、Thumb指令集、Thumb-2指令集

    MCU使用什么指令集主要由内核决定的,比如Cortex-M3使用的是Thumb-2指令集 ARM指令集: 编代码全部是 32bits 的,每条指令能承载更多的信息,因此使用最少的指令完成功能, 所以在 ...

  3. 【基于Android的ARM汇编语言系列】之五:ARM指令集与Thumb指令集

    作者:郭嘉 邮箱:allenwells@163.com 博客:http://blog.csdn.net/allenwells github:https://github.com/AllenWell [ ...

  4. ARM指令集(上)

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

  5. ARM指令集相关知识

    1.ARMv8引入了执行状态机制,分为AArch32和AArch64 AArch32为T32(Thumb)和A32(ARM). AArch64为A64一种指令集 A64和A32的指令都是32位宽,可以 ...

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

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

  7. 从最简单的实例学习ARM 指令集(三)

    上一篇讲到赋值运算,这篇讲讲子函数调用.先看最简单范例:test4.c #include <stdio.h> void f1() { } void main() { int d = 4; ...

  8. ARM 指令集版本和ARM 版本z

    a9是cortex-a9的简称,属于v7指令集,属于目前比较新的了.arm9就是arm9,属于v5指令集,arm9后面的是arm11,属于v6指令集,之前的是arm7,属于v4指令集.虽然他们之间差别 ...

  9. ARM指令集----杂项指令

    ARM指令集可以分为6类,即是跳转指令,数据处理指令,程序状态传输指令,Load.Store指令,协处理器指令和异常中断指令 跳转指令: 在ARM中有两种方式可以实现程序的跳转,一种是跳转指令,另一种 ...

随机推荐

  1. 视图层 view

    视图层是 Django 处理请求的核心代码层,我们大多数 Python 代码都集中在这一层面.它对外接收用户请求,对内调度模型层和模版层,统合数据库和前端,最后根据业务逻辑,将处理好的数据,与前端结合 ...

  2. S-T表学习笔记

    $O(nlogn)$构造$O(1)$查询真是太强辣 然而不支持修改= = ShØut! #include<iostream> #include<cstring> #includ ...

  3. HNU 13101 The Triangle Division of the Convex Polygon 组合数的因式分解求法

    题意: 求第n-2个Catalan数 模上 m. 思路: Catalan数公式: Catalan[n] = C(n, 2n)/(n+1) = (2n)!/[(n+1)!n!] 因为m是在输入中给的,所 ...

  4. const int *a与int *const a,const int *const a的区别

    来源:https://blog.csdn.net/zhangheng837964767/article/details/33783511 关键问题点:const 属于修饰符 ,关键是看const 修饰 ...

  5. 国庆 day 2 下午

    最大值(max) Time Limit:1000ms   Memory Limit:128MB 题目描述 LYK有一本书,上面有很多有趣的OI问题.今天LYK看到了这么一道题目: 这里有一个长度为n的 ...

  6. Android 开发者不得不面对的六个问题

    一份关于移动应用开发的调查报告显示,Androdid开发者对谷歌的移动操作系统平台的兴趣正在下降.尽管依然有79%的开发者表示对Android “非常感兴趣”,但调查报告显示,一些迹象表明在2012到 ...

  7. [BZOJ3884] 上帝与集合的正确用法 (欧拉函数)

    题目链接:  https://www.lydsy.com/JudgeOnline/problem.php?id=3884 题目大意: 给出 M, 求 $2^{2^{2^{2^{...}}}}$ % M ...

  8. [BZOJ1858] [SCOI2010] 序列操作 解题报告 (线段树)

    题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1858 Description lxhgww最近收到了一个01序列,序列里面包含了n个数, ...

  9. Mvc前后端显示不同的404错误页

    最近做的系统前端是移动端的,后端是PC端,然后404页面不能用通一个,so  查找了一些资料,找到了一个解决办法 在Global.asax文件夹下添加Application_EndRequest事件处 ...

  10. POJ 3122 Pie 二分答案

    题意:给你n个派,每个派都是高为一的圆柱体,把它等分成f份,每份的最大体积是多少. 思路: 明显的二分答案题-- 注意π的取值- 3.14159265359 这样才能AC,,, //By Sirius ...