程序如何跑起来

5 篇文章 0 订阅
5 篇文章 0 订阅

        需求贯穿人类发展历史,也推动着人类的创造,计算机从电子管到晶体管再到现在的集成电路,机器的运行最基本的原理就是“电路图”,各个开关各条线路,信号脉冲传递通道。所以初始的编程语言即现在的机器语言由二进制组成(‘1’或‘0’),那个时候工程师也就只能按照前期设计好的‘1’或‘0’组成的指南进行电脑操作且移植性很不好(这一套‘1’或‘0’这个硬件可用,那个硬件用不了)吧!为了方便人机交互,看得懂可纠错便维护,便有了用英文字母或者符号串来替代机器语言的汇编语言。当然人类的需求是无穷的,所以创造力也不可小觑,汇编语言虽然比机器语言好很多,但是可读性及移植性是不能满足于人类的,所以就有了高级语言(像FORTRAN、ALGOL、BASIC、LISP、Pascal、PROLOG、C、C#、C++、VB、Delphi和Java等。),每种语言都有个优点和缺点,同时都是满足某一功能开发的。

       当然编程语言不管怎么变化还是不能改变电脑机器等都是靠“电路”来运作的,最终要运行机器还是得靠机器语言,所以高级语言像C语言之类的,只能先“编译”成汇编语言(中间代码),汇编语言再汇编成机器语言。而实现这一串我们需要一个编译器,

         一个现代编译器的主要工作流程如下:

      源程序(source code)→预处理器(preprocessor)→编译器(compiler)→汇编程序(assembler)→目标程序(object code)→连接器(链接器,Linker)→可执行程序(executables])工作原理。

注:1、目标程序(.obj)其实已经是机器语言了,但是写编程时有调用了库函数之类的,所以需要用到链接才能成为可执行程序(.exe)。(一些常用的函数会写好存在公用库DLL中,就可以节约内存,和便捷编写)

       2、编译过程:是把程序转化成机器语言后再执行。解释过程:是一边转成机器语言一边执行(速度就变得慢了)。

    那么是不是我们写出来的.exe可以在任何机器上面运行呢?答案...举一个常见的东西,手机,下载APP很多时候都会提供两个版本:Android版本和iOS版本(我们这边大都是这两版本),又或者Microsoft office在Linux系统上直接运行是不可以的,只能用OpenOffice来代替,或者由其他软件进行转化。这也是我写代码开发软件会有所谓的“基于XX操作系统开发的”,所以应用软件会说明运行环境(操作系统+硬件)。看了上面的例子好像答案应该不是,但是答案也可以是,因为操作系统也是软件的一种,也是基于C语言和汇编语言共同开发的软件。其实早期我们是没有操作系统的,直接写一个软件可以在裸机上面运行的软件而且只是为了完成我们某一项功能,例如计算器,我必须得写一套有输入输出的程序,然后为了实现另一项功能,例如写作,我们又必须写一套输入输出的程序。慢慢发现其实有很多一样的功能,例如输入输出,管理文件之类的功能,那么能不能把它做成一个固定的软件平台呢?这时候就出现了操作系统(初期只是监控程序、基本输入输出)。作为一个平台来连接应用软件和硬件,那么必须要与通道(API和设备驱动)

 

           

 

借用一下一个图来总结一下:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值