设为首页 - 加入收藏
广告 1000x90
您的当前位置:三五图库香港35图库大全 > 标号 > 正文

ARM汇编 MOV PCLR

来源:未知 编辑:admin 时间:2019-06-20

  1》.当使用bl或者blx跳转到子过程的时候,r14保存了返回地址,可以在调用过程结尾恢复。

  2》.异常中断发生时,这个异常模式特定的物理R14被设置成该异常模式将要返回的地址。

  另外注意pc,在调试的时候显示的是当前指令地址,而用mov lr,pc的时候lr保存的是此指令向后数两条指令的地址,大家可以试一下用mov pc,pc,结果得到的是跳转两条指令,这个原因是由于arm的流水线造成的,预取两条指令的结果.

  对于我们之前分析的start.S中,涉及到很多的汇编的语句,其中,可以看出,很多包含了很多种不同的语法,使用惯例等,下面,就对此进行一些总结,借 以实现一定的举一反三或者说触类旁通,这样,可以起到一定的借鉴功能,方便以后看其他类似汇编代码, 容易看懂汇编代码所要表达的含义。

  对应地,和上面的例子中的C语言中的编号和掉转到标号的goto类似,汇编中,对于定义了标号,那么也会有对应的指令,去跳转到对应的汇编中的标号。

  中的.global,就是声明_start为全局变量/标号,可以供其他源文件所访问。

  即汇编器,在编译此汇编代码的时候,会将此变量记下来,知道其是个全局变量,遇到其他文件是用到此变量的的时候,知道是访问这个全局变量的。

  因此,从功能上来说,就相当于C语言用extern去生命一个变量,以实现本文件外部访问此变量。

  1.1.4. 汇编中用bl指令和mov pc,lr来实现子函数调用和返回

  其作用是,除了b指令跳转到label之外,在跳转之前,先把下一条指令地址存到lr寄存器中,以方便跳转到那边执行完毕后,将lr再赋值给pc,以实现函数返回,继续执行下面的指令的效果。

  然后在cpu_init_crit部分,执行完毕后,最后调用 mov pc, lr,将lr中的值,赋给pc,即实现函数的返回原先 bl cpu_init_crit下面那条代码,继续执行函数。

  而关于C语言中,函数的跳转前后所要做的事情,都是C语言编译器帮我们实现好了,会将此C语言中的函数调用,转化为对应的汇编代码的。

  函数调用完毕后:将之前保存的lr的值给pc,实现函数跳转回来。继续执行下一条指令。

  而如果你本身自己写汇编语言的话,那么这些函数跳转前后要做的事情,都是你程序员自己要关心,要实现的事情。

  而该标号中对应的位置,所存放的是一个word的值,具体的数值是TEXT_BASE,此处的TEXT_BASE是在别处定义的一个宏,值是0x33D00000。

  不过,对于这样的类似于C语言中的指针的汇编中的标号,在C语言中调用到的话,却是这样引用的:

  就很容易看出来,就是把标号2这个地址值,给pc,即实现了跳转到标号2的位置执行代码,就相当于调用一个函数,该函数名为标号2.

  第二种的意思,和上面类似,是将C语言中某个函数的函数名,即某个地址值,给pc,实现调用C中对应的那个函数。

  其中,形式1是直接通过mov指令来将0这个值赋给r1寄存器,和形式2中的通过ldr伪指令来将0x3ff赋给r1寄存器,两者区别是,前者是因为已经确定所要赋的值0x0是mov的有效操作数,而后者对于0x3ff不确定是否是mov的有效操作数

  (如果不是,则该指令无效,编译的时候,也无法通过编译,会出现类似于这样的错误:

  (1)如果该操作数是mov的有效操作数,那么ldr伪指令就会被翻译成对应的mov指令。

本文链接:http://1763inn.com/biaohao/917.html

相关推荐:

网友评论:

栏目分类

现金彩票 联系QQ:24498872301 邮箱:24498872301@qq.com

Copyright © 2002-2011 DEDECMS. 现金彩票 版权所有 Power by DedeCms

Top