<s id="3nssg"><acronym id="3nssg"></acronym></s>
  • <button id="3nssg"><object id="3nssg"><input id="3nssg"></input></object></button>
    <nav id="3nssg"><big id="3nssg"><video id="3nssg"></video></big></nav>
    1. 查看: 37|回复: 0
      打印 上一主题 下一主题
      收起左侧

      [[教程/技术]] 如何动态调试来学习ARM汇编 (2) r15(PC)寄存器

      [复制链接]
    2. TA的每日心情
      萌哒
      昨天 12:31
    3. UID 1

      钻石丨
      4

      魂币丨
      31643

      热心丨
      12242

      我的勋章

      超风侠嘤嘤棒论坛水王闪电侠至尊王

      登录后可享受更多特权和福利。

      您需要 登录 才可以下载或查看,没有帐号?立即注册

      x
      以下内容转载至吾爱【havenow】 很值得学习的文章


      看看PC寄存器(r15)在调试器中的表现形式。

      下面的程序,在R0存储PC的地址,并且包含了两条随机的指令。看看究竟会发生什么。
              .text
              .globl        main
      main:
              mov r0, pc
              mov r1, #2
              add r2, r1, r1
              bx lr



      我们可以看到,PC里保持着下一条将被执行的指令 (mov r0, pc)的地址0xaaad43d8,现在执行mov r0, pc指令之后R0应该是0xaaad43d8吗?


      看看R0中的地址。R0是0xaaad43e0。

      下面有两个解释,感觉第二个更靠谱一点:
      1、从这个地址我们可以看出,当我们直接读取PC时,它按照定义,PC指向下一条指令,但是当我们调试程序时,PC却指向当前PC值的下面两条指令的地址处(0xaaad43d8+8=0xaaad43e0)。这是因为,老款的ARM处理器总是获取当前已经执行的指令的后两条指令的地址。ARM保留着这个定义的原因是为了保证和早期处理器的兼容性。


      2、产生这种差异的原因其实很简单,调试器显示的PC寄存器的值是经过处理的。当0xaaad43d8处的指令被执行时,PC寄存器已经指向了0xaaad43d8+0x8处的指令,这是由于CPU的流水线机制导致的。CPU取指令,解码指令和执行指令时使用的是不同的硬件部件,因此,这几个操作(实际的CPU可能更复杂,有更多的操作步骤)是可以并行执行的。因为RISC CPU的指令长度一定,所以CPU可以在解码指令之前就知道下一条指令的长度,从而在解码指令时取下一条指令,在执行指令时,对下一条指令进行解码,并取下下一条指令,这称为三级流水线。所以ARM当我们在执行0xaaad43d8处的指令时,PC已经指向0xaaad43d8+0x8处进行取指令操作了。这是硬件中真实发生的情况,而调试器为了令展示更有逻辑性,所以PC寄存器显示了当前执行指令的地址,当我们真实调试时不要受此影响。

      帖子永久地址: 

      {魂影网络} - 论坛版权   ①:本主题所有言论和图片纯属会员个人意见,与本论坛立场无关。

         ②:帖子有违反论坛版规,管理员和版主有权不事先通知发贴者而删除本文。

         ③:帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任。

         ④:本站资源于网络收集存储,任何资源只做于保存储存,防止原资源丢失或删除。

         ⑤:如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意。

         ⑥:本站内容均为网络分享资源,如有什么法律责任均和本站无任何关系,本站只做于资源收集储存。

      本站不参与第三方工具制作和售卖,只做于分享储存资源。
      您需要登录后才可以回帖 登录 | 立即注册

      本版积分规则

      QQ|手机版|小黑屋|魂影辅助论坛 ( 浙ICP备16020365号-1 )|网站地图

      GMT+8, 2021-4-21 17:02 , Processed in 0.086269 second(s), 27 queries , Gzip On.

      Powered by Discuz! X3.4 Licensed

      © 2001-2017 Comsenz Inc.

      免费特黄特黄的欧美大片