V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
billccn
V2EX  ›  程序员

纠正《请教大家一个计算机组成原理的问题》一贴中关于位长的误区

  •  
  •   billccn · 2023-04-18 05:06:39 +08:00 · 2089 次点击
    这是一个创建于 618 天前的主题,其中的信息可能已经有所发展或是发生改变。

    原帖 /t/933184

    里面好多人说计算机的位长是指地址线的长度,这个是有问题的,但又和原帖题主的问题有区别,就另开一贴。

    纵观计算机的历史和原理,所谓的 CPU 的位长都是指 ALU 能一次性处理的数据的长度,一般也是普通寄存器的长度。

    而计算机内存地址超过位长是很平常的。比如因特尔第一代 CPU 4004 是一个 4 位机,显然一个只能访问 2^4=16 个不同地址的 CPU 是没有商用的意义的,所以它实际上支持 12 位地址。8 位机时代通常支持 16 位地址( 64KB ),16 位机通常支持 18-24 位地址。其中有些指令集有超长地址寄存器,需要特殊指令才能操作;有些地址与位长等长,但采用 bank 选择访问不同的物理内存区域;还有两者混合式的。

    32 位因为足够绝大多数应用使用,而且 32 位机几乎都有虚拟地址能力,导致初期没有扩大指令集内可见的地址空间的需求,所以 32 位是第一代长时间(逻辑)地址和位长等长的。当然地址线的扩展从未停止,奔腾 2 就已经有 36 位了。到了 32 位后期,各种指令集层面的扩展也层出不穷,比如 PAE ,只不过这时候主流程序都是用高级语言编写的,访问这些扩展都需要特殊的汇编指令,实际使用它们的不多。

    64 位出现之后倒是反其道而行之,早期 64 位 CPU 只有 40 位地址总线,现在民用 CPU 也很少有 64 位地址线的。

    7 条回复    2023-04-18 13:48:51 +08:00
    levelworm
        1
    levelworm  
       2023-04-18 05:12:09 +08:00 via Android
    说到这个,想到七八十年代一堆 mini computer 群魔乱舞的年代,那时候的位长似乎也比较混乱。
    verrickt
        2
    verrickt  
       2023-04-18 08:12:09 +08:00 via Android
    依稀记得教材里把总线在功能上分成了三类:数据总线、地址总线、控制总线,这三类总线均有独立的字长。
    数据总线的字长与 lz 所讨论的 cpu 位长一致,是寄存器、ALU 一次能处理数据的长度。
    地址总线的字长主要由存储器的物理性质决定,但也不得不做出一些妥协,无法与数据总线的位宽对其。例如现代 AMD64 指令集的 CPU ,地址总线的字长为 48 位。其不使用 64 位字长的原因在于减小页表的空间开销。此外,也可以使用特殊的寻址模式来进一步扩展可寻址范围,例如 lz 所提的 PAE ( physical address extension )
    控制总线的字长在书中没有单独讨论,欢迎了解的 v 友补充
    hitmanx
        3
    hitmanx  
       2023-04-18 08:25:57 +08:00
    经典的 8086 我记得就是,20 位的地址空间(1M),但是 16 位的数据总线。寻址的解决办法是用段+偏移。
    levelworm
        4
    levelworm  
       2023-04-18 08:32:46 +08:00
    @hitmanx 我记得好像是用 segment register ,还挺有意思的。
    duke807
        5
    duke807  
       2023-04-18 08:49:38 +08:00 via Android
    我在那个帖子说的是主要指令集操作的位数来算的

    不过一般看一个指针所占空间也是没问题的
    yolee599
        6
    yolee599  
       2023-04-18 09:07:51 +08:00 via Android
    我记得 8051 内核( 8 位)是支持 16 位长度地址的,只有一个 16 位寄存器,其他都是 8 位,使用间接寻址的方式访问
    lingxi27
        7
    lingxi27  
       2023-04-18 13:48:51 +08:00
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2943 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 14:44 · PVG 22:44 · LAX 06:44 · JFK 09:44
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.