完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
一、为什么一个芯片需要thumb和arm两套指令集 许多复杂的功能在复杂指令集(CISC)处理器上执行只需要单一的一条指令,即可,虽然可能有点慢,在精简指令集处理器上可能需要多条指令,所以在精简指令集(RISC)CPU上为了减少额外的指令对内存的消耗,考虑引入thumb指令集到处理器。 现在最受欢迎的32位微处理器许多都使用RISC技术,不像CISC处理器,RISC引擎每一个时钟周期(个人感觉应该是指令周期),都能执行一条指令,而CISC每条指令执行消耗的时钟周期是不一样的。 精简指令集的优势是设计简单,每条指令执行消耗时钟周期固定,劣势是碰上复杂的功能需要多条指令才能实现复杂指令及一条指令所能完成的功能,所以存储指令需要消耗额外的内存空间; 复杂指令集的优势是指令丰富,有些精简指令集需要很多条指令完成的功能,复杂指令集只需要一条指令,虽然可能有点慢,但是节约内存空间,劣势是,芯片设计复杂,有些复杂指令使用频率很低,每条指令执行消耗的时钟周期都不同。 所以精简指令集的arm架构引入thumb指令减少存储指令对内存的消耗,在嵌入式领域内存空间是更为紧急的资源。 二、arm指令集和thumb指令集的区别 Thumb指令集由16位指令组成,它们作为标准ARM的32位指令子集的简写,每条Thumb指令都可以通过等效的32位ARM指令来执行。然而,并不是所有的arm指令都在thumb子集中可用;例如,thumb指令无法访问状态或协处理器寄存器。此外,一些可以在arm指令中完成的功能只能通过thumb指令序列来模拟。 实际上arm只包含一种指令集那就是32-bit的arm指令集。当处理器运行在thumb状态时,处理器把从内存中读取的thumb指令扩展成与它等价的32-bit的arm指令,然后执行。 thumb指令和与它等价的arm指令的不同,并不是功能上的不同,而是在指令执行前的取指(fetch)和译码(interpret)的不同。由于将16-bit的指令扩展成32-bit的指令是通过芯片上专门的硬件完成的,所以这一过程并不会影响整个执行的速率,反而更狭小的16-bit的thumb指令在内存的利用上更有优势。 Thumb指令集提供了典型应用程序所需的大部分功能。算术和逻辑操作,加载/存储数据移动,以及条件和无条件的分支跳转。任何用C编写的代码都可以在Thumb状态下成功执行。但是,设备驱动程序和异常处理程序通常必须至少部分在ARM状态下编写。 寄存器组的区别 在arm状态的用户模式下,17个寄存器是可见的;thumb状态下12个寄存器可见,并且它们是在物理上和arm状态下完全相同的寄存器。所以在软件运行在arm状态和thumb状态时,可以通过R0-R7来传递数据,这在实际的应用中非常常用。 最大的寄存器不同点是SP寄存器。在Thumb状态下,有专门的助记符PUSH和POP来操作SP寄存器,但是这两个助记符在arm状态下是不存在的,它们假设以R13为堆栈指针,并将助记符转换成arm状态下的load和store指令。 CPSR寄存器保存处理器模式(用户或异常标志)、中断掩码位、条件代码和thumb状态位。thumb状态位(T)表示处理器的当前状态:0表示ARM状态(默认),1表示Thumb状态。虽然CPSR中的其他位可能在软件中被修改,但直接写入T是危险的;不适当的状态改变的结果是不可预测的。 三、arm状态和thumb状态的转换 有几种方法可以正确地进入或离开thumb状态。常用的方法是通过BX(Branch and Exchange, BX)指令。如果您使用的是版本5架构的ARM,BLX( Branch, Link, and Exchange)指令也可以切换。在分支跳转时,CPU检查目标地址的最小有效位(LSb)以确定新的状态。因为所有的ARM指令都会在32位或16位边界上对齐,所以地址的LSB在分支跳转中并没有使用,所以可以用目标地址的最低位来决定是否切换到arm状态或者thumb状态。如果在arm状态下执行bx指令或者blx指令跳转时,目标地址的最低bit为1,则先切换处理器到thumb状态,然后执行目标地址处的代码;如果在thumb状态下执行bx或者blx指令跳转时,目标地址最低bit为0,则先切换到arm状态,再执行目标地址处的代码。 另外一种方法是,当异常出现时,处理器会自动以arm状态开始执行中断向量表指定地址处的代码,当然如果需要的话,在异常处理的过程用也可以通过分支跳转来切换到thumb状态。 异常返回时,会根据SPSR寄存器中存储的T状态,来决定返回到thumb状态还是arm状态。 原作者:Lamar Davis |
|
相关推荐 |
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
飞凌嵌入式ElfBoard ELF 1板卡-CAN编程示例之开发板测试
714 浏览 0 评论
该问题是用APP给芯海科技的CST92F25芯片发指令是出现的
2397 浏览 1 评论
821 浏览 0 评论
1589 浏览 1 评论
2397 浏览 1 评论
浏览过的版块 |
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-24 18:08 , Processed in 0.683732 second(s), Total 71, Slave 54 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号