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编程进阶之二 —— ATPCS与混合编程
下一篇:ARM裸机程序之存储管理器控制SDRAM
推荐阅读
史海拾趣
2012年,由于无法承受巨大的财务压力和市场竞争压力,ELPIDA宣布破产保护。随后,美国美光科技公司(Micron Technology)以较低的价格收购了ELPIDA。这一事件标志着日本在DRAM领域的彻底失败,同时也为美光公司带来了重要的技术和市场资源。
1976年,庞巴迪公司的航空业务经历了重大变革。其加拿大航空子公司被加拿大政府收购,成为加拿大主要的航空企业。在此期间,庞巴迪在电子系统方面的研发能力得到了进一步提升。公司开始涉足更先进的航空电子技术,如自动驾驶系统、导航系统等,为现代航空业的发展做出了重要贡献。
APTA Group Inc深知,单打独斗在竞争激烈的电子行业中难以长久立足。因此,公司积极寻求与其他企业的战略合作。通过与知名电子产品制造商的合作,APTA得以将其技术应用于更广泛的领域,同时也借助合作伙伴的市场渠道,提高了品牌知名度和市场占有率。这种互利共赢的合作模式,为APTA的快速发展提供了有力支撑。
在电子行业中,产品质量是企业生存和发展的关键。CYMBET公司深知这一点,始终将质量管理作为重中之重。公司建立了完善的质量管理体系,从原材料采购、生产制造到产品检测等各个环节都严格把控质量。同时,CYMBET还引进了先进的生产设备和检测仪器,确保产品的可靠性和稳定性。这种对质量的执着追求使得CYMBET的产品在市场上获得了良好的口碑和广泛的认可。
随着全球制造业的转型升级,Empro Technology Corp也积极响应,开始了智能制造的探索和实践。公司引进了先进的生产设备和管理系统,实现了生产过程的自动化和智能化。这不仅提高了生产效率,也保证了产品质量和稳定性。
随着产品的热销,Empro Technology Corp开始积极寻求市场拓展和战略合作。公司与国际知名电子产品制造商建立了紧密的合作关系,共同研发新产品,共同开拓市场。同时,公司还通过参展国际电子展等方式,不断提升品牌知名度和影响力。
前言 本系列文章将结合近年来不断在各种硬件(包括 CPU、芯片组、PCI Express 等各种最新总线标准以及外设)上新增的节能技术,从 Linux® 2.6内核及整个 software stack (包括 kernel、middleware 以及各种用户态 utility)如何添加对这些创 ...… 查看全部问答∨ |
|
PB Debugger Warning: Debugger service map is set to none. If your image has debugging support it may not boot properly. PB Debugger Cannot initialize the Kernel Debugger. PB Debugger Debugger could not init ...… 查看全部问答∨ |
手持式设备的要求 1. 内置打印机,有外置打印机接口,可使用外部打印机快速打印 2. 支持MODEM 电话拨号连接 3. 有ETHernet 网络接口 4. 显示屏 3.0寸以上黑白 5. 支持二次开发,至少提供API,驱动等 6. 内置大容量可充电电池,至少保障工作24 ...… 查看全部问答∨ |
现在我在做毕设,就是要用WAVECOM发彩信 型号:wavecom Q2406 PL 002 在我往串口发送了 AT+CGDCONT=1,"IP","CMWAP" ATD*99***1# 之后,服务器给我重复了好多次,发了这样的一段数据:(我用了ACCESSPORT来显示串口收到的16进制数据) ...… 查看全部问答∨ |
我上传的资料售价是1芯币,被下载了100多次怎么不见我的芯币有所增加呢?哪位版主帮我解释下? [ 本帖最后由 ming1005 于 2010-9-16 21:03 编辑 ]… 查看全部问答∨ |
开始用的好好的系统,在调试程序的时候出现硬件初始化不成功的错误,然后重进CCS,接着就调出对话框如下错误:can\\\'t initialize target cpu error 0x80000240/-200 fatal error ...… 查看全部问答∨ |
|
做一个FFT的实验,有个程序如下: /*构造要做FFT的序列,按实部0、虚部0,实部1,虚部1...顺序构造,虚部为0*/ for (i=0;i<nx1;i++) { x1[2*i]=(short)((cos(PI*i/10.0)+ ...… 查看全部问答∨ |