历史上的今天
返回首页

历史上的今天

今天是:2024年10月21日(星期一)

正在发生

2018年10月21日 | ARM指令状态切换到Thumb指令状态

2018-10-21 来源:eefocus

  1.  


  2.     AREA Arm_to_Thumb,CODE, READONLY  

  3.     ENTRY  

  4.     CODE32  

  5. start  

  6.     ldr r0,=aaa+1  

  7.     mov r3,#18  

  8.     bx r0  

  9.     CODE16  

  10. aaa   

  11.     mov r1,#12  

  12.     mov r2,#10  

  13.     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

  1.     AREA Arm_to_Thumb,CODE, READONLY  

  2.     ENTRY  

  3.     CODE16  

  4. start  

  5.     ldr r0,=zhangsan  

  6.     mov r3,#18  

  7.     bx r0  

  8.     CODE32  

  9. zhangsan   

  10.     mov r1,#12  

  11.     mov r2,#10  

  12.     END 


推荐阅读

史海拾趣

AMD(超微)公司的发展小趣事
  1. 公司成立与早期发展:AMD(Advanced Micro Devices)公司成立于1969年,由Jerry Sanders在美国加利福尼亚州圣克拉拉创立。最初,AMD致力于生产挑战Intel在x86处理器市场的产品,但起初面临着市场份额不足和技术挑战等问题。然而,随着时间的推移,AMD逐渐在市场上获得了一席之地,并推出了一系列创新产品。

  2. x86处理器市场竞争:AMD在x86处理器市场与Intel展开了激烈的竞争。1991年,AMD推出了第一款x86兼容处理器386DX-40,开始了与Intel的竞争。此后,AMD不断推出更快、更强大的处理器,如K6系列、Athlon系列等,一度取得了一定的市场份额。

  3. ATI收购与图形处理器发展:为了拓展业务,AMD于2006年收购了图形处理器制造商ATI Technologies。这一收购使AMD进入了图形处理器市场,并推出了一系列创新的图形处理器产品,如Radeon系列。AMD通过不断推出高性能、高度集成的图形处理器,赢得了广大用户的青睐。

  4. 全球Foundry战略:为了降低制造成本并提高生产效率,AMD实施了全球Foundry战略。2008年,AMD成立了GlobalFoundries,将自己的制造业务转移给这家独立的半导体制造公司。这一举措使AMD得以专注于设计和研发,提升了公司的竞争力。

  5. 技术创新与新市场拓展:除了在x86处理器和图形处理器市场取得成功外,AMD还不断进行技术创新,拓展新的市场。例如,AMD在数据中心领域推出了EPYC系列服务器处理器,致力于满足云计算和大数据处理的需求。此外,AMD还在游戏主机市场与Sony和Microsoft等公司合作,提供高性能的处理器和图形处理器。

这些故事展示了AMD在其创立以来的发展历程,包括在x86处理器市场的竞争、图形处理器领域的扩展、全球Foundry战略的实施以及在新兴市场的技术创新和市场拓展等方面取得的成就。

DSP Group Inc公司的发展小趣事

在智能语音领域,DSP Group凭借其深厚的技术积累和创新能力,取得了显著的突破。公司推出了一系列智能语音处理技术和产品,如SmartVoice系列语音处理芯片和算法套件等。这些技术和产品不仅为用户提供了更加自然、智能的语音交互体验,还为智能家居、汽车电子等领域的发展提供了有力支持。

Cosel公司的发展小趣事

随着全球化进程的加速,Cosel公司开始将目光投向国际市场。1990年,公司成立了U.S.ELCO INC.(现名为COSEL U.S.A.,INC.),正式进入美国市场。随后,公司又设立了欧洲常驻办事处,进一步拓展了欧洲市场。这些举措使得Cosel公司的产品和服务能够覆盖更广泛的地区,为公司带来了更多的商机和发展空间。

Elektron公司的发展小趣事

Elektron公司的故事始于1942年,由威利·科伯以Elektron物理技术设备工厂Kerber的名称成立。当时,该公司主要生产基于汞蒸气整流器的固定电池电源和船用电池充电器。这些产品在市场上取得了良好的反响,为公司的发展奠定了坚实的基础。在随后的几年里,Elektron不断扩大产品范围,开始涉足汽车行业的电池充电器以及焊接和切割工艺的电源等领域。

Agilent Technologies公司的发展小趣事

随着技术的不断进步和市场需求的不断变化,Elektron公司不断进行技术创新和产品升级。公司成功开发出适用于船上使用的单点和多点焊接整流器以及弧光灯的电影整流器等产品,进一步扩大了市场份额。同时,Elektron还注重产品质量和性能的提升,通过引进先进的生产设备和工艺,不断提高产品的可靠性和耐用性。

Amerace Electronic Components公司的发展小趣事

随着公司技术的不断提升和产品质量的持续保证,Amerace Electronic Components公司开始积极拓展全球市场。公司通过与国际电子行业的领军企业建立战略合作关系,成功将产品打入国际市场。同时,Amerace还在全球范围内设立了多个生产基地和销售网络,以满足不同国家和地区的客户需求。这种全球化的战略布局使得Amerace在全球电子元件市场中占据了重要地位。

问答坊 | AI 解惑

各种交换机的数据接口类型一览

作为局域网的主要连接设备,以太网交换机成为应用普及最快的网络设备之一,同时,也是随着这种快速的发展,交换机的功能不断增强,随之而来则是交换机端口的更新换代以及各种特殊设备连接端口不断的添加到交换机上,这也使得交换机的接口类型变得非 ...…

查看全部问答>

求“走进嵌入式开发的大门_刘贤玉”PPT版本资料一份

哪位朋友有这个版本的资料啊?能否共享出来啊!在下先 了…

查看全部问答>

顶尖创意来自高度好奇心

客户包括微软、苹果及百事可乐等业界巨头的顶尖创意管理公司IDEO的执行长兼总裁布朗(Tim Brown)把问题看得比答案更重要。 他回忆自己的第一份专业设计工作是在英格兰北部的一家小公司,那是一家从工业大革命时期开始营运,生产木工机械的老公司 ...…

查看全部问答>

Microsoft编写优质无错C程序秘诀

Microsoft编写优质无错C程序秘诀,主要介绍微软编程习惯,非常不错的编程规范资料,…

查看全部问答>

SD卡问题

最近在调试SD卡驱动。。。。我在卡刚插入时用了很多打印,发现。。。在我插入时读取卡的分区表时突然把卡拔掉。。这是机器死掉了。。。。。问下有过SD卡经验的人。。。这里有什么大的问题呢…

查看全部问答>

vxworks模块加载

我用Tornado2.2(vxworks5.5),在虚拟机上建立文件系统FAT16格式,通过ftp从windows向目标机vxworks传递应用模块api.o,文件 可以用ls查看到,在目标机sell上运行ld(1,0,\"C:/api.o\"),报错\"error loading,errno=0x3d0001\".该文件在Tornado用target se ...…

查看全部问答>

高价求购 Tornado V 2.2.1的序列号

高价求购 Tornado V 2.2.1的序列号 联系方式:站内消息.…

查看全部问答>

12月3号的颁奖什么情况啊

本帖最后由 paulhyde 于 2014-9-15 03:41 编辑 2011电子设计大赛,12月3号的颁奖什么情况啊  …

查看全部问答>

开始富士通开发板的例程调试遇到的问题的解决办法

https://home.eeworld.com.cn/my/link.php?url=https://bbs.eeworld.com.cn%2Fviewthread.php%3Ftid%3D326670%26amp%3Bpage%3D1%26amp%3Bextra%3D%23pid1306641 由于原帖不可以再编辑了,重开一个贴! 用这个板子有问题的可以看看我的原帖,有可 ...…

查看全部问答>

C2000 Lauchpad 什么时候发货啊?

C2000 Lauchpad 什么时候发货啊?等了20天了。着急啊!!!…

查看全部问答>