教育改变生活
标题:
CPU 是怎么认识代码的?(五)
[打印本页]
作者:
李玮
时间:
2020-4-7 15:53
标题:
CPU 是怎么认识代码的?(五)
我们把刚才的程序整理一下,
01000001000101000010000000010011
你来把它输入CPU,我去准备一下去幼儿园大班踢馆的工作。
神马?等我们输完了人家小朋友掰手指都能算出来了??
没办法机器语言就是这么反人类。哦,忘记说了,这种只有01组成的语言被称之为机器语言(机器码),是CPU唯一可以理解的语言。不过你把机器语言让人读,绝对一秒变典韦,这谁也受不了。
所以我们还是改进一下吧。不过话虽这么讲,也就往前个30年,直接输入01也是个挺普遍的事情。
于是我们把我们机器语言写成的程序
0100 0001 ;寄存器存入10001 0100 ;寄存器的数字加40010 0000 ;乘20001 0011 ;再加三
改写成
MOV 1 ;寄存器存入1ADD 4 ;寄存器的数字加4SHL 0 ;乘2(介于我们设计的乘法器暂时只能乘2,这个0是占位的)ADD 3 ;再加三
是不是容易读多了?这就叫汇编语言。
汇编语言的好处在于它和机器语言一一对应。
也就是我们写的汇编可以完美的改写成机器语言,直接指挥cpu,进行底层开发;我们也可以把内存中的数据dump出来,以汇编语言的形式展示出来,方便调试和debug。
汇编语言极大的增强了机器语言的可读性和开发效率,但对于人类来说也依然是太晦涩了,于是我们又发明了高级语言,以近似于人类的语法来表现数据结构和算法。
比如很多语言都可以这么写:
a=(1+4)*2+3;
当然这样计算机是不认识的,我们要把它翻译成计算机认识的形式,这个过程叫编译,用来做这个事的东西叫编译器。
具体怎么把高级语言弄成汇编语言/机器语言的,一本书都写不完,我们就举个简单的例子。
我们把
(1+4)*2+3
转换成
1,4,+,2,*,3,+
这种写法叫后缀表示法,也成为逆波兰表示法。相对的,我们平常用的表示法叫中缀表示法,也就是符号方中间,比如1+4。而后缀表示法则写成1,4,+。
转换成这种写法的好处是没有先乘除后加减的影响,也没有括号了,直接算就行了。
具体怎么转换的可以找本讲编译原理的书看看,这里不展开讲了。
转换成这种形式之后我们就可以把它改成成汇编语言了。
从头开始处理,最开始是1,一个数字,那就存入寄存器。
MOV 1
之后是4,+,那就加一下
ADD 4
然后是2,*,那就乘一下(介于我们设计的乘法器暂时只能乘2,这个0是占位的)
SHL 0
最后是3,+,那再加一下
ADD 3
最后我们把翻译好的汇编整理一下
MOV 1ADD 4SHL 0ADD 3
再简单的转换成机器语言,就可以拿到我们设计的简单CPU上运行了
其实到了这一步,应该把这个问题都讲清楚了:C语言写出来的东西是怎么翻译成二进制的,电脑又是怎么运行这个二进制的。
欢迎光临 教育改变生活 (http://bbs.goldoar.com/)
Powered by Discuz! X3.2