精华内容
下载资源
问答
  • ARM当前PC值

    2014-07-07 09:51:17
    ARM是三级流水线框架,所以 PC值 = 当前程序执行位置 + 8

    ARM是三级流水线框架,所以

    PC值 = 当前程序执行位置 + 8

    展开全文
  • 根据评论指出,标题有误导,将 PC值 = 当前指令地址 + 8 更正为 PC值=当前程序执行地址 + 8 ------ 思考个小问题,处理器执行一条指令需要几个时钟周期。 对于软件工程师来说,印象流我们可能会觉得执行一条...

    ---2019.1.14 Update

    根据评论指出,标题有误导,将 PC值 = 当前指令地址 + 8 更正为  PC值=当前程序执行地址 + 8

    ------

    思考个小问题,处理器执行一条指令需要几个时钟周期。 
    对于软件工程师来说,印象流我们可能会觉得执行一条指令一个时钟周期嘛,一条指令算是一个最小的原子操作,不可能再细分了吧。 
    如果看看诸如《see mips run》,《arm体系架构》等书籍就会了解到,这个问题可没这么简单了,因为处理器设计中使用了流水线技术。 
    一条指令还是相当复杂的,处理器在一个时钟周期内肯定是完不成的,可能需要好多个时钟周期来完成执行。如果这样让处理器执行完一条指令,再去执行另一条,处理器的效率是很低的,假如一条指令是5个时钟周期完成,对于500MHZ的处理器串行运行指令,1秒内取指100000000次。 
    因此处理器引入了流水线技术,将一条指令划分为多个功能,由不同的功能部件来执行,并且这些功能部件可以并行工作。下面是一个arm7的三级流水线运行图。 
    这里写图片描述 
    流水线划分为取指 译码 执行,但并不是仅需3个时钟周期即执行完指令。因为执行单元模块的操作较多,可能需要多个周期,取指 译码一般是一个时钟周期,这样可以看出虽然一条指令完成需要多个时钟周期,但是总体来说看在每个时钟周期都有一条指令开始取指。如果我们的处理器是500MHZ,则1秒内取指了500000000次。 
    不同的处理器设计时流水线级数不一样,现在主流的有三级 五级 七级,增加流水线级数,简化流水线的各级逻辑,可以提高处理器的性能。 
    回答咱们开头的问题也就明白了,一条指令需要的时钟周期还真不固定,这得看处理器的流水线级数,也得看该指令的复杂度,在执行阶段需要几个时钟周期。 
    对于流水线各级具体工作这里就不细说了,网上文章很多,毕竟咱们是做软件的,硬件点到为止,流水线各级工作是有处理器内部逻辑单元来完成的,对于软件来说都是不可见的,软件可操作的最小原子操作就是指令。 
    不过呢,处理器的流水线技术在有一个事情对咱们软件造成了影响,那就是PC值。 
    据我了解的处理器流水线设计,前三级基本都是取指 译码 执行。处理器的PC寄存器中存储的是处理器的取指地址,根据上述流水线机制,而我们的处理器执行的指令地址是落后于要去预取的指令的地址,落后2个时钟周期。 
    也就是说我们在取了第一条指令后,等该指令到了执行阶段时,我们的处理器其实已经预取了往后的第二条指令了。 

     

    对于32位处理器,一条指令占据4字节。这也就是PC值=当前程序执行地址 + 8的根本原因啦。

     

     

    原标题:处理器一条指令需要几个时钟周期?

    地址:http://blog.csdn.net/skyflying2012/article/details/51018640

    展开全文
  • PC值=当前程序执行位置+8

    千次阅读 2011-03-31 11:05:00
    ARM处理器使用流水线来增加处理器指令流的速度,这样可使几个操作同时进行,并使处理与存储器系统之间的操作更加流畅,连续,能...一般来说,人们习惯性约定将“正在执行的指令作为参考点”,称之为当前第一条指令,

    ARM处理器使用流水线来增加处理器指令流的速度,这样可使几个操作同时进行,并使处理与存储器系统之间的操作更加流畅,连续,能提供0.9MIPS/MHZ的指令执行速度。 PC代表程序计数器,流水线使用三个阶段,因此指令分为三个阶段执行:

    1.取指(从存储器装载一条指令);

    2.译码(识别将要被执行的指令);

    3.执行(处理指令并将结果写回寄存器)。

     

     

    而R15(PC)总是指向“正在取指”的指令,而不是指向“正在执行”的指令或正在“译码”的指令。一般来说,人们习惯性约定将“正在执行的指令作为参考点”,称之为当前第一条指令,因此PC总是指向第三条指令。当ARM状态时,每条指令为4字节长,所以PC始终指向该指令地址加8字节的地址,即:PC值=当前程序执行位置+8;

     

               周期1              周期2            周期3           周期4            周期5            周期6

    PC-8    取指                译码              执行

    PC-4                          取指              译码             执行

    PC                                                 取指             译码              执行

    展开全文
  • arm中的PC值

    千次阅读 2012-03-02 08:49:28
    arm中的PC值 ...不过由于ARM采用流水线来提高CPU利用效率,所以无论是ARM7中的3级流水线还是ARM9中的5级流水线,如果当前指令在执行,那么下一条指令一定正在译码,再下一条指令正在读取,PC值实际上
    arm中的PC值  
    


    2011-03-12 16:28:57|  分类: 默认分类 |字号 订阅
    在计算机体系结构中,PC值(program counter)表示下一条指令存储的地址。在ARM中也是。不过由于ARM采用流水线来提高CPU利用效率,所以无论是ARM7中的3级流水线还是ARM9中的5级流水线,如果当前指令在执行,那么下一条指令一定正在译码,再下一条指令正在读取,PC值实际上是正在读取的指令的地址(它正好是即将执行的指令,满足指向下一条指令的说法)。在中断时,会有一个保存LR的动作,但该值为当时PC的值,然后处理器会对LR进行一次自动调整,使LR=LR-0x04。所以,最终保存在LR中的值是中断发生时该语句的下一条。那么:


    1、软中断异常,即中断发生时的指令为SWI的话,从SWI中断,即软中断中返回后应该执行SWI语句的下一条,这条语句正好是LR中的地址。


    2、IRQ或FIQ异常中断时,需要重新执行中断发生时的语句,所以应该用LR-4。


    3、data abort数据中止异常中止,因为导致数据异常的原因应该是中断发生时语句的上一条语句,所以应该用LR-8


    4、Undefined未定义指令返回时LR。


    5、预取指令中止LR-4。


    注意:复位中断不用定义LR。在arm处理器中利用R14实现对断点和调用点的记录,即使用R14作为返回连接寄存器(LR)。arm处理器针对不同的模式,公用6个连接寄存器,其中用户模式和系统模式公用一个LR,每种异常模式各有专用的R14寄存器(LR),这些连接寄存器分别是:R14,R14_svc,R14_abt,R14_und,R14_irq,R14_fiq.


    转载:


    BL  NEXT                                 ;跳转到子程序


    .........                                          ;NEXT处执行


    NEXT


    ..........


    MOV  PC,LR                            ;从子程序返回


    这里的BL是跳转的意思,LR(R14)保存了返回地址


    PC(R15)是当前地址,把LR给PC就是从子程序返回


    这里有一下总结


    首先


    1.SP(R13) LR(R14)PC(R15)


    2.lr(r14)的作用问题,这个lr一般来说有两个作用:
    1》.当使用bl或者blx跳转到子过程的时候,r14保存了返回地址,可以在调用过程结尾恢复。
    2》.异常中断发生时,这个异常模式特定的物理R14被设置成该异常模式将要返回的地址。


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


    3.》我以前看书不懂的地方


    子程序返回的三种方法


    现在总结如下


    1.MOV PC,LR


    2.BL LR


    3.在子程序入口处使用以下指令将R14存入堆栈


    STMFD    SP!,{<Regs>,LR}


    对应的,使用以下指令可以完成子程序的返回


    LDMFD  SP!,      {<Regs>,LR}
    展开全文
  • arm 流水线和pc值

    千次阅读 2010-10-30 21:02:00
    arm 流水线和pc值 arm 流水线和pc值
  • ARM中断返回PC值分析

    千次阅读 2013-10-25 08:44:49
    ARM中断返回PC值分析 http://hi.baidu.com/mscyhll/item/a2664e97f4901cb8cd80e586 在ARM程序的开发过程中,对中断的处理是很普遍的、也是相当重要的。Realview MDK使用的RVCT编译器提供了__irq关键字,用此...
  • 在解释PC值关系之前先了解一些概念。 程序计数器(PC寄存器) 程序计数器是用于存放下一条指令所在单元的地方。当执行一条指令时,首先需要根据PC中存放的指令地址,将指令由内存取到指令寄存器中,此过程称为“取...
  • corte-m3中的pc值的问题

    千次阅读 2011-11-10 21:04:58
    在Cortex-M3中指令是3级流水线,出于对Thumb代码的兼容的考虑,读取pc时,会返回当前指令地址+4的。但是在进入中断服务程序后,压入栈的地址是pc,而返回时也是用作pc,那么pc如果是当前指令加4的话就有可能...
  • PC值的改变(相对寻址与绝对寻址)

    千次阅读 多人点赞 2020-03-19 15:25:37
    我们知道,计算机中有很多的寄存器,他们是32位的,其中每一位的要么是0要么是1。在汇编语言中,每一条要执行的指令都放在一个寄存器中,而这个将要执行指令的地址我们就需要放在PC(程序计数器)中,而这个PC也是...
  • VUE判断当前设备是PC还是移动端

    千次阅读 2020-04-15 18:45:06
    VUE判断当前设备是PC还是移动端 实际开发工作中会经常遇到一个需求,就是判断当前登录网页的设备是PC还是移动,要求PC端和移动端显示的是不同的网页内容。 那么我们就需要对当前登录设备进行判断。 使用 navigator...
  • ARM的流水线与PC值的关系

    千次阅读 2016-06-14 19:04:37
    一、两种结构: 冯 · 诺依曼结构 和 哈佛结构: ...跨过取指和译码流水线寄存器,直接送往译码阶段寄存器,这样仍然保证执行阶段的 PC 和取指阶段的 PC 关系为: PC ( excute ) =PC ( fetch ) +8...
  • 根据不同设备给vuex中的变量赋值,首页根据状态条件判断显示页面哪一部分。(当然也可以设置两个站点,一个m.xxxx.com, 一个www.xxxx.com 前端依据浏览器是mobile还是pc来跳转) 在APP.vue中 methods:{ // 添加...
  • 一、PC到底是多少呢?  “然后PC=PC+1”,老师经常这么说。  这不完全正确,PC自增一的情况指出现在无流水(non-pipeline)的情况下,这个时候取指,译码,执指都是顺序执行的。而在有流水的情况下就比较...
  • 一、PC到底是多少呢?  “然后PC=PC+1”,老师经常这么说。  这不完全正确,PC自增一的情况指出现在无流水(non-pipeline)的情况下,这个时候取指,译码,执指都是顺序执行的。而在有流水的情况下就比较...
  • //大多时候PC值只会是一个地址,不会指示说在哪个函数里面 //当然这里是给出了函数了 PC is at first_drv_init+0x1c/0x28 [test] //指明LR寄存器的值 LR is at sys_init_module+0x1424/0x1514 ...
  • userAgent 属性是一个只读的字符串,声明了浏览器用于 HTTP 请求的用户代理头的。 使用方法:navigator.userAgent document.write("用户代理: " + navigator.userAgent); 输出结果: Mozilla/5.0 ...
  • arm:PC=当前执行指令地址+8

    千次阅读 2016-04-22 13:53:03
    AMR7的三级流水线如下: ARM9是五级流水线,ARM9的五级流水线如下: ...可见,ARM9和ARM7中都是PC=当前执行指令地址+8的根本的原因是,两者的流水线设计中,指令的执行阶段都是处于流水线的第三级。
  • function IsPC() { var userAgentInfo = navigator.userAgent; var Agents = ["Android", "iPhone", "SymbianOS", "Windows Phone", ...userAgent 返回由客户机发送服务器的 user-agent(用户代理) 头部的
  • pc寄存器

    千次阅读 2019-01-27 22:19:38
    在任意时空,java虚拟机线程只会执行应该方法的代码,这个被线程执行的方法称为该线程的当前方法(current method),如果这个方法不是native的,那么pc寄存器就保存java虚拟机正在执行的字节码地址,如果该方法时...
  • 至三个都是之前让你们 记下的 三个重要的东西 /// public static string AppId = "" ; public static string AppSecret = "" ; public static string agentId = "" ; /// ///...
  • PC总是指向将要读取的指令的地址(即我们常说的,指向下一条指令的地址),而当前PC=8, 所以去物理地址为8所对应的指令“ldr pc, [pc, #20]” 其对应二进制代码为e59ff014。 此处取指完之后, 自动更新PC...
  • 界面上有个刷新按钮,点击刷新的时候,执行函数,改变activeDate的,为当前的时间戳。这样就会刷新router-view中的内容。 &lt;span title="刷新" @click="refresh"&gt;&lt;/...
  • ARM7是三级流水线,AMR7的三级流水线如下: 执行 ...PC = 4 解码 执行 指令地址=4         取指 PC = 8 解码 执行 指令地址=8
  • arm pc 指令

    千次阅读 2013-07-08 11:09:44
    正确读取PC值后,该值位当前指令地址值加8个字节,PC指向当前指令的下两条指令的地址 在arm体系结构中,由于采用了三级流水线运行,pc指针与51系列大有不同,虽然已有很多书介绍过了,但仍觉得有讨论的必要。 ...
  • PC寄存器

    千次阅读 2020-10-07 13:13:56
    一、概述 JVM中的程序计数寄存器(Program Counter Register)中,Register...JVM中的PC寄存器是对物理PC寄存器的一种抽象模拟,是一种软件层面的概念。 二、作用 PC寄存器用来存储下一条指令的地址,也即将要执行的
  • ARM获得PC指针为何PC=PC+8

    千次阅读 2016-07-15 14:08:08
    1.为何ARM7中PC=PC+8 ...此处解释为何ARM7中,CPU地址,即PC,为何有PC=PC+8这一说法: 众所周知,AMR7,是三级流水线,其细节见图: 图表 23 AMR7三级流水线 -转" title="ARM获得PC指针为何PC=PC+8

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 170,495
精华内容 68,198
关键字:

当前pc值