`
雨过天晴0521
  • 浏览: 159552 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

[转]CPU位数、操作系统位数和编译器位数关系

 
阅读更多
随着近来AMD和Intel的64位CPU以及 Microsoft 64位操作系统的相继发布,我想来谈谈CPU位数与操作系统位数的问题,这二者有区别也有联系,操作系统位数的概念是基于CPU的位数的。
     首先我们从计算机的信息表示谈起。计算机中的信息分为两类:控制信息、数据信息。控制信息表示:条件、命令、状态等。数据信息有数值与非数值的两类,非数 值如:文字、图像、声音等。所有这些信息在计算机中用数字代码表示,为了电路表示处理方便,就用二进制表示。电路用高电平、低电平表示2个数码“1”和 “0”,简单地可理解为高低电压或有无电。十进制在每个数位上可用10个数码(0—9),二进制在每个数位上可用2个数码(0、1)。用二进制表示数和十 进制的其实就是一样,也可进行各种运算。计算机系统的信息从输入、存储、处理到输出就都是用基于二进制的电信号表示。如键盘的每一个按键可用一个数码表 示;如鼠标可用2个数码分别表示水平和垂直的位置;如存储字符“A”可用数码“01100101”表示;如存储、输出图像可将图像分为很多点,各点用一数 码表示其颜色。
     所谈的位数就是表示信息的二进制数码的位数。位数越大能表示的信息范围就越大。如“16位色”就是说能表示的颜色种数是2的16次幂(65536),32位就有2的32次幂(65536*65536)。
     CPU的位数是指CPU能一次同时寄存和处理二进制数码的位数,这和CPU中寄存器的位数对应。
     CPU为了实现其功能一般设计了指令集,即是CPU的全部指令,这就是机器语言。计算机的所有功能都是基于CPU的指令集。指令集和CPU的位数是有联系 的。如Intel 8086 CPU 是16位,其指令集也是16位。如Intel 80386DX CPU 是32位,其指令集也是32位,但它也保持原16位指令集,这是为了向上兼容。
     操作系统的位数是说其所依赖的指令集的位数。
     计算机系统一般都应有向上兼容性,所以也可有64位CPU上运行32位操作系统、32位CPU上运行16位操作系统的情况。

操作系统位数应该是根据指针类型的位数来定的。整数类型不一定跟位数相等,CPU位数准确地说应该是CPU一次能够并行处理的数据宽度,一般就是指数据总线宽度。

附:
64位CPU如:AMD Athlon64 、Intel Pentium 4 F
32位CPU如:Intel 80386DX 到 Intel Pentium III 和部分Intel Pentium 4
16位CPU如:Intel 8086、Intel 80286
64位操作系统如:Windows XP Professional x64和Windows Server 2003 x64
32位操作系统如:Windows95、Windows98、Windows NT、Windows 2000、Windows XP
16位操作系统如:DOS 
Windows1.0到3.2是运行在DOS上的,不能算是独立的操作系统。

    如果你去看intel网站上的关于ia32结构的白皮书,会搞得比一般人明白许多。16位和32位早期的主要区别是寄存器的位数,内存的寻址和相应指令集的扩充。32位intel   cpu都有real模式,即完全的16位模式,屏蔽掉32位的所有特性;32位模式,可以使用所有的32位特性;模拟的8086模式,可以用一个32位机模拟多个16位的8086机,他们的内存是分段隔离的。现在的操作系统使用的都是32位的模式,因为可以享受到cpu直接提供的内存的分页和分段管理。他们提供模拟机制,实际上也是依托cpu实现的16位环境,而不是直接解释16位代码。由于负责生成汇编代码的主要是编译器,所以设计16位的编译器在任何情况下只能生成16位代码。当然,这并不是说用16位的编译器不可能生成32位的代码,因为他完全可能被设计成在16位实模式下生成32位的代码,从而可以在32位的机器上被执行。这就是所谓的交叉编译。你可以使用诸如gcc这样的交叉编译器在16位dos环境下编译出可以在32位linux环境下被执行的程序。
分享到:
评论

相关推荐

    易语言判断系统CPU位数源码-易语言

    在这个“易语言判断系统CPU位数源码”中,我们主要探讨的是如何利用易语言来获取和判断操作系统及CPU的位数,这对于开发兼容不同硬件环境的应用程序至关重要。 在计算机领域,CPU(中央处理器)的位数通常指的是其...

    gcc_win7+dll位数检查工具

    标题中的“gcc_win7+dll位数检查工具”指的是一个专为Windows 7操作系统设计的程序,用于检测动态链接库(DLL)文件是32位还是64位。在计算机编程和软件开发中,理解DLL文件的位数至关重要,因为错误的位数匹配可能...

    基于visual Studio2013解决C语言竞赛题之位数操作

    在本主题中,我们将深入探讨如何使用Visual Studio 2013进行C语言编程,解决一个涉及位数操作的竞赛题目。这个题目要求我们处理一个不超过4位的正整数,执行以下三个任务: 1. **确定位数**:找出这个数是几位数。...

    Linux下查看操作系统的位数

    了解操作系统的位数对于软件开发者来说尤其关键,因为这直接影响到编译器的选择、库的兼容性和程序的部署。同时,对于普通用户而言,知道位数能确保下载和安装的软件与系统匹配,避免因位数不兼容导致的问题。 总结...

    8位数码管显示电路及程序

    8位数码管显示电路及程序是电子工程领域中常见的设计,尤其在嵌入式系统和数字仪表盘的应用中。这个项目涉及到硬件电路设计和软件编程两大部分,使用了Altium Designer作为电路设计工具,以及Keil uVision 4作为...

    一个小型操作系统的实现

    "一个小型操作系统的实现" MINIX 操作系统是一个小型操作系统,它的源代码是公开的,即使读者...MINIX 操作系统的组成结构、进程管理、I/O 任务管理、内存管理和文件系统管理等知识点都是操作系统设计的重要组成部分。

    ds1302_key.rar_6位数码管日期_日期6位数码管

    此外,描述还提到显示时间和日期的功能已经实现了,并且有4个按键用于调整时间及日期,这表明系统有一个用户交互界面,可以通过按键进行操作。 标签“6位数码管日期”和“日期6位数码管”再次强调了显示日期功能的...

    C_C++结构体的一个高级特性―指定成员的位数

    这里,`sex` 和 `age` 都会分别占用 `unsigned int` 的完整大小(通常是32位或16位,取决于系统)。但在某些场景下,我们可能只需要这些变量的部分位来表示所需的信息。例如,我们可以使用一个 `unsigned int` 的一...

    PL/M的8086编译器

    PL/M是一种高级编程语言,由美国计算机公司Digital Equipment Corporation(DEC)在1970年代中期开发,主要用于创建操作系统和嵌入式系统。这个语言的设计初衷是为了构建微处理器控制的操作系统,尤其是为CP/M...

    GCC编译器内建宏定义

    GCC(GNU Compiler Collection)作为广泛使用的开源编译器套件之一,在多个操作系统平台上都扮演着重要的角色。它支持多种编程语言,包括C、C++等,并且拥有丰富的内建宏定义来帮助开发者更好地了解编译环境和编译器...

    pl0编译器分析

    ### PL0编译器分析详解 #### 一、PL0编译器概述 ...PL0编译器是编译原理学习的重要实例,其设计覆盖了编译器的主要功能模块,通过深入理解其内部结构和工作流程,可以有效提升对编译技术的理解和应用能力。

    按要求生成指定位数的编号【Delphi源码下载】..rar

    总的来说,这个Delphi源码示例提供了一个生成指定位数编号的解决方案,对于学习和实践Delphi编程,以及深入理解字符串操作和数值处理的技巧都非常有帮助。通过分析和理解这段代码,开发者可以提升自己的编程技能,并...

    QT检测是否是64位机

    在QT中检测系统是否为64位机主要涉及到对操作系统的理解和QT提供的系统信息类的使用。 首先,QT提供了一个名为`QSysInfo`的类,这个类包含了获取系统信息的各种方法,例如系统的架构信息。要检测当前系统是否为64位...

    默写-计算机组成1.docx

    硬件系统包括主机、输入设备、输出设备、存储器和控制器等组件,而软件系统则包括操作系统、应用软件和编译器等。 二、计算机系统组成的基本结构 计算机系统组成的基本结构包括输入设备、存储器、控制器、运算器和...

    4×4键盘控制4位数码管 可调频率

    综上所述,这个项目是一个基于4×4键盘和4位数码管的频率显示和调整系统,涵盖了硬件接口、软件编程、用户交互等多个方面。通过学习和实践,可以提升对微控制器控制、键盘扫描、数码管显示等基本电子技术的理解和...

    计算机操作系统试题库最全.doc

    操作系统并不直接进行程序的编译,而是由编译器完成,但它可以实现虚拟存储和文件的管理。 不同类型的OS有不同的性能需求。实时系统需要在规定时间内响应外界请求,适合于控制系统;多用户分时系统强调交互性,让...

    opencv CCT圆环编码,支持指定位数和伪摄变换 c++版本

    `CMakeLists.txt`是CMake构建系统的配置文件,用于指示编译器如何构建项目,包括源文件的组织、依赖库的链接等。`src`目录可能包含了实现CCT编码的核心函数,如颜色空间转换、编码和解码等。而`include`目录则存放了...

    Matlab安装MinGW-w64 C/C++ 编译器

    MinGW-w64是一个轻量级的、开源的Windows上的GCC(GNU Compiler Collection)移植版,它为32位和64位的Windows系统提供了编译器和相关的工具链。在Matlab中集成MinGW-w64,可以让我们利用Matlab的MEX功能来编译C或...

    单片机C语言实例--21-8位数码管显示其中之一.zip

    “8位数码管显示其中之一.Uv2”可能是调试信息文件,通常包含有源代码与生成的机器码之间的映射关系,这对于使用调试器进行单步调试和异常处理非常有用。“obj”文件则通常是编译器生成的目标文件,包含了编译后的...

    将一个正整数n(长整型)输出成“千分位”形式,即从个位数起,每三位之间加一个逗号,例如,将7654321输出成7,654,321;

    在调试或运行此程序时,确保你的系统已安装了相应的编译器和开发环境,并正确配置了项目设置。 总的来说,这个任务涉及到了数字格式化、字符串处理和基本的循环逻辑,是软件实习中常见的编程练习,有助于提升程序员...

Global site tag (gtag.js) - Google Analytics