Bootstrap

字、比特、字长、字节

概念

比特(bit):又称为“位元”,简称为“位”。比特是计算机中存储、运算和传输信息的最小单位。通常用 b 表示比特。

字节(Byte):又称为“位组”,是二进制信息的计量单位。字节是固定单位,不会随架构而变化,即1个字节一定等于8个比特。通常用 B 表示字节。

CPU 内部数据通路:是指 CPU 内部的数据流经的路径以及路径上的配件,主要是 CPU 内部进行数据运算、存储和传送的部件(比如数据总线、寄存器、ALU等)。这些部件的宽度要一致才能相互匹配。

字(word):表示 CPU 中被处理信息的单位,它被用来度量各种数据类型的宽度。不同的计算机,字的长度和组成不一定相同。

字长(The number of bits or digits in a word / word size / word width / word length):指 CPU 一次能处理的二进制数据的宽度,通常是指 CPU 内部用于整数运算的数据通路的宽度。所以说字长等于 CPU 内部总线的宽度 = CPU 内部运算器的位数 = CPU 通用寄存器的宽度。。而这种不加前缀的“字长”,通常就是指机器字长。比如64位的 CPU 能同时对两个64位的二进制数进行相加运算。

机器字长:CPU 一次运算处理的二进制数据的位数。
指令字长:CPU 指令字的位数。
数据字长:CPU 数据存储所占用的位数。
存储字长:存储器中一个存储单元(存储地址)所存储的二进制代码的位数,即存储器中的 MDR 的位数。

64位处理器必须有如下几点是必须的:

1.具有完备的64位寄存器;
2.具有完备的64位指令;
3.至于内存寻址方面,理论上来说,64位处理器应有64位的寻址能力,也就是可以寻址到2的64次方这么大的空间,但实际在硬件实现上,并不完全需要如此,比如AMD的Athlon处理器就无法寻址到64位这么高,Opteron和Itanium都是可以的。另外,64位处理器能寻址到2的64次方,这是因为指针从32位(4Bytes)变成了64位(8Bytes),这样,能表示的物理地址自然就变成2的64次方了。

32位处理器和64位处理器:在称呼一个 CPU 是16位还是32位时,是指处理器中“算术逻辑单元”(ALU)的宽度。所以,这也可以作为一个 CPU 是不是64位的其中一个依据(不是所有的)。此外,系统总线中的数据线部分,即“数据总线”,它通常与 ALU 具有相同的宽度(但有例外)。那么地址总线的宽度呢?最自然的想法就是地址总线的宽度与数据总线一致。但在早期的CPU,如8位CPU时,如果地址总线也是8位的,那么可以寻址的内存就只有256个地址单元,这显然是不够的!所以,地址总线的宽度不一定和 CPU 的位数相同。

拓展

《计算机系统基础》P56 最上面一句
在相同 CPU 中,字和字长的位数可以一样,也可以不一样。 例如在 Intel 微处理器中,从80386开始至少都是32位机器,即字长至少为32位,但字的宽度都定义为16位,32位称为双字。
​​  
答:
​​  这是一个兼容问题,解释起来很长,主要目的是让编译器和操作系统允许基于32位的程序运行在16位电脑上。时代发展很快,除了像嵌入式这些个别领域,现实中已经基本不用双字这类的概念。
  IA-32架构由16位架构发展而来,因此,虽然字长为32位或更大 ,但一个字为16位,长度后缀为 w;32位为双字,长度后缀为 l,long double 实际长度为80位,但分配 96b = 12B(按 4B 对齐)。
​​  80386的段寄存器还是16位的,为了保持兼容性,因为有实地址方式与保护方式两种运行方式,在实地址方式下保持16位微处理器的段寄存器存址方式,在保护方式下存储的是段选择子(selector)。功能如回答所述——段寄存器里保存的是 selector ,selector 指定了 段描述符 在描述符表里的位置,段描述符描述了段的一些属性 比如段的基地址,界限,只读/可写,等等很多。

;