hello world Asked:2023-09-29 01:10:38 +0000 UTC2023-09-29 01:10:38 +0000 UTC 2023-09-29 01:10:38 +0000 UTC 为什么计算机内存中的地址编号为0、4、8、12,而不是0、1、2、3? 772 我正在读 Tanenbaum 的书《计算机架构》,并看到了这张图。 我不明白为什么这里的地址编号为0,4,8,12,而不是0,1,2,3,即使下面说每一行都是一个完整的32位字。 也就是说,如果那里的地址是按4个单位编号的,那么原来还有相邻的地址,也就是每个字节都有编号,如果不是下面写的是每行都是32的话,一切就顺理成章了位字,如果计算机具有口头寻址,那么它根本不应该能够访问每个字节。 память 1 个回答 Voted Best Answer rotabor 2023-09-29T03:21:54Z2023-09-29T03:21:54Z 在上面的符号中,地址不仅存在于该字下的列中,而且遍及整个表。列中的地址是32位字的地址,表中每个字节都被寻址。也就是说,字节是按顺序寻址的。 当处理器是八位时,处理器直接访问内存中的每个字节。它看起来像这样: 具有八位数据总线和八位(复用)或十六位地址总线的处理器,内部具有八位通用数据寄存器和十六位指令指针和堆栈寄存器; 八个一位芯片的存储器(RAM),每个芯片连接到其自己的数据总线位和地址总线; 来自一个(为简单起见,我们将其视为)八位芯片的存储器(ROM)。 现在仍然可以对每个字节进行寻址,但内存是按字访问的,字的大小取决于处理器数据总线的大小(一般情况下)。因此,如果程序员想要读取地址10处的一个字节,那么32位处理器(下图)将从地址8开始加载4个字节。所需的字节将是这四个字节中的第三个。 内存中的数据可以以任何方式放置。也就是说,您可以在地址 3 处放置一个 32 位字。但是处理器将被迫访问内存两次才能读取该字。处理器将在一次内存访问中接收到与 4 字节对齐的字。因此,编译器(默认情况下)将内存中的数据按字边界对齐。 现代处理器已经是完整的计算机。它们内部有自己的处理器、内存和其他设备。在 64 位处理器上,使用 8 位寄存器以及 16 和 32 位寄存器(也许,我不确定)是简单模拟的。
在上面的符号中,地址不仅存在于该字下的列中,而且遍及整个表。列中的地址是32位字的地址,表中每个字节都被寻址。也就是说,字节是按顺序寻址的。
当处理器是八位时,处理器直接访问内存中的每个字节。它看起来像这样:
现在仍然可以对每个字节进行寻址,但内存是按字访问的,字的大小取决于处理器数据总线的大小(一般情况下)。因此,如果程序员想要读取地址10处的一个字节,那么32位处理器(下图)将从地址8开始加载4个字节。所需的字节将是这四个字节中的第三个。
内存中的数据可以以任何方式放置。也就是说,您可以在地址 3 处放置一个 32 位字。但是处理器将被迫访问内存两次才能读取该字。处理器将在一次内存访问中接收到与 4 字节对齐的字。因此,编译器(默认情况下)将内存中的数据按字边界对齐。
现代处理器已经是完整的计算机。它们内部有自己的处理器、内存和其他设备。在 64 位处理器上,使用 8 位寄存器以及 16 和 32 位寄存器(也许,我不确定)是简单模拟的。