一枚6502 CPU如何有8位数据总线?

4

如果6502需要8位操作码和8或16位数据(如地址或数字),那么为什么它只有8位数据总线?为什么不是24位呢?

这让我非常困惑,因为我知道地址总线不能用作数据,因为它是全向的。


2
多个周期 - Erik Eidt
2
有很多书籍和文章可以讨论6502架构。互联网档案馆上有一些关于这个主题的老书籍。 - larsks
欢迎来到StackOverflow!请参观[tour]并阅读"[ask]"以了解本网站的运作方式。对于您来说,重要的任务是自己进行一些研究,并向我们展示为什么这些内容无法帮助您。 - the busybee
8位数据总线(引脚D0-D7)和16位地址总线(A0-A15)。 - i486
你一次能听到多少个单词,接收一条指令需要多少个单词? - Tommy
它每个周期读取或写入8位。如果需要更多数据,则使用多个周期。这意味着某些指令比其他指令需要更长的时间。 - some
2个回答

2
根据Synertek 8-Bit Microprocessor Family, SY6500, Apr 1979(附录A,不确定是否为原始文档的一部分)。
这一部分包含了各种处理器指令在每个周期中地址总线和数据总线上的数据概述。(...) 所有指令都从T0开始,获取操作码,并继续执行所需的周期数(...)
该文档对于单字节指令(ASL、DEX、NOP...)提供了具体的解释:
单字节指令需要两个周期来执行。在第二个周期中,下一条指令的地址将被放置在地址总线上。然而,在第二个周期期间出现在数据总线上的OP CODE将被忽略。
相反,对于2或3字节的指令,第二个周期的数据总线上的数据将被保留。
如果我们阅读"A.2.3. 绝对寻址(4个周期)",表格显示多个获取操作,每个周期一个。
Tn 地址总线 数据总线 注释
T0 程序计数器(PC) 操作码(OP CODE) 获取操作码
T1 PC + 1 低位有效地址(LSB EA) 获取LSB EA
T2 PC + 2 高位有效地址(MSB EA) 获取MSB EA
T3 高位有效地址(MSB EA), 低位有效地址(LSB EA) 数据 获取数据

注意:6502是SY6500系列的一部分。


2

实际上非常简单。操作码始终为一个字节,它告诉CPU需要读取多少个字节才能获得完整的指令。

例如,考虑操作码$A9,查看这个表,我们可以看到它是LDA immediate。我们看到它是两个字节,并且需要两个机器周期。在第一个周期中,它加载操作码。在第二个周期中,它解码操作码,然后增加程序计数器,决定需要读取另一个字节,并将其加载到累加器中,同时递增程序计数器。

再举一个更复杂的例子,例如LDA $01E0。这在内存中看起来像AD E0 01(请记住,16位数字的低字节首先出现在内存中,即“小端模式”)。这需要三个字节和四个周期。这是因为它在第一个周期中加载操作码,在第二个周期中加载地址的低字节,在第三个周期中加载地址的高字节,然后在第四个周期中加载该地址处的值。

我已经在Visual6502中模拟了这个过程,具体如下:

enter image description here

我已经将指令放置在地址0处,然后一步一步地执行,直到准备获取下一个指令,这是一个BRK

每个周期分为两个部分。原因是每个6502机器周期的第二半部分始终是读取或写入内存,没有例外,大部分内部处理发生在周期的第一半。

所以你可以看到:

  • 在周期0中,读取操作码AD
  • 在周期1中,读取地址E0的低半部分
  • 在周期2中,读取地址01的高半部分
  • 在周期3中,将01E0放置在地址总线上,并从地址位置01E0读取55

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接