arm指令和thumb指令有啥区别

author author     2023-05-01     452

关键词:

  Thumb指令集与 ARM 指令的区别一般有如下几点:
  跳转指令
  程序相对转移,特别是条件跳转与 ARM 代码下的跳转相比,在范围上有更多的限制,转向子程序是无条件的转移。
  数据处理指令
  数据处理指令是对通用寄存器进行操作,在大多数情况下,操作的结果须放入其中一个操作数寄存器中,而不是第 3 个寄存器中。数据处理操作比 ARM 状态的更少,访问寄存器 R8~R15 受到一定限制。除 MOV 和 ADD 指令访问器 R8~R15 外,其它数据处理指令总是更新 CPSR 中的 ALU 状态标志。访问寄存器 R8~R15 的 Thumb 数据处理指令不能更新 CPSR 中的 ALU 状态标志。
  单寄存器加载和存储指令
  在 Thumb 状态下,单寄存器加载和存储指令只能访问寄存器 R0~R7
  批量寄存器加载和存储指令
  LDM 和 STM 指令可以将任何范围为 R0~R7 的寄存器子集加载或存储。 PUSH 和 POP 指令使用堆栈指令 R13 作为基址实现满递减堆栈。除 R0~R7 外,PUSH 指令还可以存储链接寄存器 R14,并且 POP 指令可以加载程序指令PC
参考技术A   Thumb指令集与 ARM 指令的区别一般有如下几点:
  跳转指令
  程序相对转移,特别是条件跳转与 ARM 代码下的跳转相比,在范围上有更多的限制,转向子程序是无条件的转移.
  数据处理指令
  数据处理指令是对通用寄存器进行操作,在大多数情况下,操作的结果须放入其中一个操作数寄存器中,而不是第 3 个寄存器中.数据处理操作比 ARM 状态的更少,访问寄存器 R8~R15 受到一定限制.除 MOV 和 ADD 指令访问器 R8~R15 外,其它数据处理指令总是更新 CPSR 中的 ALU 状态标志.访问寄存器 R8~R15 的 Thumb 数据处理指令不能更新 CPSR 中的 ALU 状态标志.
  单寄存器加载和存储指令
  在 Thumb 状态下,单寄存器加载和存储指令只能访问寄存器 R0~R7
  批量寄存器加载和存储指令
  LDM 和 STM 指令可以将任何范围为 R0~R7 的寄存器子集加载或存储. PUSH 和 POP 指令使用堆栈指令 R13 作为基址实现满递减堆栈.除 R0~R7 外,PUSH 指令还可以存储链接寄存器 R14,并且 POP 指令可以加载程序指令PC
参考技术B 回答

Thumb 指令可以看作是 ARM 指令压缩形式的子集,是针对代码密度的问题而提出的,它具有 16 位的代码密度但是它不如ARM指令的效率高 .Thumb 不是一个完整的体系结构,不能指望处理只执行Thumb 指令而不支持 ARM 指令集.因此,Thumb 指令只需要支持通用功能,必要...

因此,Thumb 指令只需要支持通用功能,必要时可以借助于完善的 ARM 指令集,比如,所有异常自动进入 ARM 状态.在编写 Thumb 指令时,先要使用伪指令 CODE16 声明,而且在 ARM 指令中要使用 BX指令跳转到 Thumb 指令,以切换处理器状态.编写 ARM 指令时,则可使用伪指令 CODE32声明.

参考技术C CODE32伪指令通知编译器,其后的指令序列为32位的ARM指令。 若在汇编源程序中同时包含ARM指令和Thumb指令时,可用CODE16伪指令通知编译器其后的指令序列为16位的Thumb指令,CODE32伪指令通知编译器其后的指令序列为32位的ARM指令。因此,在使用ARM指令和Thumb指令混合编程的代码里,可用这两条伪指令进行切换,但注意他们只通知编译器其后指令的类型,并不能对处理器进行状态的切换。 使用示例: AREA Init,CODE,READONLY CODE32 ;通知编译器其后的指令为32位的ARM指令 LDR R0,=NEXT+1 ;将跳转地址放入寄存器R0 BX R0 ;程序跳转到新的位置执行,并将处理器切换到Thumb工作状态 CODE16 ;通知编译器其后的指令为16位的Thumb指令 NEXT LDR R3,=0x3FF END ;程序结束
2、Thumb指令及应用 为兼容数据总线宽度为16位的应用系统,ARM体系结构除了支持执行效率很高的32位ARM指令集以外,同时支持16位的Thumb指令集。Thumb指令集是ARM指令集的一个子集,允许指令编码为16位的长度。与等价的32位代码相比较,Thumb指令集在保留32代码优势的同时,大大的节省了系统的存储空间。 所有的Thumb指令都有对应的ARM指令,而且Thumb的编程模型也对应于ARM的编程模型,在应用程序的编写过程中,只要遵循一定调用的规则,Thumb子程序和ARM子程序就可以互相调用。当处理器在执行ARM程序段时,称ARM处理器处于ARM工作状态,当处理器在执行Thumb程序段时,称ARM处理器处于Thumb工作状态。 与ARM指令集相比较,Thumb指令集中的数据处理指令的操作数仍然是32位,指令地址也为32位,但Thumb指令集为实现16位的指令长度,舍弃了ARM指令集的一些特性,如大多数的Thumb指令是无条件执行的,而几乎所有的ARM指令都是有条件执行的;大多数的Thumb数据处理指令的目的寄存器与其中一个源寄存器相同。 由于Thumb指令的长度为16位,即只用ARM指令一半的位数来实现同样的功能,所以,要实现特定的程序功能,所需的Thumb指令的条数较ARM指令多。在一般的情况下,Thumb指令与ARM指令的时间效率和空间效率关系为: - Thumb代码所需的存储空间约为ARM代码的60%~70% - Thumb代码使用的指令数比ARM代码多约30%~40% - 若使用32位的存储器,ARM代码比Thumb代码快约40% - 若使用16位的存储器,Thumb代码比ARM代码快约40%~50% - 与ARM代码相比较,使用Thumb代码,存储器的功耗会降低约30% 显然,ARM指令集和Thumb指令集各有其优点,若对系统的性能有较高要求,应使用32位的存储系统和ARM指令集,若对系统的成本及功耗有较高要求,则应使用16位的存储系统和Thumb指令集。当然,若两者结合使用,充分发挥其各自的优点,会取得更好的效果。本回答被提问者采纳

thumb指令集与arm指令集的差别

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

arm指令集thumb指令集thumb-2指令集

MCU使用什么指令集主要由内核决定的,比如Cortex-M3使用的是Thumb-2指令集  ARM指令集:编代码全部是32bits的,每条指令能承载更多的信息,因此使用最少的指令完成功能,所以在相同频率下运行速度也是最快的,但也因为... 查看详情

GNU Arm 嵌入式工具链 | arm-none-eabi-gcc 选项:Thumb (-mthumb) 和 Arm (-marm) 状态有啥区别?

】GNUArm嵌入式工具链|arm-none-eabi-gcc选项:Thumb(-mthumb)和Arm(-marm)状态有啥区别?【英文标题】:GNUArmEmbeddedToolchain|arm-none-eabi-gccoptions:WhatisadifferencebetweenThumb(-mthumb)andArm(-marm)state?GNUArm嵌入式工具链|arm-none-eabi-gcc选项:Thumb(-m 查看详情

arm处理器架构的thumb指令集中关于it指令的使用

在ARMv6T2以及ARMv7架构扩展了Thumb指令集,其中加入了IT指令,进一步增强了代码的紧凑性。Thumb中有一个比较有意思的指令——IT,这条指令用于根据指定的条件来执行后面相继的四条指令。当然,Thumb-2中大部分算术逻辑指令都含... 查看详情

为啥要使用thumb模式,与arm相比较,thumb代码的两大优势是啥?

...16位,在代码精简的同时,性能上并没有减少多少。Thumb指令集不是完整的指令集,它是ARM指令集的子集。但是Thumb指令具有更高的代码密度,即占用存储空间小,仅为ARM代码规格的65%,但其性能却下降的很少。所以,Thumb指令集... 查看详情

arm指令中mov和ldr有啥区别?

...器之间移动数据,或将立即数移到寄存器中。x86中没有LDR指令,因为x86的MOV指令可以将数据从内存移动到寄存器,但也有LDR伪指令。尽管LDR伪指令与arm的LDR指令非常相似,但它们具有不同的功能,LDR伪指令可以在immediate之前加=... 查看详情

嵌入式lab2:arm指令

1、生成了Thumb指令还是ARM指令:如何通过编译参数改变,相同的程序ARM和Thumb编译的结果有何不同,如指令本身和整体目标代码的大小等。首先编写一个简单的C程序,这里我写了一个快排程序。如下图编译选项为-... 查看详情

基于arm的微机原理-cortex-m3处理器

...非特权对有些资源的访问受到限制或不允许访问。如部分指令(设置FAULTMASK和PRIMASK的CPS指令)对系统控制空间(SCS)的大部分寄存器的访问。访问级别:特权级和用户级出于安全考虑,防止意外、恶意访问破坏重要数据。工作模式:... 查看详情

基于arm的微机原理-cortex-m3处理器

...非特权对有些资源的访问受到限制或不允许访问。如部分指令(设置FAULTMASK和PRIMASK的CPS指令)对系统控制空间(SCS)的大部分寄存器的访问。访问级别:特权级和用户级出于安全考虑,防止意外、恶意访问破坏重要数据。工作模式:... 查看详情

thumb指令集程序示例(代码片段)

...ARM状态,一种Thumb状态。 本节课主要介绍Thumb状态及Thumb指令集。在012_relocate的程序基础上修改,创建013_thumb_014_003程序,并打开start.S和Makefile代码。1.对Makefile文件进行如下修改。 1all:led_on2.ouart.oinit.omain.ostart.o23#arm 查看详情

stm32的arm内核和cortex架构到底是啥意思?有啥区别?求指教!

...AdvancedRISCMachine。ARM处理器本身是32位设计,但也配备16位指令集,一般来讲比等价32位代码节省达35%,却能保留32位系统的所有优势。cortex架构:ARM公司在经典处理器ARM11以后的产品改用Cortex命名,并分成A、R和M三类,旨在为各种... 查看详情

组件和指令有啥区别?

】组件和指令有啥区别?【英文标题】:Whatisthedifferencebetweencomponentanddirective?组件和指令有什么区别?【发布时间】:2016-04-0908:37:19【问题描述】:我刚刚开始使用Angular2。我想知道Angular2中的组件和指令之间有什么区别?【问... 查看详情

组件和指令有啥区别?

】组件和指令有啥区别?【英文标题】:Whatisthedifferencebetweencomponentanddirective?组件和指令有什么区别?【发布时间】:2016-04-0908:37:19【问题描述】:我刚刚开始使用Angular2。我想知道Angular2中的组件和指令之间有什么区别?【问... 查看详情

服务、指令和模块有啥区别?

】服务、指令和模块有啥区别?【英文标题】:Whatisthedifferencebetweenservice,directiveandmodule?服务、指令和模块有什么区别?【发布时间】:2012-06-2516:07:56【问题描述】:我已经阅读了很多文档,但我越来越困惑。我基本上无法弄清... 查看详情

AngularJS指令范围内的'@'和'='有啥区别?

】AngularJS指令范围内的\\\'@\\\'和\\\'=\\\'有啥区别?【英文标题】:Whatisthedifferencebetween\'@\'and\'=\'indirectivescopeinAngularJS?AngularJS指令范围内的\'@\'和\'=\'有什么区别?【发布时间】:2012-12-1213:53:22【问题描述】:我已经仔细阅读了有... 查看详情

C ++中的宏指令和预处理器指令有啥区别[重复]

】C++中的宏指令和预处理器指令有啥区别[重复]【英文标题】:WhatisthedifferencebetweenmacroandpreprocessordirectivesinC++[duplicate]C++中的宏指令和预处理器指令有什么区别[重复]【发布时间】:2013-01-0618:36:44【问题描述】:可能重复:Differen... 查看详情

arm汇编基础上(代码片段)

ARM是一个精简指令集处理器,其指令集的设计是定长的,也就是其汇编对应的机器码是定长的(2字节或者4字节)。那么对于定长而言,其优点就是更快的被执行,因为这样CPU取指令译码的速度相对x86的CPU... 查看详情

prefetch 和 prefetchu ptx 指令有啥区别?

】prefetch和prefetchuptx指令有啥区别?【英文标题】:Whatisthedifferencebetweenprefetchandprefetchuptxinstructions?prefetch和prefetchuptx指令有什么区别?【发布时间】:2015-04-0600:03:41【问题描述】:Here在文档中声明prefetch和prefetchuptx指令“在指定... 查看详情