问题标签 [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.

0 投票
7 回答
25028 浏览

assembly - 直接读取程序计数器

可以在内核模式或其他模式下直接读取 Intel CPU 上的程序计数器(即没有“技巧”)吗?

0 投票
5 回答
13765 浏览

embedded - ARM Cortex M3 如何在硬故障前确定程序计数器值?

我有一个使用 STM32F103(ARM Cortex M3)的嵌入式项目,它在发布模式下偶尔会出现硬故障。作为恢复的一部分,我想从硬故障之前检索 PC 值并将其存储以供以后在电池供电区域进行调试。

如何确定发生硬故障时程序计数器的值?显然,PC 现在已设置为其在硬故障中断内的位置。

我应该去哪里看?它有正常模式寄存器组的地址吗?

谢谢!

0 投票
3 回答
686 浏览

delphi - 在 Delphi 调试中移动程序计数器

在 Visual Studio 中,当您使用断点进行调试时,您可以通过将执行光标拖到另一行来更改接下来要执行的代码行;这使您可以跳过 IF 语句等。

我无所事事地想知道是否有人知道 Delphi 中是否有类似的功能?

我一直在查看 CPU 窗口(Delphi 2006),但您似乎只能按顺序运行指令,而不是跳过它们。

0 投票
1 回答
432 浏览

arm - 在ARMv6中,为什么PC的值是当前指令加8?

如果流水线的阶段不是3,例如在ARM1156T2-S(也是ARMv6)中,它有9个阶段:

PC仍然是当前指令的地址加8?

0 投票
2 回答
3053 浏览

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 值

0 投票
2 回答
1100 浏览

assembly - 汇编语言:程序计数器大小

什么决定了程序计数器的大小?

所以,这就是我所知道的:

内存地址寄存器 (MAR) 大小为 log2(内存空间)。

PC 大小与每个内存地址的可寻址性相同还是与 MAR 相同?

例如,如果给定内存空间为 16M,并且每个内存空间是 16 位可寻址的,则 MAR 大小将是 24 位可寻址以指定内存地址位置。

PC 大小是 24 位(与 MAR 相同)还是 32 位(每个空间的可寻址性)?

0 投票
4 回答
20077 浏览

x86 - 为什么不能直接设置指令指针?

维基百科关于 x86 汇编的文章说“程序员不能直接访问 IP 寄存器”。

直接表示使用 mov 和 add 等指令。

为什么不?这背后的原因是什么?有哪些技术限制?

0 投票
2 回答
8933 浏览

assembly - 是否可以修改或访问程序计数器?

在阅读程序计数器时,我了解到程序计数器的特殊之处在于无法直接修改其值。

是否有任何间接的方式来访问/修改程序计数器的内容?

0 投票
2 回答
18275 浏览

mips - MIPS - JAL 混淆:$ra = PC+4 还是 PC+8?

我无法理解指令jal在 MIPS 处理器中的工作方式。我的两个问题是:
a) “jal”之后存储在R31中的值是多少: PC+4PC+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 程序集,所以我知道返回地址和返回地址后面的地址之间存在很大差异,因为如果我只是假设某些不正确的东西,程序将无法运行。谢谢。

0 投票
2 回答
404 浏览

architecture - 程序计数器更改

在 PC(程序计数器)寄存器更改的所有可能性中,我发现了这些:

这些是全部还是我错过了什么?

我来自这篇文章