问题标签 [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.
debugging - Atmel Studio 在我的源文件之外执行指令
我正在尝试使用 Atmel Studio Simulator 为 ATMega8 设备编写和调试 C 程序。
例如,假设我正在尝试调试这段代码:
此代码构建没有任何问题,但是当我尝试调试时会发生这种情况:
在某些时候,程序计数器超出了我的源文件。我一直试图找出为什么会发生这种情况,但我还没有找到答案。我把反汇编代码留在这里给你看看。我觉得真的很奇怪。
主函数初始化:
该函数返回到我的源文件之外的某个地方:
然后再次转到 CheckBitStatus() 函数。
任何帮助将不胜感激。
亚历克斯
verilog - 使用 Icarus Verilog 模拟程序计数器设计时的无限循环
我正在使用以下原型实现一个简单的程序计数器加法器:
当使用 Icarus Verilog 进行模拟时,我在第一个滴答声中得到一个无限循环,在该循环上禁用覆盖并启用计数,因此内部寄存器由 PC 加法器 (PC + 4) 的输出提供。
我将问题简化为一段基本代码,其中 D 触发器用作 1 位寄存器:
模拟卡住后,VCD 输出不显示任何状态变化。
我的猜测是,在特定的滴答声中,加法器不断地输入不同的值(不断地添加),因此它不稳定,模拟器正在等待该值被修复并卡住。
这个设计是否正确(即可以合成并且应该可以工作)?
assembly - 程序计数器更新
如果我想用寄存器地址(如 jr 指令)更新 32 位单周期数据路径中的程序计数器,在更新 PC 之前我需要做什么?
从指令中获取的 5 位寄存器号作为 PC 目标是否需要在更新 PC 之前进行符号扩展至 32 位?
c - 在应用程序加载和运行程序中
我想编写两个主要程序 P1 和 P2。P1会通过JTAG加载到STM32板子中,P2编译后生成的二进制文件会写入STM32板子外部闪存中。在 P1 中,做了一些事情后,我想将 P2 加载到 RAM 中并运行它。因此,程序计数器将跳转到 P2。
P1:
P2:
那么,如果可能的话,有没有办法做到这一点。
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
c - 从数据部分执行一段代码
我想获取一段代码,将其复制到一个全局数组中并从那里执行它。
换句话说,我试图将一堆指令从代码部分复制到数据部分,然后设置程序计数器以继续从数据部分执行程序。
这是我的代码:
我可能天真地认为它可以工作,所以我很乐意得到解释为什么它没有。
例如,程序加载到内存后,MMU 是否将指令提取限制在进程内存地址空间内的特定区域(即程序的代码段)?
对于协议,我在 64 位操作系统和基于 x64 的处理器上使用 VS2013 编译器对此进行了测试。
谢谢
cuda - GPGPU:使用普通 PC 的后果
我在一本书中读到,在波前或扭曲中,所有线程共享一个公共程序计数器。那么它的后果是什么?为什么这很重要?
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不应该指向我从用户空间启动的进程的用户空间指令吗?
我的理解是,当触发中断时,会保存寄存器状态,处理中断,然后恢复寄存器状态,因此程序继续进行,就好像“什么都没发生”一样。
assembly - 程序计数器溢出?
处理器中的程序计数器 (PC) 是否可能溢出,如果是,会发生什么情况?也就是说,如果它可以容纳 1 个字节,那么当它增加到超过 255 时会发生什么?
mips - 关于将 jal 指令添加到 mips 单周期数据路径的问题
我正在尝试添加 jal 指令,我了解它是如何工作的,但是我很难在硬件中实现它?
我有这个示意图,它显示 31 在寄存器之前连接到多路复用器,但不确定要连接什么。我看到 R[31] 等于 pc+8 或跳转地址,但是它们是 32 位,而多路复用器的入口只有 5 位。