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

debugging - Atmel Studio 在我的源文件之外执行指令

我正在尝试使用 Atmel Studio Simulator 为 ATMega8 设备编写和调试 C 程序。

例如,假设我正在尝试调试这段代码:

此代码构建没有任何问题,但是当我尝试调试时会发生这种情况:

在某些时候,程序计数器超出了我的源文件。我一直试图找出为什么会发生这种情况,但我还没有找到答案。我把反汇编代码留在这里给你看看。我觉得真的很奇怪。

主函数初始化:

该函数返回到我的源文件之外的某个地方:

然后再次转到 CheckBitStatus() 函数。

任何帮助将不胜感激。

亚历克斯

0 投票
1 回答
1818 浏览

verilog - 使用 Icarus Verilog 模拟程序计数器设计时的无限循环

我正在使用以下原型实现一个简单的程序计数器加法器:

当使用 Icarus Verilog 进行模拟时,我在第一个滴答声中得到一个无限循环,在该循环上禁用覆盖并启用计数,因此内部寄存器由 PC 加法器 (PC + 4) 的输出提供。

我将问题简化为一段基本代码,其中 D 触发器用作 1 位寄存器:

模拟卡住后,VCD 输出不显示任何状态变化。

我的猜测是,在特定的滴答声中,加法器不断地输入不同的值(不断地添加),因此它不稳定,模拟器正在等待该值被修复并卡住。

这个设计是否正确(即可以合成并且应该可以工作)?

0 投票
0 回答
302 浏览

assembly - 程序计数器更新

如果我想用寄存器地址(如 jr 指令)更新 32 位单周期数据路径中的程序计数器,在更新 PC 之前我需要做什么?

从指令中获取的 5 位寄存器号作为 PC 目标是否需要在更新 PC 之前进行符号扩展至 32 位?

0 投票
2 回答
525 浏览

c - 在应用程序加载和运行程序中

我想编写两个主要程序 P1 和 P2。P1会通过JTAG加载到STM32板子中,P2编译后生成的二进制文件会写入STM32板子外部闪存中。在 P1 中,做了一些事情后,我想将 P2 加载到 RAM 中并运行它。因此,程序计数器将跳转到 P2。

P1:

P2:

那么,如果可能的话,有没有办法做到这一点。

0 投票
1 回答
1113 浏览

c - Reset the program-counter (AKA instruction-pointer) to 0

I am trying to reset the program-counter (AKA instruction-pointer) to 0.

I had expected the following C code to work (but it didn't):

Here is the dis-assembly when using VS2013 compiler:

I realize that this issue is not dictated by the C-language standard, but is rather a matter of specific compiler implementation. Nevertheless, I would expect it to work pretty much on every decent compiler.

What could a function-call be compiled into, besides setting the PC/IP to the address of that function?

Thanks

0 投票
1 回答
1146 浏览

c - 从数据部分执行一段代码

我想获取一段代码,将其复制到一个全局数组中并从那里执行它。

换句话说,我试图将一堆指令从代码部分复制到数据部分,然后设置程序计数器以继续从数据部分执行程序。

这是我的代码:

我可能天真地认为它可以工作,所以我很乐意得到解释为什么它没有。

例如,程序加载到内存后,MMU 是否将指令提取限制在进程内存地址空间内的特定区域(即程序的代码段)?

对于协议,我在 64 位操作系统和基于 x64 的处理器上使用 VS2013 编译器对此进行了测试。

谢谢

0 投票
4 回答
637 浏览

cuda - GPGPU:使用普通 PC 的后果

我在一本书中读到,在波前或扭曲中,所有线程共享一个公共程序计数器。那么它的后果是什么?为什么这很重要?

0 投票
0 回答
1497 浏览

c - 在内核中查找进程的程序计数器

我正在尝试跟踪内核中特定进程的 PC 值。
为此,我查看了内核源代码,发现 pc 被存储在里面task_struct->stack,为了理解堆栈,我需要将它类型转换为struct thread_info *.
因此,在 gdb 中,我设置了一个断点b scheduler_tick(每 10 毫秒调用一次)。但是,当我打印出来时p/x ((struct thread_info *)curr->stack)->cpu_context.pc,我收到的值为$4 = 0x804d19d8

0x80000000考虑到上面的地址0x80000000被配置为我的内核中的内核空间,我预计 PC 会在下面。查看objdump内核的输出后,我看到 pc 指向__schedule.

PC不应该指向我从用户空间启动的进程的用户空间指令吗?
我的理解是,当触发中断时,会保存寄存器状态,处理中断,然后恢复寄存器状态,因此程序继续进行,就好像“什么都没发生”一样。

0 投票
1 回答
1108 浏览

assembly - 程序计数器溢出?

处理器中的程序计数器 (PC) 是否可能溢出,如果是,会发生什么情况?也就是说,如果它可以容纳 1 个字节,那么当它增加到超过 255 时会发生什么?

0 投票
1 回答
5061 浏览

mips - 关于将 jal 指令添加到 mips 单周期数据路径的问题

我正在尝试添加 jal 指令,我了解它是如何工作的,但是我很难在硬件中实现它?

我有这个示意图,它显示 31 在寄存器之前连接到多路复用器,但不确定要连接什么。我看到 R[31] 等于 pc+8 或跳转地址,但是它们是 32 位,而多路复用器的入口只有 5 位。

在此处输入图像描述