用于指定内存中位置的最大可能地址大小通常是硬件字” 以上陈述的真正含义是什么?例如,在8086微处理器中,地址线有20位,字长为16位,位置的地址始终为20位,大于字长位(16位),那么最大可能的地址大小为一个典型的硬件字,在这种情况下,它比字长位更多。 我可能误解了以上说法,请澄清一下
答案 0 :(得分:1)
只有一个“字长”是一个过分的简化,有时适合/可行,但是特别是在x86的情况下,它实际上不是 1 。
在大多数8位CPU和16位x86中,物理地址(线性地址)都比一个字大,因为将它们缩小会带来不便。
您使用多个寄存器创建地址;在8086实模式下,它是(seg << 4) + offset
。
在8080或许多其他8位CPU中,一对8位整数寄存器形成一个16位地址。 (https://retrocomputing.stackexchange.com/questions/5121/why-are-first-four-x86-gprs-named-in-such-unintuitive-order)
脚注1 :在x86上,本机支持多种操作数大小,除非您越过缓存行边界,指令长度可变,否则未对齐的内存访问(在现代x86上)通常不会受到影响。由于P5 Pentium 64位对齐的加载/存储保证是原子的(仅对于FPU可能,整数寄存器的宽度不那么大)。因此,手册基本上保证了数据总线比寄存器宽。 (直到16字节向量寄存器和x86-64 ...)
许多RISC机器都是非常面向单词的(通常是32位单词),并且早期的物理实现可能实际上具有32位总线,依此类推。现代的32位RISC CPU通常具有FPU,该FPU支持64位double
,通常可以有效地从缓存中加载它们。它们通常还具有缓存,因此,到内存或从内存的传输以32或64字节的脉冲串进行。
在早期的32位MIPS微体系结构中,很多东西都是32位的。
但是,即使是大多数RISC CPU(如MIPS)也支持字节和半字加载/存储。大多数实现无需加载/修改/存储包含的单词即可修改字节。 (不同于只有字可寻址存储器的机器。)