先有鸡还是先有蛋?先有操作系统,还是先有汇编器? (2012-12-20 02:46:57)
转载▼
标签: 杂谈
前言:
计算机语言编写的程序是如何转化为电信号的?
简单讲就是:
1、编译:高级语言编写的程序经过编译器编译成二进制机器语言,存储在硬盘上的文件或其他介质中;
2、运行程序:操作系统把二进制程序加载到内存,依次把指令传入cpu寄存器,cpu依次执行指令。
其实程序在内存、cpu中都是电信号,二进制数在内存中的表示就是高电位和低电位。
======================================================================================
副题:
1.不管是高级语言(VC,VB)还是低级语言(汇编),要在计算机里运行,最终都会由编译或解释程序转换成机器语言;
2.机器语言就是由"0"和"1"来表示的语言.它们显示在屏幕上是一串0和1的数字,在计算机存储器里是以高和低电平来表示的(比如1表示高电平,0表示低电平).也就是说你所编写的程序代码最终会成为计算机存储器里的高和低电平,这大概是你说的电信号;
3.至于怎么转换,举个例子。
你敲键盘上的"A",输入计算机的并不是字母"A",实际的过程是:由管理键盘的一个4位微控制器(cpu)不停地扫描键盘上的每一个键(每个键就是一个电开关),当你按下字母"A"时,"A"这个电开关闭合,被cpu扫描到,它会把与这个按键对应的存储器的数值(1000001)读出来,以异步通信方式传给计算机的CPU。
这个过程也可以这么说:当你按下键盘上标记着的"A"的电开关,在键盘连接线中会产生一串包含着(1000001)信息的电脉冲,这串脉冲信息被存储到计算机的存储器里,它就表示字母"A"。
=======================================================================================
正题:
这个是以前给别人的回帖,感觉对初学者应该还有点帮助吧,于是就无耻的再贴出来了,大家包涵。
内容开始:
“这个问题很好,说明搂主是个寻根究底的人,任何求知欲强的人都会通过探索层层深入,最后到最根本的问题。最痛恨一知半解的人乱回答别人的问题,或者找风马牛不相及的答案糊弄人!这样的人就别搞技术了,去搞政治更合适!
你的困惑感应该和蛋鸡问题类似,到底是先有操作系统还是先有汇编器?其实只要对计算机史了解的话就不会迷惑了。原始的电子计算机是没有操作系统也没有汇编器的,那时编程是靠写一条条机器指令(就是高低电位组成的信号)进行的,没多久,出现了汇编语言,就是用符号来表示原本的指令由程序员写出这些符号指令,再由其他人对表翻译成真正的机器指令。这就是所谓的手工汇编。后来出现了用程序来代替人的查表,就是现在的机器汇编,从此现在意义上的汇编语言诞生。
运行汇编程序并不一定要操作系统,只要把程序加载到内存,然后cpu逐条执行就可以了,而操作系统也未必非要汇编语言来写,也可以用机器指令写的。也就是说他们在逻辑上并非一定的因果关系。所以历史上也没有明确的先后关系,是同时交错进行的。那时没有操作系统的概念,只是一个个工具程序而已。
你的困惑还在于最初程序是如何输入进计算机的,现在要把一个程序加载到内存,需要借助别的程序,那这个“别的程序”又是怎么到内存里的呢?还是蛋鸡问题。其实,最早把程序加入计算机里的方法是搬开关,一位一个开关来代表高低电位。后来打卡片(和纸带),再用转换器读入。再后来出现了磁介质,存储和加载靠程序对磁介质读写来完成,这就不需要借助体力和外部设备了,存储和加载都在计算机内部完成。那么这个“最初的加载程序”当然不是靠程序加载的,是靠人力加载的(可以搬开关,也可以打孔。)
再后来呢,由于输入汇编指令太累,所以有人就开发了一中程序,叫“自动编程器”,就是输入一条高级指令,由那个程序解释成多条机器指令,这就是后来的高级语言。
ps:其实计算机的本质就是一条条电信号(机器指令)来推动运行的,和一台内部有很多齿轮的精密大钟没什么两样,都是机器!什么操作系统啦,什么程序啦,都是我们抽象后给他们起的名字,他们本质还是一个个机器指令,注意,我很反对某些人说机器指令就是1、0数字组成的,这很不确切容易使人误解(可能他自己就误解了),应该说是由高低电位组成的,只不过我们把高电位看作1,低电位看作0。我还很鄙视某些缺乏探索精神的所谓的“技术人员”,在他们看来好像在键盘上按一个键,然后显示器上显示出字符,这么一个简单的过程是理所应当的,不值得探索,殊不知就是这个简单的过程也是很多很多内部指令的结果,这些都不思考更不要指望他们去思考“最初的操作系统”类的问题了。一句话,没有探索的欲望和好奇心,就不要搞研究!”
======================================================================================
他山之石:
>先有操作系统,还是先有汇编器?
不知道大家对CPU是如何理解的?编译器是个什么东西?操作系统是个什么东西?
CPU是一个地道的“孩童”,它的母语是用0和1表示的机器语言,难道它的母语有不能表达出的任何意愿吗?就像我们用汉语还会有表达不出来的意愿吗?除了弱智者以外,恐怕没有。所以,CPU的任何意愿都可以通过其母语机器语言实现。难道机器语言就不能编写操作系统吗?谁敢说CPU上执行的Windows不是用机器语言表示的指令集合!
编译器和操作系统的本质不同吗?都是程序而已!都是机器代码序列。原始人用手摔碎石头当作工具,又用这个工具去方便的做其他事情,难道没有块摔碎的石头,靠他们的双手就做不了同样的事情吗?我敢打包票,第一个编译器肯定是用机器语言编写的。我敢打包票,第一个操作系统更绝对是用机器语言编写的。谁还问:先有操作系统,还是先有汇编器?
最终的答案就是:编译器和操作系统都是软件。
==============================================
---------------------
作者:10的一百次方
来源:CSDN
原文:https://blog.csdn.net/ad_xi/article/details/51783245
版权声明:本文为博主原创文章,转载请附上博文链接!