历史上的今天
返回首页

历史上的今天

今天是:2024年12月17日(星期二)

正在发生

2019年12月17日 | ARM指令集 VS Thumb指令集

2019-12-17 来源:eefocus

1 thumb指令集概述

为兼容数据总线宽度为16位的应用系统,ARM体系结构除了支持执行效率很高的32位ARM指令集以外,同时支持16位的Thumb指令集。


Thumb指令集是ARM指令集的一个子集,是针对代码密度问题而提出的,它具有16位的代码宽度。与等价的32位代码相比较,Thumb指令集在保留32位代码优势的同时,大大的节省了系统的存储空间。Thumb不是一个完整的体系结构,不能指望处理器只执行Thumb指令集而不支持ARM指令集。


当处理器在执行ARM程序段时,称ARM处理器处于ARM工作状态,当处理器在执行Thumb程序段时,称ARM处理器处于Thumb工作状态(CPSR的T=0:arm,T=1:thumb)。Thumb指令集并没有改变ARM体系底层的编程模型,只是在该模型上增加了一些限制条件,只要遵循一定的调用规则,Thumb子程序和ARM子程序就可以互相调用。


与ARM指令集相比较,Thumb指令集中的数据处理指令的操作数仍然是32位,指令地址也为32位,但Thumb指令集为实现16位的指令长度,舍弃了ARM指令集的一些特性,相比之下从指令集上看thumb和arm主要有以下不同:


l 跳转指令。条件跳转在范围上有更多的限制,转向子程序只具有无条件转移。

l 数据处理指令。对通用寄存器进行操作,操作结果需放入其中一个操作数寄存器,而不是第三个寄存器。

l 单寄存器加载和存储指令。Thumb状态下,单寄存器加载和存储指令只能访问寄存器R0~R7。

l 批量寄存器加载和存储指令。LDM和STM指令可以将任何范围为R0~R7的寄存器子集加载或存储,PUSH和POP指令使用堆栈指针R13作为基址实现满递减堆栈,除R0~R7外,PUSH指令还可以存储链接寄存器R14,并且POP指令可以加载程序指令PC。

Thumb指令集没有包含进行异常处理时需要的一些指令,因此,在异常中断时还是需要使用ARM指令。这种限制决定了Thumb指令不能单独使用需要与ARM指令配合使用。


2 thumb寄存器和arm寄存器的关系

 

1)、Thumb 状态寄存器集是ARM 状态寄存器集的子集

程序员可直接访问8 个通用寄存器R0~R7、PC、堆栈指针SP、链接寄存器LR和CPSR。每个特权模式都有分组的SP、LR和SPSR。


2)、Thumb状态寄存器与ARM 状态寄存器的关系

  Thumb状态寄存器与ARM状态寄存器有如下关系:

l Thumb状态R0~R7与ARM状态R0~R7相同。

l Thumb状态CPSR和SPSR与ARM状态CPSR和SPSR 相同。

l Thumb状态SP映射到ARM状态R13。

l Thumb状态LR映射到ARM状态R14。

l Thumb状态PC映射到ARM状态PC(R15)。


3)、在Thumb状态中访问高寄存器

在Thumb状态中高寄存器(寄存器R0~R7为低寄存器,寄存器R8~R15为高寄存器)不是标准寄存器集的一部分,汇编语言程序员对它们的访问受到限制,但可以将它们用于快速暂存。


可以使用MOV指令的特殊变量将一个值从低寄存器R0~R7转移到高寄存器R8~R15,或者从高寄存器到低寄存器。CMP指令可用于比较高寄存器和低寄存器的值。ADD 指令可用于将高寄存器的值与低寄存器的值相加。

---------------------------------------------------------------------------------------------------------------------------------

 

在编写Thumb指令时,先要使用伪指令CODE16声明,编写ARM指令时,则可使用CODE32伪指令声明。   

1、Thumb指令集没有协处理器指令、信号量指令、以及访问CPSR或SPSR的指令,没有乘加指令及64位乘法指令等,且指令的第二操作数受到限制;
2、大多数的Thumb数据处理指令采用2地址格式; 
3、除了跳转指令B有条件执行功能之外,其他指令均为无条件执行,而且分支指令的跳转范围有更多限制; 
4、数据处理指令是对通用寄存器进行操作,在大多数情况下,操作的结果放入其中一个操作数寄存器中,而不是放入第3个寄存器中;访问寄存器R8~R15受到一定的限制,除MOV、ADD指令访问R8~R15外,其他数据处理指令总是更新CPSR中ALU状态标志,访问寄存器R8~R15的Thumb数据处理指令不能更新CPSR中的ALU状态指示。 
5、Thumb状态下,单寄存器加载和存储指令只能访问寄存器R0~R7; 
6、LDM、STM指令可以将任何范围为R0~R7的寄存器子集加载或存储; 
7、PUSH、POP指令使用栈寄存器R13作为基址堆栈操作。 

大多数ARM数据处理指令采用的是3地址格式(除了64位乘法指令外)。

所有异常都会使微处理器返回到ARM模式状态,并在ARM的编程模式中处理。由于ARM微处理器字传送地址必须可被4整除(即字对准),半字传送地址必须可被2整除(即半字对准)。而Thumb指令是2个字节长,而不是4个字节,所以,由Thumb执行状态进入异常时其自然偏移与ARM不同。


16位Thumb指令集是从32位ARM指令集提取指令格式的,每条Thumb指令有相同处理器模型所对应的32位ARM指令。


只要遵循ATPCS调用规则,Thumb子程序和ARM子程序就可以互相调用。

推荐阅读

史海拾趣

HANA Micron公司的发展小趣事

除了工业检测仪表外,Hama在家用视听设备领域也取得了显著成就。公司推出的哈曼卡顿音响系列,以其卓越的音质表现和时尚的外观设计,迅速成为消费者心中的首选品牌。这些家用视听设备不仅为消费者带来了高品质的视听享受,也进一步丰富了Hama的产品线,提升了公司的市场竞争力。随着消费者对高品质生活的追求日益增强,Hama的家用视听设备业务有望继续保持快速增长。

浙江东亚电子(DongYa)公司的发展小趣事

浙江东亚电子注重企业文化的建设,致力于为员工提供一个良好的工作环境和发展平台。公司关注员工的学习和成长,为员工提供持续长效的发展机会和有竞争力的薪酬。同时,公司还积极开展各类文化活动和社会公益活动,增强员工的归属感和凝聚力。

这些故事框架展示了浙江东亚电子在电子行业中发展起来的几个重要方面。通过技术创新、产业布局拓展、国际市场开拓、品质管理提升和企业文化建设等方面的努力,公司不断壮大自身实力,成为行业内的佼佼者。

Cobham Semiconductor Solutions公司的发展小趣事

随着技术的不断成熟和市场需求的增长,Cobham Semiconductor Solutions意识到拓展市场的重要性。公司积极寻求国际合作,与多家知名企业建立了战略合作关系。通过合作,Cobham不仅获得了更多的市场机会,还进一步提升了自身的技术实力。同时,公司还积极开拓新兴市场,将产品推向全球,实现了业务的快速增长。

Directed Energy Inc公司的发展小趣事

在电子行业中,产品质量是企业生存和发展的关键。Directed Energy Inc深知这一点,因此始终将品质保障作为公司的核心竞争力之一。公司建立了严格的质量管理体系,从原材料采购到生产制造、再到产品检验和售后服务,每一个环节都严格把控,确保产品的高品质。这种对品质的执着追求赢得了客户的广泛信赖和好评,为公司赢得了更多的市场份额。

中环(Central)公司的发展小趣事

中环公司的前身可以追溯到1958年成立的天津市半导体材料厂。随着技术的不断进步和市场需求的增长,公司在1978年开始涉足区熔单晶硅制造领域,并于1981年正式进入太阳能单晶硅制造领域,成为国内最早涉足光伏领域的企业之一。这一转变不仅体现了中环对市场趋势的敏锐洞察,也为其后续在光伏领域的发展奠定了坚实的基础。

天二科技(EVER OHMS)公司的发展小趣事

进入90年代,随着电子技术的快速发展,市场对电阻器的要求也越来越高。天二科技紧跟行业趋势,投入大量资源进行技术研发和产品创新。1996年,公司成功推出贴片电阻器,这一产品凭借其优良的性能和稳定的品质,迅速赢得了市场的认可。此后,天二科技又陆续推出了耐高温电阻器、超薄贴片电阻器等一系列新产品,进一步丰富了公司的产品线。

问答坊 | AI 解惑

我想问下为什么要在单片机的i/o0上加上啦电阻

为啥要在i/op.0上的管脚加上拉电阻??…

查看全部问答>

急问:MP3电路原理图!请教高手,帮我分析下这个MP3原理图中各个组成部分的原理、处理器的功能。

http://blog.ednchina.com/Upload/Blog/2007/3/30/826adf84-7829-4de7-8065-2149d80d0c85.jpg 请高手帮我分析下这个MP3原理图中各个组成部分的原理、处理器的功能。 谢谢!…

查看全部问答>

求助Could not find file 'C:\WINCE500\PBWorkspaces\e\RelDir\Geode_x86_Release\MyDri

Could not find file \'C:\\WINCE500\\PBWorkspaces\\e\\RelDir\\Geode_x86_Release\\MyDriver.exe\' on disk 在生成操作系统镜像的时候出现的问题 怎么解决啊 是编译的过程中出现的问题 …

查看全部问答>

弱弱的问一个问题,Windows中的WinInet API在Window Mobile中能用吗?

例如HttpSendRequest、InternetReadFile之类的函数。 如果不可以,是否手机就不能通过http协议请求某个服务器的数据?…

查看全部问答>

2812的flash怎么写不进去了

我的2812芯片flash写入了一次之后,就没办法写了怎么回事的?CCS连接之后点on-chip flash programmer,对话框全是灰色的,只有一个onlock按钮可以点,但是点了之后弹出unlock failed,CCS提示解锁失败,设备锁定。 但是上次烧写的时候我并没有改动 ...…

查看全部问答>

mtd-utils的nandwrite问题

在移植mtd-utils时遇到个问题,就是使用nandwrite写入文件系统的映像(jffs2格式)时,出现:Unknown flash (not normal NAND)错误,通过查看源码,这个错误是在程序中检测flash的页面大小处打印的,  /* Make sure device page sizes are val ...…

查看全部问答>

大家有谁知道430F1612 驱动在哪里有啊?

大家有谁知道430F1612 驱动在哪里有啊? USB的 发到我邮箱里吧,或者QQ上也行。谢谢。我的QQ78468469…

查看全部问答>

求教 DSP 外扩 FLASH 的问题

我正在学DSP,有几个问题: 关于C5416 外扩的FLASH型号该怎么选择,做音频处理的话,一般用什么型号的FLASH? C5416如何跟FLASH连接? 如何读取数据及存储数据? 希望和各位DSP的大牛们能帮帮我,非常感谢!…

查看全部问答>

新手求助!关于uCOS移植到S3C44B0X问题 不甚感激

本人刚开始学uCOS系统,现在有一块S3C44B0X的板子,想把uCOS移植进去,于是在网上找了一些基于S3C44B0X的uCOS源码,但是不知道如何运用编译器把源码处理,自然也就不知道怎么把内核系统烧进板子,现在不知道如何下手,而且在网上找的资料都没有运用 ...…

查看全部问答>

Pca脉冲次数采集求助????

Pca采集的问题: 单片机C8051F120 我用Pca采集脉冲传感器个数,为什么进入单片机只有一个脉冲,而采集出来的是很多个呢?? Pca初始化: PCA0L    = 0x00;        PCA0H    = 0x00;    &nb ...…

查看全部问答>