从头开始学习代码——汇编学习总结

- 汇编语言的定义及衍生
计算机从发明开始的定义其实是用作计算领域的,我们现代的计算机功能已经越来越复杂,实现的作用也越来越大,但是究其根本,计算机所做的工作仍然还是对于数据的操作和计算。
最初的时候,并没有语言的概念,所有的计算机操作都是通过高低电压(大家就不要纠结如何通过高低电位差进行计算机操作了)的变化来进行的,即是我们所说的01010001010这种形式,用二进制数字形象的表示高低电位差,这样的操作方式,是原生的,最基础的计算机操作方式,但是这种方式实在是太麻烦了,完全面向于机器,对于机器来说,010001的操作是最直白的,但是对于程序员来说却不是,机器码编码难度高,纠错能力差,对人类来说是相当的不友好,那么为了使程序员方便,就有了一些新的改进。如何改进呢,我们把一些常用的机器码,进行封装操作,是的,封装,这个在高级语言中使用的词被我用在了这里,但我觉得真的是合适至极,比如说,对于机器指令:1000100111011000(将寄存器BX的内容送到AX中),封装为:mov ax,bx。那么在需要编写这条指令的时候,我们只需要写入我们封装的语言就可以。
这就是汇编语言的雏形,基于机器语言所封装的,面向人类自然语言的一种编程方式。
但是这种封装谁都能做,每个人做的封装和其他人的也不一样,那么机器怎么识别哪个指令对应哪个机器码呢,这里就说到了规则的产生,机器并不会主动识别程序员写的程序,机器所有的操作都是程序员通过编程所赋予的,那么对于一个没有规则限制下所封装的语言,当然就是各有各的特色,这也就造成了一个比较搞笑的局面,A程序员通过自己封装的语言写的程序到了B程序员的机器上无法运行,只用把A封装的机器编码一并导入才能正常使用(大家不会以为封装的语言不需要解封装吧,Q–1,1–Q的道理我想大家都是明白的),但是B也有自己封装的一套语言,这就很尴尬了,所以后来大家就做了一个规则的约定,统一使用某一种封装语言作为通用的语言,方便大家的交流和程序的流通,于是就有了汇编的产生。
在我看来,所有的语言,无论是所谓的低级语言汇编还是高级语言C,C++,JAVA,PHP,PYTHON,ANDROID或者IOS,本质上都是对机器码的封装,只不过区别就是直接和间接而已,汇编直接封装了机器码,C,C++封装了汇编,JAVA,PHP封装了C和C++,Android封装了JAVA,最终实现的就是封装机器码。
说道这里,那么对于另一个名词“编译环境,运行环境”我们就很好解释了,这就是一套对应的编码,解码机制而已,就像密码对应着密码本,一种语言对应着一种环境,那么最基础的环境我想应该就是汇编环境了,如果有一天我们的计算机不再使用汇编封装的环境,那么对于所有基于汇编产生的新语言,在计算机上也就无法运行,因为他们所对应的密码本没了,机器就不认识他们了。

- 汇编语言的优点
直白,面向机器的同时面向人类,我们可以清楚的知道我们正在操作的是什么,它会产生何种结果,以及程序的运行都是相当清楚地,比起高级语言,我们更加能看得清我们的程序到底都做了些什么,我们可以改变些什么,通过编写汇编我们可以更好的了解程序是怎么一回事
- 汇编语言的缺点
因为面向机器的原因,学习汇编的难度十分大,因为除了必要的编程知识,我们还需要学习机器知识,了解计算机的内部原理,,什么是CPU,什么是寄存器,什么是内存,什么是显存,什么是地址线,数据线,控制线,如何做地址对应等等一系列知识储备(虽然我觉得作为一个程序员来说这些都是要掌握的,但我选择放在未来),可以说对初学者是十分不友好了,而且在高级语言横行的今天,汇编显得更为繁琐,更不适合人类的习惯
- 通过汇编学到了什么
学到了什么?怎么说呢,前三点都算是我学到的吧,计算机语言的发展(封装封装封装),程序运行到底是干啥去了,计算机的内部结构等等,不过更为重要的应该就是思维上的改变吧,在学习过初级JAVA的基础上, 再回头看汇编,会更清楚的明白“语言只是一种工具,重要的是思想”这句话的含义,更加了解数据是怎么回事,同样的数据是怎么展示出不同的结果


                                                                         汇编语言(第2版)   王爽著

你可能感兴趣的:(思维篇,C语言篇,Java篇,程序篇,问题记录篇)