arm9 子函数返回时,内核lr,pc以及流水线怎么工作的?

作者&投稿:裴畏 (若有异议请与网页底部的电邮联系)
arm 汇编pc ,lr是什么意思~

lr就是连接寄存器(Link Register, LR),在ARM体系结构中LR的特殊用途有两种:一是用来保存子程序返回地址;二是当异常发生时,LR中保存的值等于异常发生时PC的值减4(或者减2),因此在各种异常模式下可以根据LR的值返回到异常发生前的相应位置继续执行。

可以 看看百科

无论在何时,都是取指、译码、执行(ARM9还有访问存储和回写两步,但这不是算在流水线中的)三个过程。所以完整的步骤是:
比如例子:
0x10: command1 bl r0
0x14: command2
0x18: command3
比如当前正在执行0x10处的command1,那么PC已经开始在取指0x18处的command3了,而且0x14处的command2正在译码,注意,三个流水步骤是不可能有交叉或者重叠的,因为内部有同步机制,也就是说三个步骤同时开始,同时结束。因此执行bl r0时,要把PC-4,也就是0x14这个地址装到lr中。
但是同时,内核发现这是一个跳转指令,它会把流水线冲洗一遍,然后从新的地址出开始依次取指、译码、执行。也就是说从执行完bl指令开始,要经历装载lr,冲洗pipeline,新地址赋值给PC(取指),译码,才能到执行,这之间究竟需要消耗几个时钟周期,不能一概而论,指令周期那是51的概念,因为它没有流水线,没有缓存,ARM的指令时间不固定,不过根据手册的说明,一般一个指令消耗1~3个CPU周期。


新源县18224202699: arm9 子函数返回时,内核lr,pc以及流水线怎么工作的? -
门沈氟尿: 无论在何时,都是取指、译码、执行(ARM9还有访问存储和回写两步,但这不是算在流水线中的)三个过程.所以完整的步骤是:比如例子:0x10: command1 bl r00x14: command20x18: command3 比如当前正在执行0x10处的command1,那...

新源县18224202699: LDMFD SP!, {R0 - R12, LR, PC}^出错 -
门沈氟尿: 极有可能是SP值有问题,指向了一个不存在的地址或不可写的地址,发生了Data Abort错误,使得0x10处的异常向量被调用,而一般情况下,该向量处设置了一条死循环命令;建议再次调试程序,至该语句时,参看一下SP的值,看其是否指向了可写的物理地址;令,ARM9是支持MMU的,如mmu打开,要确保对SP所指地址进行了映射.

新源县18224202699: ARM9 下一条指令的地址为什么是 PC - 4 -
门沈氟尿: 有关ARM7/ARM9的实际区别我没有看懂,不过不管如何,在流水线中,当你取到(fetch)一个指令时,此时PC寄存器里面保存的是你取到的指令PC,正在译码的指令是PC-4,正在执行的指令是PC-8.正在执行的指令是不能打断的.当中断发生或者函数跳转时,系统把PC寄存器的值保存到了LR;当恢复的时候,要执行的指令是LR-4而不是LR,否则就丢失一个指令了.

新源县18224202699: arm9制作根文件系统,编译内核时出现如下情况relocation truncated to fit:R - RAM - CALL against sysmbol. -
门沈氟尿: MAX 50005 dp_max内存max*max*4你不觉得已经超过2G的内存了么

新源县18224202699: 如何处理ARM的异常和中断 -
门沈氟尿: 异常是需要中止指令正常执行的任何情形,包括ARM内核产生复位,取指或存储器访问失败,遇到未定义指令,执行了软件中断指令,或者出现了个外部中断等. 异常处理就是处理这些异常情况的方法.大多数异常都对应一个软件的异常处理程序,一个在异常发生时执行的软件程序. 每种异常都导致内核进入一种特定的模式.每个处理器模式都有一组各自的分组寄存器,处理器模式决定了哪些寄存器是活动的以及对cpsr的完全读/写访问. 同时,通过编程改变cpsr,可以进入任何ARM处理器模式.用户和系统模式,不通过异常进入,只能修改cpsr.

新源县18224202699: 当arm发生异常时,请简述cpu的响应过程 -
门沈氟尿: 包括如下: 1、 拷贝CPSR到SPSR_ 2、 设置适当的CPSR位: 改变处理器状态进入ARM状态;改变处理器模式进入相应的异常模式;设置中断禁止位禁止相应中断. 3、 更新LR_,这个寄存器中保存的是异常返回时的链接地址 4、 设置PC到相应的异常向量 英特尔最新推出了第六代酷睿产品,采用全新一代的架构,性能提示、功能降低、续航更加长久、无论办公学习、畅玩游戏或者观看超高清影音,均得心应手,您也可以试试. 感谢您对英特尔产品的支持!

新源县18224202699: 如何使用arm汇编指令实现结构化编程 -
门沈氟尿: ARM汇编程序特点:l 所有运算处理都是发生通用寄存器(一般是R0~R14)的之中.所有存储器空间(如C语言变量的本质就是一个存储器空间上的几个BYTE).的值的处理,都是要传送到通用寄存器来完成.因此代码中大量看到LDR,STR指令来...

新源县18224202699: ARM9结构与特点? -
门沈氟尿: 以ARM9主流的内核ARM9E-S为例介绍ARM9处理器的主要结构及其特点:(1)32bit定点RISC处理器,改进型ARM/Thumb代码交织,增强性乘法器设计.支持实时(real-time)调试;(2)片内指令和数据SRAM,而且指令和数据的存储器容...

新源县18224202699: 通常所说的 arm9内核,arm11内核 指的是什么 -
门沈氟尿: 指的是cpu的最主要的部分,一般包括运算器,控制器,存储器,是cpu的核心,平时人们说的CPU,包括内核和一些外设,这些外设完成一定的功能,不同环境下用的cpu外设相差很大.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网