字指令与位指令的区别,怎么区分字节操作指令和16位指令

首页 > 经验 > 作者:YD1662022-11-18 01:11:12

学习嵌入式开发,那当然会涉及到ARM状态和THUMB状态,很多初学者对这两个状态一直不是很理解,都是一直处于迷茫中,今天我就用实际的例子来教给你,对于arm状态和thumb状态的学习。

我们首先先来清楚一下:ARM处理器的工作状态分为3种,一是:ARM状态,二是:Thumb状态及Thumb-2状态,三是:调试状态

对于arm状态和Thumb状态我们可以用一个简单的比喻来先了解一下:我们可以把ARM核比作一个高中学校,那种包含普通高中和职业高中的。普通高中就相当于ARM状态,职业高中就相当于Thumb状态,这样还不能理解的话:可以认为 泡泡卡丁车 中普通模式和加速模式,,卡丁车加速要等到集气管加满,然后“ctrl”一下,就切换到了加速模式,气放完了就又回来了,不管加速模式还是普通模式都是在跑,只是速度不一样而已。

字指令与位指令的区别,怎么区分字节操作指令和16位指令(1)

点击获取1V1嵌入式学习规划,现在还送100G精选学习资料。

字指令与位指令的区别,怎么区分字节操作指令和16位指令(2)

而ARM状态和Thumb状态也是可以直接通过某些指令直接切换,都是在运行程序,只不过指令长度不一样而已。这个概念对初学者相当重要,因为当ARM Thumb是什么还没弄清楚,怎么能理解两种状态呢?通过上面的例子,我想大家都大概了解了ARM状态和Thumb状态的一些关系了吧,那么这样就可以深入了解ARM状态是什么,Thumb状态是什么了。

另外:ARM的M系列主要用Thumb指令,ARM9和A系列主要用ARM指令

S3C2440.S启动代码中根本就没用Thumb指令。

ARM状态此时处理器执行32位的字对齐的ARM指令,Thumb状态此时处理器执行16位的,半字对齐的THUMB指令。 切换程序:从ARM到Thumb: LDR R0,=lable 1 BX R0 从ARM到Thumb: LDR R0,=lable BX R0

1,ARM状态

arm处理器工作于32位指令的状态,所有指令均为32位

2,thumb状态

arm执行16位指令的状态,即16位状态

3,接下来就是arm与thumb间的切换了,他们到底是如何切换的,这些是你需要掌握的

(1)由thumb状态切换到ARM状态

寄存器最低位设置为0

BX指令:R0[0]=0,则执行BX

R0指令将进入arm状态

当处理器进行异常处理时,则从异常向量地址开始执行,将自动进入ARM状态。

(2)由arm状态切换到thumb

状态将寄存器的最低位设置为1

BX指令:R0[0]=1,则执行BX

R0指令将进入thumb状态

注意:ARM处理器复位后开始执行代码时总是只处于ARM状态;

Cortex-M3只有Thumb-2状态和调试状态;

由于Thumb-2具有16位/32位指令功能,因此有了thumb-2就无需Thumb了。

另外,具有Thumb-2技术的ARM处理器也无需再ARM状态和Thumb-2状态间进行切换了,因为thumb-2具有32位指令功能。

上面这些你都明白了吗,其实总的来说,arm状态和Thumb状态的他们最根本的区别就是指令的位数不同而已,就像arm状态是32位的,thumb是16位的,你只要把他们之间的这些东西都掌握好,那对你学习arm状态和thumb状态是很容易的,快快学起来吧!

栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.