`
雨过天晴0521
  • 浏览: 155561 次
  • 性别: 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环境下被执行的程序。
分享到:
评论

相关推荐

    Red-Panda DEV-小熊猫 64位 安装包

    Red-Panda DEV-小熊猫 安装包,一个十分有用的编译器安装包,直接可下载使用,可是要注意计算机计算位数,本安装包位windows系统64位安装包,这个类似DEV-C++的编译器,一定可以有效帮助你,提升打代码的速度!...

    微机原理上机大作业代码(已运行)附汇编语言编译器masm

    编写如下程序,并在机器上调试成功。程序采用菜单式选择,可以接收用户从键盘输入的五个命令(1-...上述题目代码,之前在网上找到过类似的可总是出问题,编译器出问题,代码运行出问题,这是完全测试过的,应该没有问题

    第四届 蓝桥杯 竞赛试题题目 C/C++高职高专组

     注意: 只使用ANSI C/ANSI C++ 标准,不要调用依赖于编译环境或操作系统的特殊函数。  注意: 所有依赖的函数必须明确地在源文件中 #include , 不能通过工程设置而省略常用头文件。    提交时,注意选择所期望的...

    nodebnf:本机BNF解析器和Node.js的编译器

    预定义规则空白的 : '' CR:“ \ r” LF:“ \ n” CRLF:CR LF | CR | 如果位数:1-0 位数:1 *位数NUMBER:数字[“。 [数字] | “。” 数字WSP:1 *(空格| TAB) TAB:“ \ t” 空间 : ' ' OWSP:WSP | 空白的...

    跑腿源码java-CarbonDi:CarbonDi语言编译器

    设计原则之一是该语言足够低级,您可以用它编写操作系统,但也足够通用,具有很高的生产力并可用于任何通用任务。 它本身的语言允许过程编程或面向对象编程的组合。 二进制可编译意味着性能应该与其他二进制可编译...

    fptool:使用VHDL生成定点逻辑的编译器

    (不支持换档操作) 不支持除法:乘以1 / x。 您知道自己在做什么:优化尚未完成(目前)。 Q(n,m)具有'm'个派生位和'n'个整数位。 Q(n,m)中的位数是n + m。 Q(1,7)的范围为[-1/128 .. 1/127],即不能...

    CSP-J 2020真题+解析

    每当地址总线中出现该地址的信息,系统即选定这个二进制内存单元进行读写操作(即寻址操作)。 知识点2: 编译器的主要功能 编译器是一种用于代码转换的计算机程序,它的主要功能是将一种语言编写的源代码转换为...

    compiler-uefs-20181:用于EXA869 MI编程语言处理器的前端编译器,UEFS 2018.1

    EXA869 UEFS 2018.1的编译器 EXA869 MI语言编程者的... 空格*位数位数*(。digit(digit)*)? 数字 [0-9] 信件 [az] | [AZ] 算术运算符 + | -| * | / | ++ | -- 关系运算符 != | == | <| <= | > | > = |

    cradle:Jack Crenshaw 的编译器用 Scheme 重写

    Jack Crenshaw 的编译器用 Scheme 重写 内容 第1章 1.2 Gradle: 1.2.scm 第2章 2.2个位数: 2.2.scm 2.3 二进制表达式: 2.3.scm 2.4 通用表达式: 2.4.scm 2.5 使用堆栈: 2.5.scm 2.6 乘除: 2.6.scm 2.7 ...

    libalgebra:快速的仅C标头库,用于popcnt,pospopcnt和集合代数运算

    libalgebra.h已使用GCC,Clang和MSVC编译器成功测试。 论文描述了核心算法: Daniel Lemire,Nathan Kurz和WojciechMuła的进行(2016年11月23日)。 Marcus DR Klarqvist和WojciechMuła和Daniel Lemire的 D....

    嵌入式C语言精华+.pdf

    基于 ARM 的嵌入式 Linux 移植真实体验(3)――操作系统 ..........................................111 基于 ARM 的嵌入式 Linux 移植真实体验(4)――设备驱动 ..........................................120 ...

    java猜数字源码-JacobMathType:JACOB是一个Java到微软的COM接口的桥梁。使用JACOB允许任何JVM访问COM对象,

    官网地址为,现在最新的版本是jacob-1.18,你可以在上找到最新的jacob.jar包和jacob.dll库,使用的时候还需要注意这两个东西的版本需要一致,而且还分32位和64位的,它的位数和JDK的位数有关,和操作系统的位数无关。...

    编译注释版PL0

     (* max number of digits in numbers *) (* 数字允许的最长位数 *) al = 10; (* length of identifiers *) (* 标识符最长长度 *) amax = 2047; (* maximum address *) (* 寻址空间 *) levmax = 3; (* max ...

    PL0编译程序注释1

    {带有代码生成的 PL0 编译程序}{保留字的个数}{标识符表长度}{数字的最大位数}{标识符的长度}{最大地址}{程序体嵌套的最大深度}{代码数组的大小}sy

    你必须知道的495个C语言问题

    数组和指针的基本关系 6.1 我在一个源文件中定义了chara[6],在另一个源文件中声明了externchar*a。为什么不行? 6.2 可是我听说chara[]和char*a是等价的。是这样的吗? 6.3 那么,在C语言中“指针和数组等价...

    C++ 题集 ( 最全 的 C\C++ 试题集 和 答案)

    意识到这个表达式将使一个16位机的整型数溢出-因此要用到长整型符号L,告诉编译器这个常数是的长整型数。 4). 如果你在你的表达式中用到UL(表示无符号长整型),那么你有了一个好的起点。记住,第一印象很重要。

    《你必须知道的495个C语言问题》

    2.27 为什么人们那么喜欢用显式的掩码和位操作而不直接声明位域? 32 第3章 表达式 33 求值顺序 33 3.1 为什么这样的代码不行?a[i]= i++; 33 3.2 使用我的编译器,下面的代码int i= 7; printf("%d\n", i+...

    JDK和Eclipse安装教程

    DK 是一系列工具的集合,这些工具是编译Java源码、运行Java程序所必需的,例如JVM、基础类库、编译器、打包工具等。eclipse位数和jdk版本位数一定要一致,根据你的电脑选择,我估计一般都是64位

Global site tag (gtag.js) - Google Analytics