计算机组成原理学习(二)

作者: 虾笑勇 | 来源:发表于2017-01-10 11:56 被阅读353次

    前言
    本次计算机组成原理学习主要分为两块

    我们的世界是多元多义的,而计算机的世界永远是枯燥的,除了0就是1,为了能够勾画出我们能够理解的东西,我们定义了单位字节,但是这些又不能被大多数人认知,因为我们不能写一篇文章,然后满篇都是0和1吧,所以后来CPU的架构师们设计了很多机器指令,这些指令刚开始是一些十六进制的机器码,而这些指令的集合就是CPU指令集,随着科技的发展,这样的设计已经不能满足需求,为了让更多的人能够参与进来,顶层设计师们设计了一种最接近CPU指令集的低级语言,我们称它为汇编语言,汇编的诞生,让计算机有了质的发展。
      汇编语言已经能够让很多人编写自己的软件,但是这样还不够,因为不同的CPU生产厂家指令集不一致,出现了一个问题就是一次编写不能重复使用,不同的CPU需要一定的修改程序的额外工作,后来就提出了高级语言,CPU厂家根据ISA(工业标准规范架构)统一协定实现并支持汇编语言集合(其中有少些汇编语言功能会有所不同),这种汇编集合就是汇编指令集。

    一、CPU指令集(机器语言)和汇编语言

    • CPU指令集
      由十六进制数字组成的一组指令。每条指令需要查大量的表格来确定每个数字表示什么意思。每个厂家的指令集都有不同。

    • 汇编语言
      将一组一组的十六进制数字用助记符(Mnemonic)表示,这些助记符就是汇编语言,写好的汇编程序可以通过汇编器(Assembler)去查表把助记符替换成数字,也就把汇编语言翻译成了机器语言。

    汇编过程

    注意:
    1、汇编语言和机器语言的指令是一一对应的,汇编语言有三条指令,机器语言也有三条指令,汇编器就是做一个简单的替换工作
    2、

    二、32/64位CPU、操作系统、应用程序

    • 32/64位CPU
      指的是CPU的处理数据的能力(每个CPU时钟周期内,CPU能够处理的数据量(二进制数的位数长度))。

    注意:
    该能力影响CPU的运算速度和内存寻址能力。位数更大的机器的运算速度和内存寻址能力更快和更大,比如,64位机有比32位机更快的运算速度,64位机支持比32机更大的内存。

    • 32/64位操作系统
      指的是操作系统能够操作的最大内存地址空间。32位只能支持并且操作最大4GB的内存,而64位支持128G内存。

    • 32/64位应用程序
      指的是该软件能够操作的最大内存地址空间。32位应用程序只能操作最大4GB的内存,而64位支持128G内存。

    • 三者位数上关系
      从理论上来讲,三者的位数要保持一致的。实际上情况,
      1、64位CPU能够运行32位操作系统,32位系统不能运行64位CPU上。

    CPU的位数与操作系统的位数间的关系 不同位数的CPU的指令集的指令长度是不同的。所以,理论上32位CPU上只能跑32位操作系统、64位CPU上只能跑64位操作系统。 但是为了实现”升级到64位硬件的同时保证之前购买的32位软件仍然能够运行”,所以主要厂商对CPU进行处理,使64位CPU能够运行32位操作系统。

    2、64位操作系统能够运行32位软件,32软件不能运行在64位系统上。

    三、程序运行原理

    首先我们通过上面的学习,高级语言需要通过翻译成机器语言才能执行,而翻译的方式分为两种,一种是编译型,另一种是解释型,因此我们基本上将高级语言分为两大类,一种是编译型语言,例如C,C++,Java,另一种是解释型语言,例如Python、Ruby、MATLAB 、JavaScript。

    • 编译型
      源程序全部编译成二进制代码的可运行程序,以后运行该程序无需再经过编译过程。
    • 解释型
      源程序解释一句,然后执行一句,直至结束,以后每次运行都需要解释引擎,解释一句,执行一句。

    注意:
    关于Java语言到底是编译型还是解释型,这里不做讨论。

    让我们拿一个简单的C程序如何在操作系统中运行作为例子,再细入的学习下整个运行全过程。首先C语言程序需要经过编译后才能运行。编译过程如下:预处理、编译、汇编和链接。

    • 预处理
      预处理是编译过程的第一遍做替换工作,将头文件,条件编译指令和宏中的引用用真实的实现代码替换,同时完成其他工作。
    • 编译
      编译是第二遍,它将C语言程序转换为汇编语言程序。
    • 汇编
      汇编将汇编程序转换成机器语言程序,也就是机器指令序列。
    • 链接
      是编译的最后阶段。这需要一个或多个目标文件或库作为输入,并结合他们产生一种单一的(通常是可执行文件)文件。在这样做时,它解析引用外部符号,分配给最后地址的程序/函数和变量,并修改代码和数据,以反映新的地址(一个称为重定位的处理)
    C语言编译全过程

    注意:
    1、链接的作用
      编译的最后一个阶段是链接,链接的作用是将程序代码与操作系统中自带的动态链接库和系统API进行关联。只有关联后程序才能运行。

    如果你们想更细入的了解程序运行过程,那就要去深读《编译原理》。因本人知识有限,如果有错误,请指出,随时沟通交流,感谢。

    相关文章

      网友评论

      • 程序_猿:说的不是很深,但是对我这种外行来讲,是很不错的
        虾笑勇:谢谢,大道至简,其实细节原理那都是嵌入式人员或者底层开发者了解的,当然能够深入了解对以后在编程语言学习上有很大的帮助

      本文标题:计算机组成原理学习(二)

      本文链接:https://www.haomeiwen.com/subject/cwacbttx.html