问题标签 [program-counter]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
assembly - 直接读取程序计数器
可以在内核模式或其他模式下直接读取 Intel CPU 上的程序计数器(即没有“技巧”)吗?
embedded - ARM Cortex M3 如何在硬故障前确定程序计数器值?
我有一个使用 STM32F103(ARM Cortex M3)的嵌入式项目,它在发布模式下偶尔会出现硬故障。作为恢复的一部分,我想从硬故障之前检索 PC 值并将其存储以供以后在电池供电区域进行调试。
如何确定发生硬故障时程序计数器的值?显然,PC 现在已设置为其在硬故障中断内的位置。
我应该去哪里看?它有正常模式寄存器组的地址吗?
谢谢!
delphi - 在 Delphi 调试中移动程序计数器
在 Visual Studio 中,当您使用断点进行调试时,您可以通过将执行光标拖到另一行来更改接下来要执行的代码行;这使您可以跳过 IF 语句等。
我无所事事地想知道是否有人知道 Delphi 中是否有类似的功能?
我一直在查看 CPU 窗口(Delphi 2006),但您似乎只能按顺序运行指令,而不是跳过它们。
arm - 在ARMv6中,为什么PC的值是当前指令加8?
如果流水线的阶段不是3,例如在ARM1156T2-S(也是ARMv6)中,它有9个阶段:
PC仍然是当前指令的地址加8?
assembly - 试图理解一条ARM7的流水线
我有这条装配线:
使用 PC = 0x01000AD8
R3 = 0x00000008
CDPS = 800000D3 (所以 C=0, Z=0)
当我执行这一行时,PC 的新值应该是(如果我正确理解 LDRLS*)
PC = 0x01000AD8 + 0x00000008 * 4 = 0x01000AF8
但结果却是 0x00000BAC
为什么?
也许我可以补充一点,执行此行代码时会激活 MMU。
PS *我在研究中没有找到LDRLS中“LS”的含义......
编辑:添加 CPSR 值
assembly - 汇编语言:程序计数器大小
什么决定了程序计数器的大小?
所以,这就是我所知道的:
内存地址寄存器 (MAR) 大小为 log2(内存空间)。
PC 大小与每个内存地址的可寻址性相同还是与 MAR 相同?
例如,如果给定内存空间为 16M,并且每个内存空间是 16 位可寻址的,则 MAR 大小将是 24 位可寻址以指定内存地址位置。
PC 大小是 24 位(与 MAR 相同)还是 32 位(每个空间的可寻址性)?
assembly - 是否可以修改或访问程序计数器?
在阅读程序计数器时,我了解到程序计数器的特殊之处在于无法直接修改其值。
是否有任何间接的方式来访问/修改程序计数器的内容?
mips - MIPS - JAL 混淆:$ra = PC+4 还是 PC+8?
我无法理解指令jal在 MIPS 处理器中的工作方式。我的两个问题是:
a) “jal”之后存储在R31中的值是多少: PC+4或PC+8?
b)如果真的是PC+8 ,那么PC+4处的指令会发生什么?它是在跳转之前执行还是从不执行?
在帕特森和轩尼诗(第四版),第 113 页:
“跳转和链接指令:跳转到并寻址并同时将以下指令的地址保存在寄存器中的指令(MIPS中的$ra )”
“程序计数器(PC):包含正在执行的程序中指令地址的寄存器”
读完这两条语句后,$ra中保存的值应该是(PC+4)。
但是在随书附带的MIPS参考资料(绿卡)中,jal指令的算法是这样定义的:
“Jump and Link : jal : J : R[31]=PC+8;PC=JumpAddr”
该网站还声明“它实际上是PC+8 ”,但奇怪的是,之后它说由于流水线是一个高级主题,“我们假设返回地址是PC+4 ”。
我来自 8086 程序集,所以我知道返回地址和返回地址后面的地址之间存在很大差异,因为如果我只是假设某些不正确的东西,程序将无法运行。谢谢。