高校汇编语言教学中若干难点的分析
1 引言
机器语言是计算机能直接识别的语言,它是一种由0和1组成的二进制语言,汇编语言是对机器语言符号化的一种语言[1],属于低级语言。由于汇编语言与硬件有着千丝万缕的紧密联系,因此用汇编语言经过编辑、编译、链接等步骤获得的可执行程序不仅运行速度快、占用内存空间少,而且能有效地对硬件设备进行控制以及开发。汇编语言的应用广泛,例如:在可行性分析、网络安全维护、生物特征识别、嵌入式系统开发、农论文联盟http://业机械化以及电力控制等等领域中都可以看见汇编程序的身影。因此在现在很多高校里,汇编语言不仅是计算机科学与技术学科专业的主要课程,也是其他相关专业的基础课程[2],例如:电子技术、自动控制、机械工程、通信工程等相关学科或专业都会使用到汇编语言。但是,另一方面汇编语言还具有指令集繁多、寻址方式多样、程序编写与调试复杂、程序可读性较差等等缺点,再加上汇编语言常常涉及中央处理器、内存单元和i/o接口等多个硬件处理细节,因此对于高校汇编语言的教学来说,如何尽快尽好地让学生掌握汇编语言编程往往是比较棘手的问题。为了解决这一问题,本文将对汇编语言教学中存在的若干难点进行分析,以便找到突破点,更好地为汇编语言教学改革服务。
2 汇编语言教学中的难点
笔者目前已经在高校从事汇编语言教学多年,经过多年的教学发现,在汇编语言教学中存在如下几处困难:(1)学生往往弄不清什么是寄存器,什么是存储器,进而无法理解寻址方式bx和[bx]之间的区别。wwW.133229.cOm(2) 由于汇编语言中寻址方式有很多种,寄存器也有多个,因此学生在学习寻址方式时经常会出错,例如:存储器寻址时出现[dx]、[ax]、[cx]、[ds]以及[ax+bx]等错误。寻址方式是汇编语言的基础,如果无法熟练地掌握各种寻址方式,那么汇编语言程序的编写将变得举步维艰。(3)学生在使用属性修改运算符ptr、字节定义伪指令db、字定义伪指令dw以及双字定义伪指令dd存在很多问题,例如:对于何种情况下需要使用ptr常常把握不准,对于由db、dw和dd定义的数据在内存中的存放情况含糊不清。(4)汇编语言指令繁多,各个指令的使用规则差异很大,因此学生在学习指令时经常出现指令使用违反规则的情况,例如:使用指令div进行16位数的除法时没有把被除数事先放进默认的寄存器ax和dx中,堆栈操作时将进栈指令写成push al,以及将sal、shr、sar、rcl、rcr、rol、ror等移位指令不加区分地使用。(5)复杂的汇编语言编程让已经具有高级语言编程经验的学生索然无味,厌学情绪时常出现。
3 针对难点而采取的教学改革措施
针对上一节总结的汇编教学中存在的难点,这里我们建议分别可以采取如下教学改革措施:
(1)首先告诉学生寄存器和存储器尽管是计算机的重要硬件组成部分,但是寄存器是在cpu中的,而存储器这里主要指的是内存,因此寄存器和存储器是两种不同的相互独立的硬件设备。寻址方式中bx属于寄存器寻址,获得的操作数是放在寄存器中的,也就是在cpu里的,而[bx]属于存储器寻址,获得的操作数是放在内存中的,因此两者是完全不同的寻址方式,此外,[bx]中的bx寄存器里存放的是内存地址。实际课堂讲解时还可以利用打比方的方式配合说明,比如把bx这个寄存器比喻成一个盒子,内存比喻成一幢大楼,大楼的每个房间就是内存单元,那么寻址方式bx获得的操作数是放在盒子中的,而利用[bx]获取操作数时,盒子中放的是操作数的地址,先从盒子中取出地址,然后根据地址到大楼里面找到对应的房间,那么操作数就在这个房间里。
(2)将所有的寻址方式以及每种寻址方式所涉及的寄存器用一个表格来说明,如文献[3]第45页的表3-2所示,这样做的目的使得学生能很清楚地知道每种寻址方式可以使用哪些寄存器,例如:基址寻址中可以使用的16位寄存器只有bp和bx两种,而变址寻址可以使用的16位寄存器也只有si和di两种。
(3)在讲解属性修改运算符ptr时也可以采用表格的形式,将所有需要使用ptr的情况给罗列出来,实际讲课经验证明一个表格有时候比语言更具有表达能力。此外,对于数据定义伪指令db、dw和dd的讲解,则一定要用典型的例子来加以说明,例如:比较buf1 db ‘a’,’b’与buf dw ‘ab’这两条数据定义伪指令中字母a和字母b在内存中的存放顺序就可以使得学生清晰地了解db与dw的不同之处了。
(4)汇编语言的指令的确是非常多,要全部记住,对于初学汇编语言的学生来说是比较困难的,因此在教学中针对常用的指令需要多举例子,利用较多的程序片段来说明指令的用法。例如:针对每个移位指令都需要举一个程序实例来加以解释,并且还需要适时地在黑板上画出移位指令执行前后,标志寄存器和操作数的变化情况。指令的讲解方法其实和c语言中表达式、语句的讲解方法是一样的,就是通过多个程序实例来进行强化。
(5)首先,在汇编语言开讲的第一节课,给学生多介绍一些汇编语言在将来实际工作中的作用,并以就业为导向,激发学生学习汇编语言的热情。其次,由于学生多数都学习过c语言,因此课堂授课可多与c语言进行对照讲解,例如:在汇编语言的第一节课,就演示一个程序实例,在屏幕上显示“welcome to assembly language”,这是很多c语言的第一节课中常采用的方式。最后,建议尽早地介绍dos和bios系统功能调用,以便学生能进行实际地输入与输出操作,增加学生学习的兴趣。
4 结语
汇编语言课程是高校里相关专业的一门重要的基础课程,它编程与调试复杂,程序更是难以阅读与理解,因此汇编语言的学习会显得比较吃力。本文分析了汇编语言教学中存在的若干难点,并针对这些难点分别提出了相应的教学改革措施,希望这些措施可以给其他信息类课程的教学改革所借鉴。最后需要提一下的是笔者多年来以文献[3]为教材进行汇编语言的教学工作,因此文中所说指令用法都以文献[3]为基础。