Java千百问_01基本概念(016)_32位和64位计算机有什么区别

点击进入_更多_Java千百问

1、32位和64位计算机有什么区别

我们通常说的32位、64位计算机是指计算机的CPU位数。当然很早还有8位、16位的CPU,以Intel的80x86系列来说,8位的8080,16位的8086、8088、80186、80286,而32位的CPU最早始于80386,64位就是大家熟悉的EM64T技术以及AMD的x86-64。当然不同的厂商间同位数的CPU内部有很大的区别,但是它们的核心都是一样:CPU处理能力为64位。

这个位数指的是CPU的通用寄存器(GPRs,General-Purpose Registers,寄存器可以简单理解为一个可以暂存指令、数据和地址的空间,CPU运算时的结果都会暂时放在这里)的指令集、寻址能力。

一般来说,相比较32位的CPU来说,64位CPU最为明显的变化就是寄存器和指令指针升级到64位、内存寻址能力提高到64位,还有其他变化例如增加了8个64位的通用寄存器。更高位数的CPU,可以进行更大范围的整数运算,同时可以支持更大的内存。具体如下:

  • 从运算来说,32位处理器一次只能处理32位,也就是4个字节的数据,而64位处理器一次就能处理64位,即8个字节的数据。

  • 从内存来说,传统32位处理器的寻址空间最大不足4G(理论上有2^32个物理地址),形成了运行效率的瓶颈。而64位的处理器在理论上则可以将近达到1700万个TB(2^64个,大到惊人)。

2、CPU位数大小有什么影响

一个简单的例子可以说明CPU位数的影响,对于16位CPU,指令集只能操作16bit数据和16bit地址。不同CPU的寄存器、指令集不同,要区别对待,这里以8086来说明。

将16bit数据放入寄存器中

例如:

MOV AX,1234H         ;向寄存器 AX 传入数据 1234H
MOV AH,56H             ;向寄存器 AX 的高 8 位寄存器 AH 中传入数据 56H
MOV AL,78H     ;向寄存器 AX 的低 8 位寄存器 AL 中传入数据 78H

这里要说明的一点,第一句我们向AX寄存器(累加寄存器)中存放了一个16bit的数1234H,但实际是AX由AH、AL两个寄存器组成,所以可以直接操作AH、AL这两个8位寄存器。
如果我们想在一个寄存器中存入一个超过16bit的数,在16位CPU下是不可能的。如果想处理16bit的数,只能借助其他寄存器,分段处理。

获取16bit内存地址中的数据

例如:

MOV  BX,1000H
MOV DS, BX    ;向DS段寄存器传入1000H,由于8086不支持直接将数据传入段寄存器,所以只能借助其他寄存器传值。
MOV AX,[1234H]     ;将内存地址1000H:1234H中的值读到AX寄存器中

这里要说明的一点,8086的物理地址支持每次传20位的地址,但是由于16位CPU的指令集只能支持16bit,最大的寻址空间理论值为2^16(64K),为了能够支持2^20个地址(1M),所以需要将分为段地址和偏移地址,表现形式如1000H:1234H。

了解CPU物理地址形成看这里:[CPU物理内存地址如何形成][2]

你可能感兴趣的:(x8664详解,32位64位区别,32位计算机,64位计算机,64位指令集)