AREA Arm_to_Thumb,CODE, READONLY
ENTRY
CODE32
start
ldr r0,=aaa+1
mov r3,#18
bx r0
CODE16
aaa
mov r1,#12
mov r2,#10
END
请看上面的代码,首先看到第一条指令,ldr r0,=aaa+1,aaa可以理解成一个函数的名字,那么函数aaa执行的时候是不是有第一条指令啊,这条指令是什么呢,那当然是mov r1,#12这条指令了,所以ldr那条指令的意思是:函数aaa的执行时的pc值+1,给r0寄存器,什么是pc值,就是程序计数器的意思,不懂的可以百度一下咯。至于这里为什么要加1,先不要急,看下面的语句,第二条语句是mov r3,#18,这个应该很好理解,我就不解释了,那么我把这么简单的指令放在这里干什么呢,为了说明这个程序计数器pc的变化过程,以便读者更好的理解随着程序的运行,pc值是怎么变化的。下面我贴一张调试到mov r3,#18那条指令是的图片,注意调试到mov r3,#18这条指令,并这条指令并没有运行,只不过是取址的状态,好了,话不多说,贴图:
注意上面的图片中的黄色箭头是我按单步执行后,按了一下后,箭头所在的位置,这时的R15的值是0x00000004,表示正在执行的指令的地址,当R15的值为0x00000000时,黄色箭头你说在哪里呢,当然是在ldr那条指令那里了,并且表示ldr指令并没有执行。请大家再看,R0的值为什么是0x0000000D呢,R0等于aaa+1,那么aaa是不是就等于十六进制的C啊,等于十进制的12啊,为什么会等于12呢,这就和R15寄存器有关了,待会运行到bx指令的时候再解释,我再单步进入,看截图:
大家只要看黄色的箭头即可。接下去是运行bx指令了,bx指令是什么东西呢,你们可以查阅相关资料,首先bx指令格式:BX{cond} Rm ,指令功能,BX指令跳转到Rm指定的地址去执行程序,若Rm的bit0为1,则跳转时自动将CPSR中的标志T置位,即把目标地址的代码解释为Thumb代码,如果为bit0位为0的话,则跳转时自动将CPSR中的标志T复位,即把目标地址的代码解释为ARM代码。
所以你先看看现在的R0的值是0x0000000D,bit0位为1,所以是把ARM指令状态跳转到Thumb指令状态,那么BX既然是一种跳转指令,则应该是偶数啊,D等于13不是偶数呀,这里我给你算算哈,当黄色的箭头指向mov r1,,#12,时,此时R15寄存器的值肯定是0x0000000C了,因为bx指令也是种ARM状态下的指令嘛,所以,当黄色光标指向mov r1,#12时,R15的值是0x0000000C了,这时你应该清楚为什么R0的值为0x0000000D了,就是C+1嘛,1只不过给个信号,我的程序要从ARM状态跳转到Thumb状态的程序中执行了。
T
所以请你猛看这里CPSR寄存器中的T位:从0(ARM状态)变成1(Thumb状态)
怎么验证已经到Thumb状态了呢,请看我再次运行哈:
这张图片中的R15是0x0000000E,上张图片的R15是0x0000000C,相差为2,所以说明已经转化成Thumb状态了,因为Thumb每条指令占用2个字节,16位。还有一点我想说明的是其实在你程序运行之前,每条指令的所对的PC值,是确定的,更为直观点的说法是,黄色箭头此时指向哪一条指令,这时的PC值你确定的,可以笔算的,注意全文所说的PC值就是R15寄存器的值。aaa只不过是一个函数的名字,取啥名儿都无所谓,zhangsan也行啊,哈哈。
啰嗦了半天,不知道有没有把这个转化过程讲清楚,如果还有不懂的,可以直接留言啊。
下面我想说说Thumb指令状态切换到ARM指令状态,原来和上述一样,这里我只贴个短小而精悍的代码了:
[plain] view plain copy
AREA Arm_to_Thumb,CODE, READONLY
ENTRY
CODE16
start
ldr r0,=zhangsan
mov r3,#18
bx r0
CODE32
zhangsan
mov r1,#12
mov r2,#10
END
关键字:ARM 指令状态 Thumb
引用地址:
ARM指令状态切换到Thumb指令状态
推荐阅读最新更新时间:2024-03-16 16:17
如何处理ARM的异常和中断
异常和中断处理,负责处理错误,中断和其他由外部系统触发的事件。 ARM有7种异常,数据中止、快速中断请求、中断请求、预取址中止、软件中断、复位及未定义指令。 2种类型的中断,第一类是由外设引起的,即IRQ和FIQ。第二类是一条引发中断的特殊指令SWI。两种中断都会挂起正常的程序执行。 异常是需要中止指令正常执行的任何情形,包括ARM内核产生复位,取指或存储器访问失败,遇到未定义指令,执行了软件中断指令,或者出现了个外部中断等。异常处理就是处理这些异常情况的方法。大多数异常都对应一个软件的异常处理程序,一个在异常发生时执行的软件程序。 每种异常都导致内核进入一种特定的模式。每个处理器模式都
[单片机]
ARM继续扩张物联网数据市场,收购Treasure Data
作者: Treasure Data 首席执行官及联合创始人Hiro Yoshikawa 随着全球领先的芯片技术和物联网服务公司Arm收购Treasure Data,历史发展将迈入 新阶段 。这是一个充满机遇的时代,作为Arm的一部分,Treasure Data将从其巨大的投资实力中获益。 Arm的收购对Treasure Data和客户意味着什么? 自Treasure Data 2011年创办以来,始终坚持的核心愿景和使命——从根本上改变科技与人类的交互方式。我们致力于为未来的商业经济赋能, 让数据成为一种新的通货 。对于任何企业而言,具备理解数据并将其转化为具有商业可行性的洞察力的能力将提升其竞争优势。Treasu
[半导体设计/制造]
Arm Linux 内核页表的段式映射
Linux启动之初,内核为自己建立的是段式内存映射,而不是页式映射。 映射表(PGD)从虚拟地址0xc0004000开始,每项4字节,每项对应1M内存空间,每项的高12位就是这1M内存的高12位地址。 一开始,内核不会为所有内存建立映射,只会映射必要的一部分,这部分代码在arch/arm/kernel/head.S中由汇编代码完成。 以S3C6410为例,下面是在刚刚进入start_kernel()后打印出来的一段内核映射表。注意内核自身的映射表项是从0xc0007000地址开始。因为从0xc0004000开始的是整个4G空间的表,内核内存只占最高的那1G,所以要加一个偏移量:3G/1M * 4bytes = 0x3000。
[单片机]
AI芯片,开战
春节也没有阻挡AI跨越的脚步,2月16日凌晨,美国OpenAI公司的视频生成模型Sora再次冲击AI界,成为继ChatGPT后又一现象级应用。Sora的问世令世人惊呼:现实不存在了。 短短几日,AI又掀起新一轮浪潮,而作为其核心动力的AI芯片,也迎来巨变。 打倒英伟达 看着英伟达赚钱,市场玩家分外眼红。为了抢占市场,巨头不惜砸大钱布局市场。 先是OpenAI首席执行官山姆·奥特曼(Sam Altman)万亿美元造芯片,再是自嘲为“秃头骗子”的孙正义1000亿美元造AI芯片。 山姆·奥特曼因为万亿美元而登上头条新闻,他曾表示半导体行业需要他,而建立庞大的芯片制造网络需要通过向全球投资者寻求大量资金,他则需要
[嵌入式]
纳入Cortex A50系列 ARM与台积电扩大合作
ARM及台积电扩大合作,安谋针对台积电28纳米HPM制程,推出以ARMv8指令集为架构的Cortex-A57与Cortex-A53处理器优化套件矽智财(POPIP)解决方案,并同时发布针对台积电16纳米鳍式场效晶体管(FinFET)制程技术的POPIP产品蓝图。
处理器优化套件(POP)技术是ARM全面实作策略中不可或缺的关键要素,能使ARM的合作伙伴得以突破功耗、性能与面积最佳化等限制,迅速地完成双核与四核的实作。此外,这项技术还能协助以Cortex处理器为基础的系统单芯片(SoC)进行实作最佳化、降低开发风险、并缩短产品上市的时程。
Cortex-A57与Cortex-A53处理器,均属于64位元ARM架构处理器,可独
[单片机]
基于ARM和Linux的字符采集与识别系统
传统纸质读物的数字化以及诸如条码识别等字符识别系统都离不开图像的读入与识别,然而目前广泛使用的字符识别设备将这两部分独立开,即由图像读入设备(如扫描仪)和安装于计算机上的识别软件构成,但这样的设备构成离不开安装识别软件的计算机,造成成本上升和使用不便。随着电子产品的普及,具有摄像功能的电子产品及其上的识别软件也可以构成一个字符识别系统,但是这种识别系统的识别速度受到摄像头调焦的限制,难以广泛应用。文中提出的便携式字符采集和识别系统,其硬件平台是基于接触式图像传感器(CIS)与ARM9处理器S3C2410,软件平台是基于嵌入式Linux系统,可以克服以上两种设备的缺点,同时满足方便性和快速性的要求。另一方面,由于设备基于Li-n
[单片机]
基于ARM9的嵌入式智能车载系统设计
引 言 随着社会经济的发展,汽车已成为人们工作、生活中不可缺少的一种交通工具。在当前的汽车产业中,出于对安全性、舒适性、方便性、低公害、低成本的要求,开发了各种各样的电子控制系统。本文设计一种基于ARM9 S3C2410A的智能车载系统,它能够通过GPS全球定位系统和GPRS无线通信技术,实现车辆定位以及车辆与控制中心之间的数据通信,构建CAN总线控制模块用于采集车辆主要部分的工作状态,实时监控汽车的主要技术参数,并通过LCD模块显示车载信息的综合信息。 1 智能车载系统的功能 车载智能导航终端应具有如下功能: 车辆定位 它指通过GPS全球定位系统获取车辆的当前所处位置,包括经度、纬度、运动速度、标准时间以及海拔高
[单片机]
基于ARM与MEMS器件的微惯性测量装置设计
在仿生推进机理的研究中,精确测量鱼类尾鳍拍动参数对于鱼类仿生推进机理研究及工程应用具有重要的意义;然而,目前研究者大多采用分析高速摄像机拍摄的图像获得参数的观测方法。这种方法受到环境与设备的限制,结果精确度较差。本设计是一种基于MEMS器件的生物运动微惯性测量装置。利用该装置实现了对SPC-III机器鱼尾鳍拍动参数的精确测量,为国内首次利用MEMS器件进行的活体鱼尾鳍拍动参数测量实验打下了基础,为机器鱼仿生推进设计理论提供支撑。 1 设计要求和系统结构 根据活体鱼类的生物特征和实验本身的特点,微惯性测量装置应该满足下列设计要求:体积小,质量轻,功耗低,采集频率和采集精度高,防水密封性能良好。为了实现这些需求,微
[单片机]