写在汇编语言开课之前

  同学们好,这一学期,我将陪伴大家学习汇编语言程序设计。
  说到汇编语言,大家都知道它是一门低级语言。有多低级呢?计算机直接执行的是机器指令,就是二进制0、1序列,汇编语言使用一些助记符号代表这些指令。用汇编语言编程,直接操纵CPU中的寄存器,直接控制内存空间,可以说是直接操纵了计算机最底层的硬件。而我们现在,在绝大多数的情况下,都是在用高级语言编程解决问题,是不会接触计算机的底层的。

  那究竟为什么我们要学习汇编语言呢?
  首先,汇编语言尽管年事已高,但它在当前工程应用当中,仍然广被广泛使用,甚至起着不可替代的作用。在数以千计的程序设计语言家族中,有个TIOBE排行榜,每月更新一次。Java、C、C++排名前三,汇编语言,出乎很多人的意料,在2017年中排名第9。尤其是在近几年中,借物联网、嵌入式系统的快速发展,汇编语言的排名提升速度很快。这个排名,足以说明汇编语言宝刀不老,在业界被广泛的采用。

  汇编语言在行业内是一棵长青树,它在技术链条中起着一种不可替代的作用,注意是仅此一家,别无分号。汇编语言的最大的优势是效率,用汇编语言写的程序,由于是直接操纵硬件底层的,执行速度是任何高级语言无可比拟的。所以,汇编语言一般开发的都是软件系统的核心部件,计算机内部部件和外围设备的驱动程序,像操作系统的内核、工业控制系统中的实时控制部分等,还有现在的不少嵌入式系统,包括家用电器,仪器仪表、物联网系统当中的最核心的一些部件,都需要汇编语言发挥作用。既然汇编语言是解决最核心、最关键问题的,可以想像到在整个程序员的江湖中,汇编语言程序员应该坐哪把交椅。学习汇编语言对于不少学不得法的人而言,在感觉上是比较难的,汇编语言程序员排名上座也就能够得到理解了。
  汇编语言编写的程序,对计算机运行程序而言是高效率的,那就给人带来一个担心:人开发汇编语言程序的效率并不高。的确是这样。因此,在使用汇编语言时,一般只用汇编语言编写最核心最关键的部件,而其它外围的功能,用高级语言实现。然而,说汇编语言程序的开发效率低,这并不是一个绝对的真理。我们使用任何的语言开发程序,要将之用到能发挥好它自己特色的地方。如果说要在内存当中直接注入一段小程序之类的工作,用汇编语言,开发效率不知要比用高级语言快上多少倍。
  并不是每一位学习计算机的同学都是要做最核心、底层的工作。学习汇编语言程序设计,更大的意义,是将它作为学习计算机的一个途径,目标是理解计算机,对于学习计算机,能起到一种非常独特的作用。汇编语言能够直击计算机系统的核心,学习汇编语言程序的原理,阅读、编写和运行汇编语言程序,可以使我们加深对计算机原理、操作系统的理解,进而,理解整个的计算机系统体系。通过学习和使用汇编语言,就有机会钻到计算机的最核心部件中去,向上理解各种软件系统的原理,打下软件技术的理论基础,而向下呢,感知、体会和理解到机器内部硬件的底层逻辑功能。学习汇编语言程序设计,要编程序,要调试,我们将在这个学习过程当中,学会底层的程序调试和错误分析的方法,练这样的功夫,机会并不是很的。大学中的很多课程,你不要死记硬背,只图通过考试,这样的话,你才能够学到用于解决领域问题的相关知识,同时,得到深入到学科核心的钥匙。

  那接下来的问题就是我们在这门课当中要学什么,如何学了?
学什么?这门课定位是汇编语言的基础,只讲8086 PC的汇编语言。有同学就说了,这内容未免太旧了吧?是的,8086是上个世纪80年代的产品,我们要学习汇编语言,最新的应该是80x86,奔腾系列的,还有Linux汇编、ARM汇编等。为什么要选择8086作为基础呢?在这里有个方法论的问题。当我们面对一个复杂系统时,作为学习,经常需要设计一个模拟的、简化的教学系统,能够体现最核心的思维和最基础的内容,而忽略一些非核心的细节。不得不说,现在的计算机系统太复杂了,而曾经红极一时的8086产品,作为当今的教学系统,是完全胜任这个角色的。所以,我们选择8086,并且只涉及硬件层面,不针对具体的操作系统,windows、Linux什么的,一是要降低入门的难度,二是体现对汇编语言的核心思维与方法的专注。不过话又说回来,汇编语言是就是能够直接针对硬件编程的,与操作系统与关,8086PC中的很多技术,在现在的计算机上仍然有用,如果有想法再多学一些接近工作状态汇编语言,在这门课程传授的知识和方法的基础上,继续再进一步就可以。这门课所学的内容,还可以为学习嵌入式系统、微机原理、单片机等作为基础。

  说到学习方法,这门课将贯彻我一直提倡的,实践的学习方法。在视频讲解中,我将不局限于所谓讲知识,而是把所有的知识点都会在计算机上展示出来。CPU中的各种部件,我们是不能直接看到的,但是,我会引导大家,学会通过软件工具进行观察的方法。我们选的参考教材,是王爽老师的《汇编语言》第3版,这本书的特色,是王老师设计出了一个循序渐进学习的路线,在内容的编排上很好的支持。一个知识点之后,设计了问题和检测点,强调只有通过了检测,才可以继续学习下面的内容。这些问题和检测点,将作为实施翻转课堂教学时,老师和同学们在实体的课堂上开展学习活动的主要内容,而对于通过网络学习的同学,就需要自己对照教材,自行把这些问题和检测点攻克了,然后再往下走。另外,为支持大家的实践学习,我也将再建设一些其他的配套的资源,通过我的博客免费公布。

  好了,从下一讲开始,我将主要通过录屏的方式,参考教材的体系进行讲授,希望同学们能够在听讲之余,同步阅读教材,完成相关的实践,将汇编语言程序设计的方法,用有效的学习真正掌握了。

时间: 2024-11-05 12:37:19

写在汇编语言开课之前的相关文章

用于编写游戏的主要编程语言的介绍及其优缺点

这是每个游戏编程FAQ里都有的问题.这个问题每星期都会在游戏开发论坛上被问上好几 次.这是个很好的问题,但是,没人能给出简单的答案.在某些应用程序中,总有一些计算 机语言优于其他语言.下面是几种用于编写游戏的主要编程语言的介绍及其优缺点.希望这 篇文章能帮助你做出决定. 1.C 语言 如果说FORTRAN和COBOL是第一代高级编 译语言,那么C语言就是它们的孙子辈.C语言是Dennis Ritchie在七十年代创建的,它功能 更强大且与ALGOL保持更连续的继承性,而ALGOL则是COBOL和

win32-用汇编语言写一个.ini文件处理程序

问题描述 用汇编语言写一个.ini文件处理程序 用汇编语言编写一个命令行程序,能处理.ini文件,功能类似inifile.exe(http://home.mnet-online.de/horst.muc/wbat32.htm#inifile). 必须自行实现对.ini文件的处理,不得调用具有处理.ini文件能力的其它程序的现成功能. inifile.exe是用来处理ini文件的.用 inifile.exe /? 可看到帮助内容. 这是我们的一个作业,但是我是新手所以不知道该从何入手.所以想问问有

万字实录:从DDCTF大赛看当前网络安全新趋势 | 硬创公开课总结文+视频(上篇)

  如果说,滴滴出行(以下简称滴滴)是近几年来让大家出行发生翻天覆地变化的一家公司,想必你不会反对. 据滴滴给出的官方数据,滴滴全平台上每天超过2000万订单.与此而来的是,这么多乘客的消费数据和个人信息,滴滴怎么守护? 快速增长的滴滴意识到了这一点.2016年9月底,硅谷安全教父弓峰敏与网络安全资深专家卜峥加盟滴滴,弓峰敏出任滴滴信息安全战略副总裁和滴滴研究院副院长,负责制定信息安全战略和研发下一代信息安全技术,卜峥则担任滴滴信息安全副总裁,全面领导信息安全团队.今年3月9日,滴滴又宣布在加利

白帽黑客教主 TK 告诉你,黑客的游戏 CTF 究竟是什么 | 硬创公开课总结文+视频

   知乎里曾有一个热门回答"智商被碾压是一种怎样的体验". 由于经常面对异常机智的黑客,雷锋网编辑捂着胸口,表示小心心好痛.但是,如果是看着一群高智商黑客互相"碾压智商",开展一场技术.策略与智商的较量,感觉还是挺爽的! CTF(Capture The Flag)就是这样一种较量,它又被称为"夺旗赛",是网络安全技术人员之间进行技术竞技的一种比赛形式,起源于1996年DEFCON全球黑客大会,以比赛形式代替黑客们之间的真实技术比拼. 也就是说,

汇编语言课程主页

[写在开课前] 这学期,接了一门新课--汇编语言程序设计. 这是门好课.学好了,能干的工作,那是高大上:职业中不指望自己的工具袋中备一把名叫"汇编"的榔头的同学,借着汇编语言,也可以练计算机专业学习的内功. 新培养方案中恢复了这门课,我就想将捣鼓捣鼓这门课程.搞了好多年"计算"的事,早对自己离"计算机"有点远而不满.备课中,再回计算机的底层,重新体会"螺丝壳里做道场"的精致. 教学模式继续翻转课堂,随着授课进度,同步建设资源.

跟我一起写 Makefile

陈皓 概述 -- 什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和 professional的程序员,makefile还是要懂.这就好像现在有这么多的HTML的编辑器,但如果你想成为一个专业人士,你还是要了解 HTML的标识的含义.特别在Unix下的软件编译,你就不能不自己写makefile了,会不会写makefile,从一个侧面说明了一个人是否具备完 成大型工程的能力. 因为,makefile关系到

简明x86汇编语言教程(1)

第○章 写在前面 我不想夸大或者贬低汇编语言.但我想说,汇编语言改变了20世纪的历史.与前辈相比,我们这一代编程人员足够的幸福,因为我们有各式各样的编程语言,我们可以操作键盘.坐在显示器面前,甚至使用鼠标.语音识别.我们可以使用键盘.鼠标来驾驭"个人计算机",而不是和一群人共享一台使用笨重的继电器.开关去操作的巨型机.相比之下,我们的前辈不得不使用机器语言编写程序,他们甚至没有最简单的汇编程序来把助记符翻译成机器语言,而我们可以从上千种计算机语言中选择我们喜欢的一种,而汇编,虽然不是一

新手必看-汇编语言超浓缩教程

" 哎哟,哥们儿,还捣鼓汇编呢?那东西没用,兄弟用VB"钓"一个API就够你忙活个十天半月的,还不一定搞出来."此君之言倒也不虚,那吾等还有无必要研他一究呢?(废话,当然有啦!要不然你写这篇文章干嘛.)别急,别急,让我把这个中原委慢慢道来:一.所有电脑语言写出的程序运行时在内存中都以机器码方式存储,机器码可以被比较准确的翻译成汇编语言,这是因为汇编语言兼容性最好,故几乎所有跟踪.调试工具(包括WIN95/98下)都是以汇编示人的,如果阁下对CRACK颇感兴趣--:二

简明x86汇编语言教程(7)

5.0 编译优化概述 优化是一件非常重要的事情.作为一个程序设计者,你肯定希望自己的程序既小又快.DOS时代的许多书中都提到,"某某编译器能够生成非常紧凑的代码",换言之,编译器会为你把代码尽可能地缩减,如果你能够正确地使用它提供的功能的话.目前,Intel x86体系上流行的C/C++编译器,包括Intel C/C++ Compiler, GNU C/C++ Compiler,以及最新的Microsoft和Borland编译器,都能够提供非常紧凑的代码.正确地使用这些编译器,则可以得