64 位 cpu 如何从 ram 中获取 8 位(通常为 1 字节)的数据

How 64bit cpu fetch 8bits(generally 1 Byte) of data from ram

提问人:Vignesh B 提问时间:11/10/2023 最后编辑:Peter CordesVignesh B 更新时间:11/10/2023 访问量:30

问:

在学习计算机体系结构的同时,我开始了解 CPU 的获取-执行周期、ISA、总线和其他东西。每个 CPU 都可以根据其架构(如 8、16、32、64 位)对不同位大小的数据执行操作。考虑 64 位 CPU,它可以一次处理 64 位大小的数据。为了支持这三个地址、数据和控制总线,可以一次传输 64 位数据。我们使用称为“WORD”的术语来表示 CPU 一次可以处理多少位(对于 64 位 CPU,“WORD”大小为 64 位)。64 位 CPU 中使用的每条指令也将采用 64 位大小。

程序员通常使用“Byte”作为内存的单位,我们开发程序的目的是使用Byte作为单位(例如C语言中的char,int,long,float)。

我的疑惑: 考虑 64 位 CPU。

  1. CPU 是否使用字大小或字节大小来寻址 RAM。 例如: 为简单起见,我们将 RAM 大小设为 256 位。如果 CPU 为每个 64 位 (WORD) 提供地址。然后总共会有 4 个地址。否则 CPU 为每个 8bit(Byte) 提供地址。那么总共会有 32 个地址。

  2. 如果程序员使用字节大小,那么它将如何从 word 中获取。 例如:考虑 C 语言中的 char 数据类型,它需要 1Byte(8bit)。 CPU 是从 RAM 中获取完整的 64 位,还是仅获取 8 位来处理字符类型。

  3. 在 Fetch-Execute 周期中,64 位 CPU 将获取 64 位大小的指令。每个 64 位指令将使用全尺寸或根据我们执行的操作拆分为多个部分。有些操作不需要操作数,有些操作需要 1 个或多个操作数。例如,add 将 2 个操作数,ISA 将分别是操作码、操作数 1 和操作数 2 的三个部分。想象一下,在 64 位中,前 16 位将是操作码,操作数 1 为 24 位,操作数 2 为 24 位。如果我们使用 address for 指示从该地址获取数据作为操作数,并且该地址需要使用完整的 64 位大小来存储该地址。那么,如果只有 24 位用于操作数,那么该地址将如何在 64 位 ISA 中使用。是否需要多个 ISA 来执行该操作或其他任何操作?

64 位 CPU 架构

评论

2赞 Hans Passant 11/10/2023
处理器不从 RAM 读取,而是从缓存中读取。L1 是字节可寻址的。cs.stackexchange.com/questions/42214/......
3赞 Peter Cordes 11/10/2023
在 Fetch-Execute 周期中,64 位 CPU 将获取 64 位大小的指令。- 那将是不寻常的。只有少数 VLIW ISA 具有固定宽度的 64 位指令。更常见的是 32 位指令,如大多数 64 位 RISC,例如 Alpha、RISC-V 64 位、MIPS III、PowerPC64 等。此外,64 位 ISA 是相当通用的寄存器机器,因此每个操作数字段只有 5 位来选择 32 个寄存器之一。例如,请参见 codementor.io/@erikeidt/...
1赞 Peter Cordes 11/10/2023
64 位计算机如何更改内存中的一个字节? 除了这是关于真正的 x86-64 CPU,而不是你假设的奇怪机器,它甚至可能没有缓存。有关ColdFire CPU中总线的一些详细信息,请参阅执行传输到CPU的长字需要多少个周期以及多大的周期,以及它们如何向DRAM发出单字节访问信号,而不仅仅是读取整个缓存行。
0赞 Peter Cordes 11/10/2023
相关:是否有任何现代 CPU 的缓存字节存储实际上比字存储慢? 回复:修改缓存中的字节。回复:内存和缓存,请参阅“每个程序员都应该了解的内存”中有多少仍然有效? - 所有基础知识,请阅读以了解具有缓存的真正 CPU 如何访问内存。
0赞 Peter Cordes 11/10/2023
另请注意,现代 ISA 非常普遍地使用字节可寻址内存,因此每个字节都有自己的地址。没有它,你就无法首先进行字节加载或存储,至少不能作为单个指令进行。您可以加载一个字并移位 / AND 来提取您想要的 8 位,就像在字可寻址 DSP 上一样。 (现代 x86 硬件不能将单个字节存储到内存中吗?)

答: 暂无答案