Thumb / Thumb-2 / ThumbEE

2023-11-13

本文转载至:http://zh.wikipedia.org/wiki/ARM%E6%9E%B6%E6%A7%8B

Thumb

较新的ARM处理器有一种16-bit指令模式,叫做Thumb,也许跟每个条件式运行指令均耗用4位的情形有关。在Thumb模式下,较小的opcode有更少的功能性。例如,只有分支可以是条件式的,且许多opcode无法访问所有CPU的暂存器。然而,较短的opcode提供整体更佳的编码密度(注:意指代码在存储器中占的空间),即使有些运算需要更多的指令。特别在存储器端口或总线宽度限制在32以下的情形时,更短的Thumb opcode能更有效地使用有限的存储器带宽,因而提供比32位代码更佳的性能。典型的嵌入式硬件仅具有较小的32-bit datapath寻址范围以及其他更窄的16 bits寻址(例如Game Boy Advance)。在这种情形下,通常可行的方案是编译成Thumb代码,并自行优化一些使用(非Thumb)32位指令集的CPU相关程序区,因而能将它们置入受限的32-bit总线宽度的存储器中。

首颗具备Thumb技术的处理器是ARM7TDMI。所有ARM9和后来的家族,包括XScale,都纳入了Thumb技术。

Thumb-2

Thumb-2技术首见于“ARM1156核心”,并于2003年发表。Thumb-2扩充了受限的16位Thumb指令集,以额外的32位指令让指令集的使用更广泛。因此Thumb-2的预期目标是要达到近乎Thumb的编码密度,但能表现出近乎ARM指令集在32位存储器下的性能。

Thumb-2至今也从ARM和Thumb指令集中派生出多种指令,包含位栏操作、分支建表和条件运行等功能。

Thumb Execution Environment(ThumbEE)

ThumbEE,也就是所谓的Thumb-2EE,业界称为Jazelle RCT技术,于2005年发表,首见于“Cortex-A8”处理器。ThumbEE提供从Thumb-2而来的一些扩充性,在所处的运行环境下,使得指令集能特别适用于运行阶段的编码产生(例如实时编译)。Thumb-2EE是专为一些语言如LimboJavaC#PerlPython,并能让实时编译器能够输出更小的编译码却不会影响到性能。

ThumbEE所提供的新功能,包括在每次访问指令时自动检查是否有无效指针,以及一种可以运行数组范围检查的指令,并能够分支到分类器,其包含一小部份经常调用的编码,通常用于高级语言功能的实现,例如对一个新对象做存储器配置。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Thumb / Thumb-2 / ThumbEE 的相关文章

  • 13 51单片机汇编:用Keil C51模拟器进行IO输入并打印输入结果[系列教程之13]

    51单片机汇编 用Keil C51模拟器进行IO输入并打印输入结果 系列教程之13 该系列主仓库地址 https gitee com langcai1943 8051 from boot to application 本工程地址 https
  • Windows系统调用架构分析—也谈KiFastCallEntry函数地址的获取

    Windows系统调用架构分析 也谈KiFastCallEntry函数地址的获取 windows api 汇编 hook 存储 system 目录 为什么要写这篇文章 1 因为最近在学习 软件调试 这本书 看到书中的某个调试历程中讲了Win
  • C关键字volatile

    其实我想看的 想做笔记的就是就是那个汇编例子 看来汇编例子有助于了解啊 以前听人说过 高手都能将每一句C语言对应一句汇编语言 C语言关键字volatile 1 C语言关键字volatile C语言关键字volatile 注意它是用来修饰变量
  • 函数调用约定(整理稿)

    函数调用约定 整理稿 Function calling convention 在C语言中 假设我们有这样的一个函数 int function int a int b 调用时只要用result function 1 2 这样的方式就可以使用这
  • 汇编笔记

    更新于20190929 1 Intel和AT T汇编 参数是反的 AT T寄存器前加 常量前加 Intel mov rax rcx rcx gt rax mov cl 2 对应AT T movq rcx rax rcx gt rax mov
  • ARM下高效C编程

    通过一定的风格来编写 C 程序 可以帮助 C 编译器生成执行速度更快的 ARM 代码 下面就是一些与性能相关的关键点 1 对局部变量 函数参数和返回值要使用 signed 和 unsigned int 类型 这样可以避免类型转换 而且可高效
  • 探讨STOS指令

    转载在http hi baidu com darks00n blog item 4c019ec42ad0cdcad00060b1 html 下面是一段win32 console程序 Debug版 的反汇编代码 很程式化的东西 本文不讨论这段
  • 【编译原理】课程一:编译原理入门

    目录 1 为什么要学习编译原理 2 什么是编译原理 3 编译与计算机程序设计语言的关系 3 1 程序设计语言的转换方式 3 2 编译的转换过程 3 3 编译器在语言处理系统中的位置 3 4 编译系统的结构 3 4 1 词法分析 扫描 3 4
  • linux汇编编译器:GAS和NASM的比较

    GAS即GNU AS汇编编译器 其属于AT T风格 我们常用的GNU的产品还有GCC G NASM是Linux平台下常用的汇编编译器 是intel风格的汇编编译器 MASM是Windows平台下的汇编编译器 也使用Intel风格 我们学80
  • Thumb / Thumb-2 / ThumbEE

    本文转载至 http zh wikipedia org wiki ARM E6 9E B6 E6 A7 8B Thumb 较新的ARM处理器有一种16 bit指令模式 叫做Thumb 也许跟每个条件式运行指令均耗用4位的情形有关 在Thum
  • windgb调试

    reference http hi baidu com lewutian blog item 191047882b9c399fa5c27261 html 调试前的必备工作 在开始调试前首先要做的工作是设置好符号 Symbols 路径 没有符
  • ARM中的程序状态寄存器(CPSR)

    31 30 29 28 27 8 7 6 5 4 3 2 1 0 N Z C V 保留 I F T M4 M3 M2 M1 M0 N Negative Less Than I IRQ disable Z Zero F FIQ disable
  • Linux下C编译系统

    Linux下C编译系统 编译过程概述 了解一些编译知识的读者都知道 所谓编译 就是在编译程序读取源程序 字符流 对之进行词法和语法的分析 将高级语言指令转换为功能等效的汇编代码 再由汇编程序转换为机器语言 并且按照操作系统对可执行文件感谢格
  • 8259初始化命令字(ICW1-ICW4)

    8259A的中断操作功能很强 包括中断的请求 屏蔽 排队 结束 级联以及提供中断类型号和查询等操作 并且其操作的方式又有不同 它既能实现向量中断 又能进行中断查询 它可以用于16位机 也可用于8位机 因此 使用起来感到复杂且不好掌握 为此
  • 常见汇编指令整理

    本文会整理在逆向中常见的指令汇总 目录 汇编符号 汇编指令的组成 mov movzx lea xchg 加法指令 减法指令 带进位加法 带进位减法 自增自减 乘法运算 除法运算 and or xor not shl shr 逻辑指令 字符串
  • Windows游戏加速外挂-变速齿轮 学习笔记-【第一篇】

    找到两篇文章 是比较流行的方法 接下来记录一下收获 第一篇文章 变速齿轮 研究手记 转自 http www newasp net tech 58262 html 注意 如果你看了本文 对我们这个软件有兴趣 请到我们的主页www vrbrot
  • 汇编——单字符输入输出+字符串输入输出(换行实现)

    单字符输入输出 默认采用ML6 11汇编程序 DATAS SEGMENT CHAR DB CHAR存储输入的字符 CHANGELINE DB 13 10 用来表示换行符 DATAS ENDS STACKS SEGMENT DB 128 DU
  • asm:常见指令大全

    常见指令大全 算数指令 INC 指令 DEC 指令 ADD 指令 SUB指令 MUL指令 IMUL指令 DIV指令 IDIV指令 逻辑指令 AND指令 OR指令 XOR 指令 TEST指令 NOT指令 交换指令 xchg 比较指令 CMP指
  • 8086乘法指令MUL,IMUL

    对于加减指令来说CPU对有符号加减和无符号加减一视同仁 根据我们需要把它作为有符号的结果还是无符号的结果 但是乘除法指令区分有符号乘除和无符号乘除指令 无符号数乘法指令MUL MULtiply MUL OPRD OPRD可以用除立即数以外的
  • [原创]C++98升级到C++20的复习旅途-从汇编及逆向角度去分析“constexpr“关键字

    简介 常用网名 猪头三 出生日期 1981 XX XX QQ 643439947 个人网站 80x86汇编小站 https www x86asm org 编程生涯 2001年 至今 共22年 职业生涯 20年 开发语言 C C 80x86A

随机推荐

  • python如何输出一个数组_python中实现将多个print输出合成一个数组

    python中实现将多个print输出合成一个数组 比如有下面一段代码 for i in range 10 print s f list i name 该代码段的执行 会生成如下的10行 name 属性的字符串 f1 f2 f3 f4 f5
  • 根据请求动态设置 @Value 注入的属性值

    先说一下可以使用的场景 项目中有一些功能类使用了 Value修饰 这种属性取值通常要么是读取 yml 的配置文件 要么是读取配置中心 在我们在本地调试的时候Controller时 如果 如果Service层用到了 Value修饰 的属性时
  • JMeter:使用Docker进行分布式负载测试

    概述 单个的JMeter实例可能无法生成足够的负载来对应用程序进行压力测试 如本网站所示 一个JMeter实例将能够控制多个远程JMeter实例 并在你的应用程序上产生更大的负载 JMeter使用Java RMI Remote Method
  • Angular6 学习笔记——指令

    angular6 x系列的学习笔记记录 仍在不断完善中 学习地址 https www angular cn guide template syntax http www ngfans net topic 12 post 2 系列目录 1 组
  • 骰子【概率dp】

    题目链接 P1409 骰子 因为会有人被弹出队列 所以我设置的期望dp为 表示当现在队列中有i个人的时候 第j个人获胜的概率 于是有当只剩一个人的时候 那个人必胜 再往下 先看它在队首的情况 也就是直接获胜的概率加上它被弹到队尾时候的概率
  • IntelliJ IDEA 2023.2 新版本,拥抱 AI

    IntelliJ IDEA 近期连续发布多个EAP版本 官方在对用户体验不断优化的同时 也新增了一些不错的功能 尤其是人工智能助手补充 AI Assistant 相信在后续IDEA使用中 会对开发者工作效率带来不错的提升 以下是官方对AI
  • LeetCode:动态规划中的0-1背包问题【快来直接套模板啦】

    PS 0 1背包问题无疑是动态规划题目里面的非常经典的一类题目了 下面给出这类题目的一种解题模板 本文是参考代码随想录做的一些笔记 完整版本请戳链接 标准0 1背包问题 二维数组求解 标准的背包问题 有n件物品和一个最多能背重量为w的背包
  • 106 letcode - 重建二叉树

    class Solution 内存条里 有两个区域 堆和栈 其中 栈是我们函数跳转的关键 顺序是先进后出 通过压栈出栈 可以实现递归 1 当到达递归终止条件时候 则开始返回 例如 先序遍历二叉树中 每个节点都要执行三个操作 根 左 右 当对
  • Java基于 SpringBoot 的车辆充电桩系统

    博主介绍 程序员徐师兄 7年大厂程序员经历 全网粉丝30W Csdn博客专家 掘金 华为云 阿里云 InfoQ等平台优质作者 专注于Java技术领域和毕业项目实战 文章目录 1 效果演示 效果图 技术栈 2 前言介绍 完整源码请私聊 3 主
  • 关于今年五一调休。。

    作者主页 爱笑的男孩 的博客 CSDN博客 深度学习 YOLO 活动领域博主爱笑的男孩 擅长深度学习 YOLO 活动 等方面的知识 爱笑的男孩 关注算法 python 计算机视觉 图像处理 深度学习 pytorch 神经网络 opencv领
  • unity 渲染帧率优化-OnDemandRendering

    FixedUpdate更新速率设置 OnDemandRendering 相关的API 1 OnDemandRendering renderFrameInterval 3 解释说明 在一些静态UI的时候把OnDemandRendering r
  • Message": "请求的资源不支持 http 方法“GET”

    今天用postman测试后端api 总是报错 下面是问题解决方案 一 测试方法 public ApiResult Get int id ApiResult result new ApiResult result data 我是Get方法返回
  • Java调用jython

    Java调用jython 因为工作需要 需要在Java Jvm 进程内调用Python脚本 下了Jython练练手 脚本语言看着真别扭啊 若干年前写自动化测试工具时也用过python一小阵子 但基本忘光光了 好了 直奔主题 前提 1 sun
  • Linux如何给服务器增加白名单

    1 查看系统白名单配置 iptables L n 2 增加白名单 19 40 145 140 是需要增加的服务器IP iptables I INPUT s 19 40 145 140 32 p tcp j ACCEPT 注 I I是i的大写
  • oracle 函数使用方法----replace函数

    例 sql语句如下 select from cen sys TB DIC JDLX t 查询结果如下 需求 需要获取字段 PID 的值并 新增一个字段 PNAME PNAME的值为字段PID去掉 市平台前置机 剩下的字段 实现 select
  • 后端返回parentId,前端处理成children嵌套数据

    rouyi 的 vuetree函数结合elementui el table组件使用 把有parentId和id结构的数据处理成children嵌套数据 字段名称不一致 可以设置 vuetree函数 构造树型结构数据 param data 数
  • html 调用ActiveX

    html网页调用ActiveX控件时 要获取到ActiveX的ClassID 这个ClassID是注册到系统里的 而不是工程中的uuid 下图为uuid 正确的是在注册表的HKEY CLASSES ROOT中查找你的工程名的 项 找到后 其
  • flink state ttl 清理逻辑(截止到flink1.8之前的逻辑)

    在我们开发Flink应用时 许多有状态流应用程序的一个常见要求是自动清理应用程序状态以有效管理状态大小 或控制应用程序状态的访问时间 TTL Time To Live 功能在Flink 1 6 0中开始启动 并在Apache Flink中启
  • openwrt golang mysql_golang1.9编译openwrt运行程序 ,window7下liteide编译

    网上看了好多资料发现都很过时了 基本都是用的https github com gomini go mips32编译的 但是go1 9早就支持mips了 设置好编译参数 开始build 这时在go pkg下会出现linux mips目录 就是
  • Thumb / Thumb-2 / ThumbEE

    本文转载至 http zh wikipedia org wiki ARM E6 9E B6 E6 A7 8B Thumb 较新的ARM处理器有一种16 bit指令模式 叫做Thumb 也许跟每个条件式运行指令均耗用4位的情形有关 在Thum