汇编学习浅谈

   本文送给从未结果过程序和学习过高级语言想学习汇编的同学们,至于‘同学’这个词,本质就是共同学习的人。
   简单的自我介绍下,我今年30了,之前除了用电脑打游戏,对于程序可以说一无所知,很多人应该和我一样,都是用过电脑但并不了解编程。我之所以在这个年龄段选择学习编程,是编程的上限很高,值得用余生去探索。
   由于年纪比较大,在入门之前做过很多了解,现在流行的都是高级语言,编程语言在各种材料中都是一句话带过,打上的标号都是低级语言,因为‘低级语言’这四个字,让很多小白与他无缘,至少他不会是很多的人入门课程。
   在介绍汇编语言之前插一个有关联的题外话,大家生活在当下的社会中,武术,舞蹈,音乐,美术等这些艺术范畴的东西或多或少都有一些接触,如武术,舞蹈的核心是力量,平衡,柔韧,音乐是旋律,美术是线条和色彩的组合,这些核心的东西,构造了一个个让人赏心悦目的成品,展现在我们的眼前。
   现在我们用中国传统民乐横笛做例子,作为中国人,最少也是见过的,横笛音律有6孔,加上一个气息入口的吹孔,这是我们主要控制的七个空,通过气息吹入的强弱,和6个音孔不同的组合,可以演奏千变万化的旋律。
   看到这里很多人会觉得我是不是跑题了,但是作为中国人,抽象类比的文化早已植入我们骨髓,所谓大道相通,万法归宗,不是一句空话,接下来我们使用汇编语言和横笛两个看似无关东西来求证这句话。
   开始主题。
   横笛上面有很多空,但是我们能操作的只有七个空,对于演奏者来说,毕生练习的也仅仅是这七个空,至于其他孔,很多时候不再演奏范围,如贴笛膜的孔,计算机也一样,他的组成部分比起横笛要复杂的多,但是很多的部件在编程时是可以忽略的,可以肯定,忽略的要比记忆内容多很多。
   现在我们谈谈,哪些是如同横笛的七个空一样?是我们需要的。
   寄存器,内存,简而言之就这两个东西;
   寄存器包括通用寄存器,标志寄存器;
   内存分为无数个单元,一个单元是8个二进制位,每个单元都有对应标号,这就如同你家在地球上,想找到你家需要地址,如某国家,某省,某市……一直到你家的门牌号,如果将你家的地址进行数字编号可能123456789,如此可以理解内存的编号存在的作用,每个8位的内存单元编号都是不一样的。
   内存中单元有可以组合成为数据段,代码段,堆栈段。
   寄存器就是6个音孔,内存就是气孔,气息吹入,音孔组合就有旋律,计算机也一样,将内存的信息送入寄存器就可以运算。至于为什么会运算,就和横笛为什么会产生旋律是一个道理,可以思考也可以无视。
   通过这个例子,读者大体能知道编程的简单逻辑关系,寄存器和内存都是是硬件范畴。软件就是对硬件进行控制的工具。软件就像你吹的气流强弱,输入的指令就如同各个音孔的开闭,这是我们可以根据意识可控制的,但不能超出横笛的局限,这个局限是指法吹法必须正确。程序也一样,他的局限是编译器和连接器,你书写的内容首先需要他们读懂,才能转化成可执行的程序。
    以上这个类比,只是简单的构建一个编程的宏观逻辑思维,使用我们熟悉的事物,通过抽象类比的方法了解一个陌生的东西,如果读者根本不知道横笛是什么?那么以上仅仅就是一段浪费读者时间的文字而已。
    抽象类比是一个非常好的学习方法,尤其是中国人,象的文化基本是与生俱来的。可以使用任何你熟悉的事物,来类比一个陌生的东西,从而更好的建立全局观和逻辑性,利用这个全局观和逻辑性来探索陌生的事物。
    学习汇编资料是必不可少的,再次推荐一些入门教材,在教材方面推荐王爽老师的8086汇编,和美国基普欧文的《汇编语言基于X86处理器》,他们分别介绍了16位,32位,64位汇编。另外视频教材推荐贺利坚老师的视频教程,在网易云课堂可搜索,收费是139元(免费的永远是最昂贵的),使用教材是王爽老师的《汇编语言》。
    对于学习能力比较强的同学,可以直接绕过8086汇编,直接学习32位46位的汇编,只要下载VS2019或者2017的社区版就足以,这些是免费的异常强大的开发环境,细节的配置可以在QQ群联系我。
    不过个人建议还是先看王爽老师的数,尤其是初学者,国内能做到简单易懂,真的不多其次学习配置环境,是学习任何语言的第一门课程,要学会摸索及搭配环境,摸索的过程会有意外收获。
    有时候编程之外东西比编程本身更重要。        
    当下别的不敢说,至少能带领小白同学们入门,所谓师傅领进门,剩下的都是个人造化,万事益精不宜多,开始学习的同学,不要过早的去研究如何向显示屏输出,函数调用之类了,这些都锦上添花的东西,虽不可缺少,但并非精髓。
    重点是学会查看寄存器状态,以及反汇编的代码,这些VS都完全提供,有C语言基础的,何以写一个简单的程序,最好不要包含调用和输出输出之类的,这样方便看懂反汇编的内容(VS的反汇编内容,书写的都十分详细,其中很多书写格式值得参考),之后在慢慢加入复杂东西,不然带给你的可能是焦头烂额,在此感谢微软做出的无私贡献。
    学习汇编有一个最大好处就是,对英文的依赖非常低,英语不好或者完全不懂的也不要太担心,当你看懂了汇编,你在看C语言的时候,除了算法部分,以及一些陌生的英文符号外,其他的分分钟秒懂。
    至于算法算法是思维和逻辑层面的 ,就像横笛可以演奏,但是旋律的编写和横笛的关系并不大,计算机的算法就相当于旋律的编写,他需要日积月累的学习练习,还需要灵感。切记算法需要数学来实现,但不等于数学,严格来说是关于计算机特性的数学。
    因此不要因为数学不好,给自己添加无形的压力,这是庸人自扰,毕竟不是每一个学习编程的人都去计算导弹的轨道问题。
    切记学习之前不要给自己添加无形的包袱,那都是不智的,用空杯心态,无论是正能量还是负能量都去放空,用轻松愉悦的身心去开启一扇崭新大门。
    本次是本人首发,希望能得到大家的支持。学习汇编就是为自己练就强大的内功心法。
    鉴于本人文笔能力有限,书写不足之处还望多包涵,热爱汇编的可以加本人QQ群一起学习谈论和分享,群号;921793886
    个人QQ  522831270 ,有关汇编学习问题可以私信,我看到后,在我能力范围内的都会回答,感谢每个阅读到此处的读者,愿我们活在当下,不负当下。

你可能感兴趣的:(汇编学习浅谈)