代码之家  ›  专栏  ›  技术社区  ›  user366312

什么是16位、32位和64位体系结构?

  •  23
  • user366312  · 技术社区  · 15 年前

    对于微处理器和/或操作系统,16位、32位和64位体系结构意味着什么?

    如果是微处理器,它是否意味着 General Purpose Register 大小 Integer 或数量 Address-line 数量 Data Bus line 还是什么?

    “我们说”是什么意思 DOS is a 16-bit OS Windows in a 32-bit OS “等等。。。?

    7 回复  |  直到 15 年前
        1
  •  2
  •   htmldrum    13 年前

    差异归结为传递给通用寄存器进行操作的指令集的位宽度。16位可以操作2个字节,64位一次操作8个字节的指令。通常可以通过在每个时钟周期执行更密集的指令来提高处理器的吞吐量。

        2
  •  16
  •   Nick Fortescue    15 年前

    我的原始答案如下,如果你想了解评论。

    正如你所说,有各种各样的措施。幸运的是,对于许多cpu来说,很多度量是相同的,因此没有混淆。让我们看看一些数据(对不起,图片上传,我看不到一个好的方法来做一个降价表)。 Table data

    如您所见,许多列都是很好的候选列。然而,我认为通用寄存器的大小(绿色)是最常见的答案。

    Motorola 68k 被描述为16/32位芯片。

    其他人认为是指令总线宽度(黄色)也与表中的匹配。然而,在当今的流水线世界中,我要说的是,对于大多数应用程序来说,与通用寄存器的大小相比,这是一个不太相关的度量。


    不同的人可能意味着不同的事情,因为正如你所说,有几个衡量标准。例如,有人谈论内存寻址可能意味着一些不同的人谈论整数算术。不过,我将尝试定义我认为的共同理解。

    我的理解是,对于CPU来说,它意味着“用于标准操作的典型寄存器的大小”或“数据总线的大小”(这两者通常是等价的)。

    Z80 具有8位累加器和8位数据总线,同时具有16位内存寻址寄存器(IX、IY、SP、PC)和16位内存地址总线。Z80被称为8位微处理器。这意味着人们通常必须指的是主整数算术大小,或数据总线大小,而不是内存寻址大小。

    它不是指令的大小,因为Z80(同样)有1、2和3字节指令,当然多字节是在多次读取中读取的。在另一个方向 8086

    对于操作系统,我将其定义为“代码被编译为在该大小的CPU上运行”,因此32位操作系统的代码被编译为在32位CPU上运行(根据上面的定义)。

        3
  •  7
  •   polemon    15 年前

    一个CPU“是”多少位,意味着它的指令字长是多少。 出于类似的原因,寄存器的大小相当于CPU的字长,但您通常有更大的寄存器用于不同的目的。

    走吧 PDP-8 但12位计算机之所以成为12位机器,是因为它的指令字长。它的前面板上有12个开关,可以按指令对其进行编程。

    这是一个脱离8/16/32位焦点的好例子。

    这一点有很好的解释 Wikipedia :

    在计算机体系结构中,32位整数、内存地址或其他数据单元的宽度最多为32位(4个八位字节)。此外,32位CPU和ALU架构是基于寄存器、地址总线或该大小的数据总线的架构。32位也是指以32位处理器为标准的一代计算机。

    现在我们来谈谈操作系统。

    在操作系统es中,这与CPU的实际“位”关系不大,它通常反映操作码的组装方式(CPU的字长度)、寄存器的寻址方式(不能在16位寄存器中加载32位值)以及内存的寻址方式。把它看作是一个完整的、编译过的程序。它存储为二进制指令,因此必须适合CPU字长。就任务而言,它必须能够寻址整个内存,否则就无法进行正确的内存管理。

        4
  •  1
  •   hotpaw2    15 年前

    这些定义是营销术语,而不是精确的技术术语。

    在模糊的技术术语中,它们与体系结构上可见的宽度比任何实际的实现寄存器或总线宽度更相关。例如,68008被归类为32位CPU,但在硅中有16位寄存器,只有8位数据总线和20个奇数地址位。

        5
  •  1
  •   berkus    15 年前

    http://en.wikipedia.org/wiki/64-bit#64-bit_data_models 数据模型意味着语言的比特数。

    “OS is x-bit”短语通常意味着OS是为x位cpu模式编写的,也就是说,64位Windows在x86-64上使用long模式,其中寄存器是64位的,地址空间是64位大的,并且与32位模式有其他明显的区别,在32位模式中,寄存器通常是32位宽的,地址空间是32位大的。在x86上,32位和64位模式之间的一个主要区别是,为了历史兼容性,32位模式中存在分段。

    通常操作系统都是在考虑CPU位的情况下编写的,x86-64是几十年来向后兼容的一个显著例子—您可以拥有从16位实模式程序到32位保护模式程序到64位长模式程序的所有内容。

        6
  •  0
  •   Saurabh    15 年前

    当我们谈论计算机科学中的2^n位体系结构时,我们基本上讨论的是内存寄存器、地址总线大小或数据总线大小。2^n位体系结构这一术语背后的基本概念是指,这里的2^n位数据可以通过进程来寻址/传输大小为2^n的数据。

        7
  •  0
  •   Puppy    15 年前

    据我所知,从技术上讲,它是整数路径的宽度。我听说过有32位寻址的16位芯片。但实际上,它是地址宽度。sizeof(void*)在16位芯片上是16位,在32位芯片上是32位,在64位芯片上是64位。

    这会导致问题,因为C和C++允许空隙*和整数类型之间的转换,如果积分类型足够大(与指针相同大小),则是安全的。这就导致了各种不安全的东西

    void* p = something;
    int i = (int)p;
    

    它会在64位代码上崩溃并烧掉(在32位上工作),因为void*现在是int的两倍大。

    在大多数语言中,您必须努力工作以关心您正在处理的系统的宽度。