前言
本次计算机组成原理学习主要分为两块
- 1、计算机组成原理学习(一)
主要对计算计结构和微处理器(CPU)功能原理进行学习 - 2、计算机组成原理学习(二)
主要对CPU,操作系统,汇编、编程语言之间的运行原理进行学习
我们的世界是多元多义的,而计算机的世界永远是枯燥的,除了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语言程序转换为汇编语言程序。 - 汇编
汇编将汇编程序转换成机器语言程序,也就是机器指令序列。 - 链接
是编译的最后阶段。这需要一个或多个目标文件或库作为输入,并结合他们产生一种单一的(通常是可执行文件)文件。在这样做时,它解析引用外部符号,分配给最后地址的程序/函数和变量,并修改代码和数据,以反映新的地址(一个称为重定位的处理)
注意:
1、链接的作用
编译的最后一个阶段是链接,链接的作用是将程序代码与操作系统中自带的动态链接库和系统API进行关联。只有关联后程序才能运行。
如果你们想更细入的了解程序运行过程,那就要去深读《编译原理》。因本人知识有限,如果有错误,请指出,随时沟通交流,感谢。