问题标签 [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 投票
0 回答
367 浏览

assembly - %rip 注册点在哪里?

我正在学习汇编,我想知道执行指令时 %rip 指向哪里。例如,

在这段代码中,当汇编程序到达 0x123456 时,地址 0x123456 将存储在 %rip 寄存器中。然后当它执行调用指令时,我不确定跳转的确切位置。它会跳转到 0x123456 + 0x210 吗?还是 0x123459 + 0x210?

0 投票
2 回答
184 浏览

assembly - 使用 addwf pic18f2x 向 PCL 添加值时重置 PCH

我试图通过向程序计数器添加某个索引来在程序集中使用简单的查找表。它似乎在PCL(so until 0xff) 的范围内工作,但之后,当PCH进入播放时,指令PCH后刚刚重置。addwf

添加后如何防止PCH重置?我是否需要以某种方式操纵PCLATHand以保持其价值。PCLATUPCH

我正在使用带有 mpasm 汇编器的 pic18f25k50。

所以这个查找表工作正常:

而这个将程序重置回第一条指令:

0 投票
1 回答
108 浏览

arm - ARM PC 在缓冲区溢出中被错误值覆盖

我正在研究 ARM 上的堆栈粉碎,我有一个缓冲区声明为:

字符缓冲区[12];

在我的代码中。

为了在 gdb 中找到 PC 被覆盖的位置,我写了

AAAABBBBCCCCDDDDEEEEFFFF到 buff

我希望 DDDD 将 FP(r11) 覆盖为0x44444444(并且它执行正确)但 PC 被 0x45454544覆盖而不是 0x45454545

有谁知道为什么最后一个字节是 D(44) 而不是 E(45)?我尝试过更长的输入,但 PC 中的值总是下降几位。

GDB 输出截图

0 投票
1 回答
104 浏览

verilog - 如何删除程序计数器中的按钮逻辑并添加完成逻辑,以便程序计数器增加直到此完成逻辑为高?

实际上这是我的大学项目,如果有人可以提供帮助,我需要如何编写 Verilog 代码?我需要 Verilog 代码.. 谢谢

项目声明:

该项目的目的是添加“完成”信号并删除“按钮”以增加程序计数器。程序计数器将自动递增直到程序结束,当完成信号变为高电平时将停止。查看评论以获取更多详细信息。

程序计数器的 Verilog 代码如下:

端模块

点击查看图片

0 投票
1 回答
89 浏览

go - 为什么 Frame 的值表示 pc 函数中的程序计数器 + 1

在研究 pkg/errors 时我很困惑。在文件stack.go中,我们可以看到关于结构体的注释Frame如下:

谁能告诉我为什么 pc 函数得到uintptr(f) - 1作为程序计数器的值。我写了一些关于pc的代码来测试,我可以得到正确的答案,尽管重写pc函数如下:

代码的结果是:

0 投票
1 回答
403 浏览

assembly - gdb 中 pc 的含义(别名?)

我有一个小的 x86_64 汇编程序,我没有看到任何专门称为pc(程序计数器?)的寄存器,虽然寄存器中有指令指针rip但是,当我输入时:

两者pcrip具有相同的价值。是gdb 中pc的别名rip,还是有其他含义?

0 投票
1 回答
1921 浏览

virtual-machine - 程序计数器的值如何递增?

我正在创建一个受 LC-3 VM 启发的原始虚拟机,但它是 32 位版本。我正在给机器提供指令集。执行完第一条指令后,PC如何知道第二条指令的位置。

是否有一种特定的方法可以系统地将指令存储在内存中,以便 PC 知道下一条指令的地址

示例 - 所有指令都以线性方式存储,如内存 [0] = 指令 1、内存 [1] = 指令 2 等。

感谢您的帮助。

0 投票
1 回答
156 浏览

android - Android Studio 计数器

我在Android Studio中制作的小型计数器系统有问题,问题是我不知道如何做计数器加1.5,因为现在我一直按下加号按钮时它一直在做1那里,但在下面的脚本中必须是geld++;1.5 . 所以我希望有人能提供帮助。提前致谢!

0 投票
1 回答
2323 浏览

memory - 为什么 RISC V 中的程序计数器应该加 4 而不是加 0 或 2

为什么 RISC V 架构中的 PC 连接的是 PC+4 而不是 PC+2 或 PC+1。我认为这取决于指令存储器(IMEM)的存储单元的宽度。如果宽度是 16 位,那么我们需要加载两个相邻的地址来填充 32 位指令,或者如果宽度是 32 位,我们只需要加载一个地址来获取完整的指令。

0 投票
2 回答
748 浏览

c++ - 代码是如何在 C++ 抽象机上存储和执行的?

在我读到的关于 C++ 的第一本书中,它稍微详细介绍了代码是如何在机器上实际执行的(它提到了程序计数器、调用堆栈、返回地址等)。我发现了解这些东西是如何工作的真的很有趣,尽管我知道知道计算机如何工作来编写好的代码并不是真正必要的。

在此 Q/A 网站上阅读相同主题时,我发现它绝不一定是我以前学习的方式,因为我所读到的只是 C++ 的某个实现,取决于某些计算机架构和一定的编译器。C++ 代码也可以在完全不同的东西上运行,只要一个兼容的编译器以“正确”的方式运行。然后由标准和“抽象机器”的行为定义正确的方法(我希望到目前为止我做对了)。

当然,我仍然想知道像内存的代码段或程序计数器这样的概念是否仍然“以某种方式”在标准中被描绘出来,如果是,它们在多大程度上被描绘出来?在抽象机中如何描述代码段一个接一个地执行的概念?

由于有人在评论中询问我是否愿意向我重复该标准:我无法很好地理解该标准,无法准确确定它对抽象机器的描述/或该标准的哪些陈述可以被解释为关于“程序计数器”“代码存储”......等抽象概念的陈述。所以,是的,出于无能为力,我要求社区解释标准中写的内容。这种解释的预期结果是仍然符合“抽象”标准的抽象机器内部结构的最详细概念。