我正在查看以下微处理器: https://www.mouser.co.za/new/western-design-center/wdc-w65c02s/
它被称为“8 位微处理器”,但是在描述中提到数据总线是 8 位而地址总线是 16 位。
我相对确定现代 CPU 的“位数”指的是其地址总线大小/宽度,但在这种情况下,看起来该微处理器的位数指的是其数据总线宽度。
处理器“位数”的定义是否随时间而改变?还是我遗漏了什么?
答案1
“位数”由可用的操作模式决定。虽然有一些(尴尬)处理 16 位值,它确实具有独特的 8 位风格。
操作数/寄存器仅为 8 位,ALU 为 8 位。甚至堆栈指针寄存器 S 也仅为 8 位(内部在高字节中添加了 0x01__ 前缀,以将堆栈从“零页”移出……是的,最大堆栈大小为 256 字节)。只有程序计数器 ( PC
) 是 16 位。
要使用 16 位可寻址 RAM(除了加载指令外),计算地址(而不是固定地址,后者可以包含在机器代码中),必须使用零页地址……例如LDA ($24),Y
,它将获取存储在 0x24 和 0x25 的 16 位基“指针”,添加 8 位Y
(将其视为索引或字节偏移量),然后将 8 位内容从此地址移动到A
。因此,“操作系统”未使用且可供程序使用的“零页”(0x00-0xff)上的两个相邻字节在 6502 上非常抢手;)
Z80 处理器系列也类似。两个 8 位寄存器可以一起使用(例如HL
,恰当地命名为高的和低的) 形成 16 位地址……但处理器仍被视为 8 位。Intel 8068 有一个 20 位地址总线,但它是一个 16 位处理器。因此地址总线“位数”根本不决定处理器位数。寄存器大小/加载指令更为重要 :)
答案2
CPU 中有很多东西可以具有 X 位。
寄存器的宽度(通常关注参与 ALU 操作的寄存器,例如累加器或通用寄存器 - 或告诉 CPU 在哪里获取下一条指令的特定寄存器,通常称为程序计数器 [PC] 或指令指针 [IP])
操作码的宽度(如果所有指令都是固定宽度)
指令的地址操作数的最大宽度 - PC 或 IP 通常必须这么宽,以便 CPU 可以从所有内存执行。
外部数据总线的宽度 - 当大多数 CPU 指令处理 16 位(例如 68008)时,可能会出现较慢的“多路复用”8 位数据总线。
外部地址总线的宽度(CPU 上的地址引脚数量) - 可能与指令地址操作数的最大宽度不匹配。
所有这些都可能不同。
1 和 2 可能是说明 CPU 是 X 位的最具影响力的因素。
有时界限并不明确,指定可能更多地与传统或它与之接口的外部芯片/设备的类型有关。
6502 具有 8 位寄存器(PC 除外,其为 16 位),但具有 16 个地址位。
所有接受地址操作数的指令在 1 字节指令后都有 2 个字节来标识地址。
例外:有“零页”指令,它以 1 个字节作为地址,并假定地址的高位字节为 0。这些指令速度更快。
尽管它可以处理 16 位宽的地址,但无论如何都很难将其称为 16 位芯片。
Z80 具有 8 位寄存器(16 位指令指针)和 16 个地址位,就像 6502 一样。
所有接受地址操作数的指令在 1 字节指令后都有 2 个字节来标识地址。
某些寄存器可以配对(BC、DE、HL)以像 16 位寄存器一样工作。此外,还有两个仅 16 位的寄存器 IX 和 IY。这使得 Z80 非常具有“16 位”特色
没有零页,但是寄存器具有很大的灵活性。
大多数人会将 Z80 称为 8 位 CPU,但它具有很多“16 位”特性。
68000 通常被称为 16 位 CPU,但它有 24 条地址线(我认为后来的版本有更多)。
- 有很多地址(D 和 A 寄存器)——全部 32 位宽。但(某些)指令可以选择只处理低 8 位(对于 D 寄存器)或低 16 位(仅限 A 寄存器)。
- 68000 上的内存操作数都是 32 位宽。
- 指令是 16 位宽(并且组织良好),但是有“Q”指令,ADDQ、MOVEQ 使用指令本身的低 8 位作为操作数。
- 处理字(16 位)的操作必须与偶数地址对齐。
因此,尽管 68000 传统上被认为是 16 位 CPU,但它具有很多“32 位”特性,并且仍然具有处理 8 位数量的方面。
还有许多模糊的界限。8086 的段寄存器确实很奇怪 - 使用段的概念将 16 位地址变成更大地址空间的“窗口”。
对于现代 x86 CPU,由于指令集扩展到几十年并且由 AMD 独立于英特尔运营,反之亦然。
但是从 80386 开始,指令指针长期以来一直是 32 位(处理器模式可以执行旧的 CS:IP 操作以实现 DOS 兼容),但在 64 位模式下则是 64 位。
在 16 位 x86 时代,IP 是 16 位,但名为 CS 的“段寄存器”会使实际地址变为 CS 乘以 16 加上 IP - 存在只修改 IP 的近跳转和同时修改 IP 的远跳转。x86 长期以来一直是一团糟。
即使 64 位 x86 CPU 具有 64 位宽的寄存器,在需要时仍可以只处理各种寄存器的前 8 位。然后,CPU 的浮点/SIMD 部分可能具有宽达 512 位的寄存器,但这些不是“通用”寄存器。