我对位体系结构有点困惑。我只是找不到能回答我问题的好文章,所以我想我会问。
问题1:
当谈到16位架构时,它是否意味着每个ram地址长16位?因此,如果我在C ++中创建一个int(32位),变量将占用2个地址?
问题2:
在16位架构中,RAM内部的地址数量仅为2 ^ 16(65536)。为什么他们不能添加更多?这是因为16位不能代表更高的值,因此无法引用65535以上的地址吗?
答案 0 :(得分:1)
当谈到16位架构时,它是否意味着每个ram地址长16位?因此,如果我在C ++中创建一个int(32位),变量将占用2个地址?
你必须问一下谁在谈论16位架构它们的意思。它们可能意味着地址长度为16位。它们可能意味着通用CPU寄存器长度为16位。他们可能意味着别的东西。但我们无法知道一些假设的人可能意味着什么。对于什么使“16位架构”成为现实,没有通用的定义。
例如,8032是一个8位架构,带有8位通用寄存器。但它有一个16位指针寄存器,可用于存储65,536字节的存储空间。
无论位数如何,几乎所有系统都使用字节地址。因此,32位变量将在任何位数的机器上占用4个地址。
在16位架构中,RAM内部的地址数量仅为2 ^ 16(65536)。为什么他们不能添加更多?这是因为16位不能代表更高的值,因此无法引用65535以上的地址吗?
对于16位,这些位可以设置的方式只有65,536种。因此,16位寄存器有65,536个可能的值。
答案 1 :(得分:0)
是。注意,虽然16位体系结构上的int
通常只有16位宽
还要注意,说变量“占用”两个地址是没有意义的。正确的说法是,在16位平台上,32位变量与两个指针一样宽。
无论采用何种架构,它仍将占用四个字节的空间。
是;这正是16位地址的意思 请注意,每个地址都指向一个字节的内存。
答案 2 :(得分:0)
取决于您对8位和16位架构的定义。
6502被认为是一个8位CPU,因为它以8位值(寄存器大小)运行,但具有16位地址。
68000被认为是一个16位CPU,但有32位寄存器和地址。
使用x86,通常是定义体系结构的地址大小。
此外,'64位'CPU并不总是具有完整的64位外部地址总线。它们可能在内部处理该大小的地址,因此虚拟地址空间可能很大,但这并不意味着它们可以拥有那么多外部存储器。
答案 3 :(得分:0)
来自维基百科的示例 - 所有内部寄存器以及内部和外部数据总线均为16位宽,牢固地建立了8086的“16位微处理器”标识.20位外部地址总线为1 MB物理地址空间(2 ^ 20 = 1,048,576)。该地址空间通过内部“分段”来解决。数据总线与地址总线复用,以适应标准的40引脚双列直插式封装。 16位I / O地址意味着64 KB的独立I / O空间(2 ^ 16 = 65,536)。最大线性地址空间限制为64 KB,因为内部寄存器只有16位宽。超过64 KB边界的编程涉及调整段寄存器(见下文)并保持不变,直到80386引入更宽(32位)寄存器(以及更高级的存储器管理硬件)。
所以你可以看到,没有固定的规则,16位架构只有16个地址线。不要混淆两件事,虽然直截了当地相信。