List
文章目录
数据表示方式
数字系统
二进制
逢二进一
二进制与十进制的转换
我们以一个数106来举例
- 十进制转为二进制
除二取余法
从下往上写 1101010,便就是106的二进制表示了
- 二进制转为十进制
以106的二进制表示101010为例
计算方法为
101010 = 1 ∗ 2 6 + 1 ∗ 2 5 + 0 ∗ 2 4 + 1 ∗ 2 3 + 0 ∗ 2 2 + 1 ∗ 2 1 + 0 ∗ 2 0 101010 = 1*2^6+1*2^5+0*2^4+1*2^3+0*2^2+1*2^1+0*2^0 101010=1∗26+1∗25+0∗24+1∗23+0∗22+1∗21+0∗20
= 64 + 32 + 8 + 2
= 106
文字编码系统
所谓的文字编码系统,本质上就是将文字或字符和二进制数对应起来,理解起来就是【字码对照表】
常用的英文编码为
- ASCII系统
中文编码系统早期最常用的是big5这个编码表
但由于很多的原因,big5这个编码表无法定全部的中文字符
于是,国际组织ISO/IEC就制定了一个名叫 Unicode编码系统,我们常常见的UTF8字符集就是这个编码系统
软件程序的运作
软件运作是一个计算机的核心和灵魂
机器程序与编译程序
以下是计算机语言的大致的一个总结
语言 作用
机器码 可以被CPU直接读取执行,本质上是16进制数
汇编 机器码的帮助记忆的符号,属于低级语言
C 面向过程的代表,以函数为最封装单位
C++ 面向对象的代表,以类为单位。封装代码
JAVA 面向对象,解释性语言,跨平台
COM 面向组件
机器语言
机器语言是第一代计算机语言,因为CPU只能识别并执行0和1的码,所以当时使用的机器语言就是一段0和1的二进制代码段
机器语言由操作码和操作数两部分组成
一条指令必须包含下列信息
- (1)操作码。它具体说明了操作的性质及功能。一台计算机可能有几十条至几百条指令,每一条指令都有一个相应的操作码,计算机通过识别该操作码来完成不同的操作。
- (2)操作数的地址。CPU通过该地址就可以取得所需的操作数。
- (3)操作结果的存储地址。把对操作数的处理所产生的结果保存在该地址中,以便再次使用。
- (4)下条指令的地址。执行程序时,大多数指令按顺序依次从主存中取出执行,只有在遇到转移指令时,程序的执行顺序才会改变。为了压缩指令的长度,可以用一个程序计数器(ProgramCounter,PC)存放指令地址。每执行一条指令,PC的指令地址就自动+1(设该指令只占一个主存单元),指出将要执行的下一条指令的地址。当遇到执行转移指令时,则用转移地址修改PC的内容。由于使用了PC,指令中就不必明显地给出下一条将要执行指令的地址。
一条指令需要回答两个问题
- 1.做什么
- 2.到哪里做
缺点也很明显
- 1.大量繁杂琐碎的细节牵制着程序员,使他们不可能有更多的时间和精力去从事创造性的劳动,执行对他们来说更为重要的任务。如确保程序的正确性、高效性。
- 2.程序员既要驾驭程序设计的全局又要深入每一个局部直到实现的细节,即使智力超群的程序员也常常会顾此失彼,屡出差错,因而所编出的程序可靠性差,且开发周期长。
- 3.由于用机器语言进行程序设计的思维和表达方式与人们的习惯大相径庭,只有经过较长时间职业训练的程序员才能胜任,使得程序设计曲高和寡。
- 4.因为它的书面形式全是"密"码,所以可读性差,不便于交流与合作。
- 5.因为它严重地依赖于具体的计算机,所以可移植性差,重用性差。
汇编语言
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。在汇编语言中,用助记符代替机器指令的操作码,用地址符号或标号代替指令或操作数的地址。在不同的设备中,汇编语言对应着不同的机器语言指令集,通过汇编过程转换成机器指令。特定的汇编语言和特定的机器语言指令集是一一对应的,不同平台之间不可直接移植。
汇编语言是第二代计算机语言,用一些容易理解和记忆的字母,单词来代替一个特定的指令,在今天的实际应用中,它通常被应用在底层,硬件操作和高要求的程序优化的场合。驱动程序、嵌入式操作系统和实时运行程序都需要汇编语言。
高级语言
高级语言并不是特指的某一种具体的语言,而是包括很多编程语言,如流行的java,c,c++,C#,pascal,python,lisp,prolog,FoxPro,易语言,中文版的C语言等等,这些语言的语法、命令格式都不相同 。
高级语言与计算机的硬件结构及指令系统无关,它有更强的表达能力,可方便地表示数据的运算和程序的控制结构,能更好的描述各种算法,而且容易学习掌握。但高级语言编译生成的程序代码一般比用汇编程序语言设计的程序代码要长,执行的速度也慢。所以汇编语言适合编写一些对速度和代码长度要求高的程序和直接控制硬件的程序。高级语言、汇编语言和机器语言都是用于编写计算机程序的语言。
高级语言的工作方式
高级语言设计的程序必须经过“翻译”以后才能被机器执行。“翻译”的方法有两种,一种是解释,一种是编译。解释是把源程序翻译一句,执行一句的过程,而编译是源程序翻译成机器指令形式的目标程序的过程,再用链接程序把目标程序链接成可执行程序后才能执行 。
解释翻译过程。对高级语言程序进行解释并执行的程序称为解释程序(软件)。它的功能是读入源程序,按源程序动态逻辑顺序进行逐句分析、翻译,解释一句执行一句,不产生任何中间代码,最终得到程序的执行结果
操作系统(Operating System, OS)
操作系统本质就是一组程序,不过这个程序的功能在于管理计算机的所有活动以及驱动系统中的所有硬件。
操作系统核心(Kernel)
操作系统的核心承载着让计算机运转的职责,包括
- 让CPU开始逻辑判断与运算数值
- 让存储器可以加载、读出数据与程序代码
- 让硬盘可以开始被读取
- 让网络卡可以开始进行数据传输
- 让所有周边可以开始运转等等
由于kernel的重要性,所以一般这个核心程序会放置到的内存的区块是受保护的,并且开机以后就一直常驻在内存中了。
系统呼叫(System Call)
既然硬件是由核心管理的,那么我想开发软件的话,自然而然就得去遵守这个核心的相关功能,虽说从参考硬件编程变成了参考核心编程,但是还是比较的麻烦,为了解决这个问题,操作系统一般会提供一整套的开发接口给工程师来开发软件,这个接口会根据工程师所写的代码转化成核心可以了解的任务函数
这个接口,就是系统呼叫层
大致的关系图:
核心功能
核心负责整个计算机相关的资源分配与管理,而对于计算机而言,最重要的就是CPU和主存储器,因此,核心至少要拥有一下的功能
- 系统呼叫接口(System call interface)
- 程序管理(Process control)
- 内存管理(Memory management)
- 文件系统管理(Filesystem management)
- 装置的驱动(Device drivers)
操作系统与驱动程序
驱动程序是硬件开发商根据操作系统提供的接口设计出来的驱动他们的硬件的程序。
所以,对于驱动程序有以下几个需要注意的地方
- 操作系统需要正确的驱动程序才能使用驱动硬件,应用程序才能够使用该硬件的功能
- 操作系统需要提供接口给开发商让开发商制作他们的驱动程序
- 驱动程序是由厂商提供的,与操作系统开发者无关
应用程序
应用程序是开发者根据操作系统提供的接口所开发出来的软件
应用程序的目的是为了让用户操作计算机,利用到计算机的功能。
这里需要注意,安装软件时需要查看应用程序是否适配该系统