假设 CPU 的内部寄存器宽度为 32 位。但是 CPU 具有 64 位系统总线,并且两个单独的管道同时接收信息,那么它被认为是 32 位处理器还是 64 位处理器?
答案1
有很多事情与 CPU 有关,可以是 X 位。
旧款摩托罗拉 68000 有 8 位总线版本,例如 68008。尽管有人认为它是 32 位的,但它却是 16 位的 CPU。
即使是寄存器或内部机制也不能说明全部情况。
- Z-80 通常被认为是 8 位 CPU(操作码为 8 位宽),但是它的许多指令将寄存器部分组合成所有 16 位索引访问,就像 16 位 CPU 一样。
- 我认为没有一款广泛使用的 8 位 CPU 有 8 条地址线(仅允许访问 256 字节 RAM)。经典的 8 位 CPU 通常有 16 条地址线,可以寻址 64K RAM/ROM。(但 Atari 2600 中的 CPU 除外,它被限制为 4K)。
- CP1610(旧 Intellivision 游戏系统中的 CPU)据称使用 10 位操作码(一些指令需要 16 位进行编码,分布在 20 位上 - 不确定这是否与字节对齐)但在其他方面被认为是 16 位系统(不要让任何人告诉你 Sega Genesis 是第一个 16 位家用游戏系统!)
但是程序员(他们是花费最多时间接触 CPU 内部的人)并不真正关心 CPU 和内存之间的硬件接口,他们关心的是通过 CPU 的指令集呈现的接口,而这个问题变得最为重要: 寄存器和指令一次处理的位数是多少。
i386
指令集更倾向于处理 32 位数量,如果您需要对大于 32 位的整数数量进行数学运算,则需要先添加低 32 位,然后进位到第二个 32 位。但它i386
很灵活,也允许您添加 16 位或 8 位数量,以及将寄存器拆分为 16 位或 8 位部分。
“长”模式又名“64 位”模式,又名amd64
指令集在这些寄存器上添加了另外 32 位,但是所有寻址寄存器的 32、16 或 8 位部分的旧指令仍然存在。
那么这与总线有什么关系呢?没有关系。只要总线将数据从 CPU 传送到 RAM,程序员就不必关心。显然,较窄的总线会更慢,但它不会影响程序员告诉 CPU 执行操作的方式(除了可能试图让程序更有效地访问内存)。
总线位数至少应与 CPU 位数相同,这是合理的,但并非必须如此。总线宽度与 CPU 指令集或其寄存器无关。
因此,@Eugen Rieck 的回答确实是正确的。
答案2
它是一个 32 位 CPU - 人们普遍认为,CPU 的“位数”是 的宽度void *
,在本例中是 32