如果CPU具有16位地址总线和8位字,那么它可以寻址多少内存?


23

我正在为学期末考试而学习,并对以下问题感到困惑。如果CPU具有16位地址总线和8位字,那么它可以寻址多少KB的内存?我的理解会告诉我它可以处理64KB,但是我只使用2 ^ 16 = 65,536。该计算从未真正考虑到8位字,因此我不确定它是否正确。另外8位字是什么意思?

干杯


16
您是间接使用它的:可寻址内存的总量为2 ^ 16 * 8位。由于一个字节= 8位,因此为2 ^ 16字节,即65536字节或64 KiB。请注意,K是1000的SI前缀。如果您是1024,请使用Ki。
jcaron

2
注意SI前缀千字节(1,000字节)和二进制前缀千字节(1,024字节)之间的差异。2 ^ 16 = 65,536 = 64吉比〜65.5公斤 寻求的答案可能是用公斤来表示基比的答案,但是有时差异确实很重要。如果要完全确定,请采取安全的路线并指定字节数,然后将其翻译成更方便的单位,例如千字节或千字节,以方便您的老师。比较维基百科:二进制前缀。存储器芯片通常指定例如65,536x8位。
CVn


3
我想你假设没有银行掉期。大多数16位CPU使用某种形式的库交换,这使得它很难回答。
约书亚

1
@MichaelKjörling问题说KB一直意味着1024个字节。
kasperd

Answers:


38

在大多数体系结构中,一个字是可以在单个操作中往返于工作存储器的最大数据段。

用于指定内存中位置的最大可能地址大小通常称为硬件字。

因此,您的CPU将能够寻址64KB(2 ^ 16),但一次只能传输8位。


3
我确定这个答案是老师追求的答案,但实际上是正确的吗?您是否可以使用诸如PAE之类的方法来允许3级层次结构(或什至更多层次)以允许CPU访问的内存超过64KB?我不是硬件专家,但是Commodore 128甚至没有通过允许切换RAM组来在8位字,16位总线上进行类似的处理吗?
davidgo

5
不太确定我是否理解您的句子“一次只能传输256B(2 ^ 8)”?它一次只能传送1个字= 1个字节= 8位。
jcaron

8
@davidgo仍然PAE要求适当调整地址总线的大小。支持PAE的Intel CPU具有36位地址总线。
德米特里·格里戈里耶夫

6
PAE或多或少是特定于现代x86 CPU的品牌/功能名称。是的,已经实现了一些用于间接寻址大量存储器的方案(例如XMS),这些方案最终使存储器子系统像外围设备一样,可以被不断重新配置以将不同的存储器暴露在较小的地址空间中。另外,请参见旧式x86的分段内存模型...
rackandboneman

6
@Overmind,您应该稍微澄清一下答案。没有人真正使用单个B作为单位,原因恰恰是这里发生的事情-您在混淆位和字节。的OP状态“8位字* -每个字因此具有8位(1个字节)和只能传输,在一个操作256只是可能的值中的每个字有,如何没有多少被转移的数目。
阿德尔菲亚斯

21

机器字,或者通常只是,是CPU可以使用通用指令整体上操纵的最大数据单元。这与内存寻址无关。

重要的是地址解析单位,即使在16/32/64位体系结构上,它通常也是8位字节。它不必等于机器字的大小,但是可能在您的情况下。

一个8位可寻址单元与16位地址总线结合在一起,CPU可以寻址到64KiB的RAM。


3
但是我使用的机器的地址解析单位是16位。(所以这个概念很有意义。)
Martin Bonner支持Monica17年

4
@MartinBonner但是,它与CPU字大小没有直接关系。
glglgl

1
@glglgl-非常相关。我不相信有任何不具有的地址单元架构无论是 8位它们的字长。
Jules

1
我不同意一个词是CPU整体上可以操纵的最大单位的说法。Intel i7具有64位数据总线,并且仍可以使用256位SIMD指令。如果维基百科是正确的,那么单词是指数据总线的宽度,而不是CPU内部的内容。
Thomas Weller

1
@ThomasWeller:8088具有8位数据总线,但仍然是16位指令。实际上,它是具有较小数据总线的8086。注意:数据总线的宽度和实际传输也不同(请考虑未对齐的数据)。
Giacomo Catenazzi

1

另外8位字是什么意思?

在上下文中,字大小与地址大小一起描述内存总线。内存中有16位数据,因此可以选择64ki的位置。然后,每个位置包含8位。

此处的字长可能匹配或可能不匹配CPU计算单元的大小,并且可能匹配或可能不匹配寻址中的逻辑粒度。

例如,CPU可以宣告16位总线(为此)。它在指令中使用16位地址,就像您的示例具有64ki。但是它有15位的地址总线和16位的数据总线。它仅需要32ki地址,并且每个位置始终获得2个字节。(如果一条指令需要1个字节,它将以最少的一位丢失来分配地址,在该步骤中取出两个字节,然后查看所需地址的最小一位来决定使用哪一半。)

请注意,其他人提到的银行转换,PAE等在这里不相关。内存管理单元可能使用16位地址并具有20位硬件地址,因此CPU需要进行切换和映射,以利用可以寻址的RAM芯片的实际20位地址范围。

确保在答案中指定单位。 “ 64ki”。什么啊 8位字,使其(仍)为64ki 字节的可寻址RAM。该步骤消除了混乱,并使这种琐碎的问题变得微不足道。


0

您还必须在计算中使用字长。答案是64 KB。

您可以寻址2 ^ 16个字,每个字为8位(= 1个字节)。因此,它是64 KB。

如果字长为16位。答案将是128 KB。


1
对于普通的32位CPU而言,您的计算并不适用,后者仍可以寻址2 ^ 32字节的内存(4GB),而不是(2 ^ 32)* 4(16GB)。
德米特里·格里戈里耶夫

现代CPU解决的是更大的“行”,而匹配的地址线却更少。问题涉及地址总线的物理方面。因此,乘以该总线的字长(而不是CPU寄存器长)是正确的。
JDługosz

0

这有两个方面,您的老师可能要您告诉他什么,以及现实是什么。

首先,您的讲师可能要您告诉他什么。

“ 16位可以寻址2 ^ 16个存储器位置,每个位置为8位。因此,我们可以寻址524288位(65536个八位字节)的存储器。”

但是,这反映了一种过于简化的世界观。现实更加复杂,给出明确的答案需要更多的信息。实际系统可能比这复杂的一些方法包括。

  • 许多处理器没有专用的IO映射,因此部分内存地址空间可能需要用于内存以外的其他事物。
  • 处理器的“字长”在本质上与内存数据总线的宽度或内存的最小可寻址单元不同。
  • 一些总线允许移动大小不同的数据单元。这需要进一步的寻址,该寻址可以由主地址总线的位处理或可以不由其处理。
  • 一些总线在同一条线上多路复用不同的信号。例如,SDRAM使用相同的地址线两次发送“行地址”和“列地址”。
  • 许多系统使用库切换方法来允许程序访问比处理器本机可寻址的更多的内存。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.