菜鸟的汇编语言学习笔记

汇编语言学习笔记

 1.1 机器语言

计算机发展初期,人们都是用机器语言进行编程的,这也是人们能实现编程控制计算机的最低级别。那么机器语言是什么样子的呢?就是用0和1组成的一个串(形如011010101),cpu的每一个功能对应着一个串,cpu得到这样的串就去执行对应的功能,我们把这样的串叫做一条机器指令。cpu提供的所有功能,这些功能对应的所有串,我们称之为这种cpu的指令集。这里我们就知道指令集是什么东东了。cpu提供的功能的个数是一定的,但是0和1组成的串却有非常多的组合。所以并不是任意一个串都可以让cpu去执行特定的功能,只有指令集中的串才可以。

每一种cpu,由于硬件设计和内部结构的不同,对应的指令集也是不同的。也就是说,每种cpu都有专属于自己的一套指令集。这就好比两个人,一个说英语,一个说法语,虽然他们的语言都是由相同的26个字母组成的(就像不同cpu的指令集都是由0和1组成的),但是同样的一个单词,他们两人可能理解成不同的意思。同样的,他们要表达同一个意思,也可能用不一样的单词。由此可见,用机器语言编写的程序是不可移植的。什么叫移植?就是你用cpu-A的指令集编写一个程序,可以在cpu-A上成功运行,于是你想不改动该程序,然后在cpu-B上同样运行成功,实现相同的功能。想想也是不可能,就好比你用英语写了一篇文章,拿去让只会法语的人读,你说他会读懂吗?

早期用机器语言编写程序的程序猿,不能不称之为神。你要记住cpu提供的所有的功能,以及每个功能对应的一串二进制指令,然后熟练的使用。万一哪个地方0被错误写成了1,你还要在万千个0和1中把它找出来。想想都有点不可思议。关键是万一换了其他的cpu,你还要重复上面的过程重新编写你的程序。

注:其实还有更低级别的指令,叫做微指令,每条机器指令都被翻译成几条微指令然后让cpu去执行。至于微指令,不用去了解,太底层了,而且是cpu生产商的机密(就好比用Iphone6,我们能使用Iphone6的各种功能,但是我们不知道这些功能是如何实现的,这就是商业机密,指令集就是一个功能集合,我们用指令集去实现自己想要的功能,但是这些功能如何实现的,就是微指令的事,人家不会告诉你的)。我们只要知道cpu中固化了一套自己的指令集就可以了。至于什么是固化,我也不懂,貌似是涉及硬件的东西,但是你只要明白,不是我指令集里的东西我不认。

讲个很久以前的笑话,说有个人很牛逼,有天发现自己的驱动软件坏掉了,于是他找来一张空光盘,拿起一根细针,疯狂得戳呀,一个小时过去了,塞入光盘,驱动安装成功。这虽然是夸张,但是由一点是非常正确的,不管你用什么语言编写的程序,最终都会被翻译成机器语言在机器上执行,没办法,谁让机器只认0和1呢。


你可能感兴趣的:(菜鸟的汇编之旅)