6502 - 6502 中的两个程序计数器寄存器如何工作?

标签 6502 program-counter

我目前正在 LogiSim 中开发 6502 的一个子集,在当前阶段我正在确定要实现哪些部分以及可以删除哪些部分。我的主要资源之一是Hanson's Block Diagram .

我目前正在尝试确定增量逻辑到底是如何工作的。在我之前在学校从事的一个项目中,程序计数器通过来自解码指令存储器的单个指令递增。在此图中,程序计数器逻辑的工作方式看起来与我之前遇到的不同。

The portion that is confusing

这个逻辑到底是如何工作的?它是否使用指令存储器中的指令来递增?作为后续,是否可以简化程序计数器逻辑,使用指令存储器中的一两条指令来递增?

最佳答案

6502 只有一个程序计数器。它是 16 位宽。由于 CPU 中的许多其他内容正好是 8 位宽,因此将 16 位程序计数器切成两半是硬件上有意义的,这样每一半都适合 8 位。例如,每一半都是使用 JMP 等指令单独加载的。相关分支指令将 PCL 带到 ALU 输入。

这些部分在内部称为PCHPCL。您可以看到,PCL 附加了增量逻辑,其中一个输出是称为 PCLC 的进位信号。这是另一个电路的输入,该电路递增PCH

这些对于程序来说都不重要。程序只关心 PC 指向接下来要执行的指令,并使用该事实来影响自己的流程。但如果您有兴趣了解更多这些细节,我将向您介绍 Visual6502 模拟。它比汉森的框图更加准确和详细。

关于6502 - 6502 中的两个程序计数器寄存器如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46646929/

相关文章:

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

assembly - 了解指令是如何翻译的(计算机架构)

assembly - C64 程序集 - 6502/6510 - 依次显示一系列三个位图,然后进入字符模式

c++ - 为什么我们在这里将 0 添加到双空指针?

assembly - 如何在没有 0x00 或 0xFF 字节的情况下获取 x86_64 中的指令指针?

c - Pthread程序计数器

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

6502 - 为什么X和Y索引寄存器是8位的?

assembly - 将#$FF 加载到 A,并存储在地址 $0000 不起作用