aquazaici 2021-07-16 09:23 采纳率: 0%
浏览 11

GDB 读取寄存器后是否需要将 PC 值 减 8 以获取当前执行指令位置

都知道由于流水线的原因 PC值=当前程序执行地址 + 8,那么用GDB 读取寄存器后,为了获得当前正在执行的指令地址,是否需要将当前 PC 值 - 8 来计算?

从实际调试看,好像不需要这个操作,难道 gdb 自动计算了吗

  • 写回答

1条回答 默认 最新

  • Quieeeet 2023-03-16 15:52
    关注

    是的,GDB会自动将PC值减去8来计算当前正在执行的指令地址,因此在使用GDB进行调试时,一般不需要手动将PC值减去8来计算指令地址。
    这是因为在计算PC值时,CPU会将当前指令的地址加上4,得到下一条指令的地址,因此GDB在读取PC寄存器的值时,实际上得到的是下一条指令的地址。为了得到当前正在执行的指令地址,GDB会自动将PC值减去8,其原理是基于CPU流水线的设计,CPU在执行指令时,当前指令的地址已经被加上了4,而GDB需要得到的是当前指令的地址,因此需要将PC值减去8。
    因此,在使用GDB调试时,可以直接读取PC寄存器的值,无需手动减去8来计算当前正在执行的指令地址。

    评论

报告相同问题?

问题事件

  • 创建了问题 7月16日

悬赏问题

  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 lammps拉伸应力应变曲线分析
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题
  • ¥30 python代码,帮调试,帮帮忙吧
  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建