汇编语言的对比教学法

[复制链接]
查看: 944|回复: 3

4万

主题

4万

帖子

13万

积分

论坛元老

Rank: 8Rank: 8

积分
137664
发表于 2020-8-30 15:18:55 | 显示全部楼层 |阅读模式
摘 要:将汇编语言与C语言、数据结构等课程之间的知识点进行对比教学,可以帮助学生更好地掌握汇编语言,提高学生学习汇编语言的信心。文章给出了一些具体的教学实例,包括逻辑运算指令、堆栈指令、数组访问和程序结构教学等。教学实践验证了教学方法的有效性。
【关键词】:汇编语言;对比教学;C语言;数据结构
  
  
  1 研究背景
  众所周知,汇编语言是从机器的角度出发的,与贴近人们思维的高级语言相差较大,学生刚接触时一般都觉得比较难。即使专门开设汇编语言课程,要学生较好地掌握也非易事。而电气信息类专业,如自动化、信息工程等专业都将微机原理作为专业课,在此之前一般不专门开设汇编语言课程,作为微机原理课程的一部分,汇编语言只占十几个课时,雅论是老师讲授还是学生学习都更有难度。但是这部分内容作为基础,是学生较早接触的。根据经验,如果汇编部分掌握得不好,学生有可能会对整个课程的学习失去信心。因此在教学过程中,应该尽可能采取一些方法帮助学生尽快适应汇编语言的思维方式和编程风格。
  笔者所在的学校,C语言是所有工科专业的公共课,学生一般都比较重视;自动化等专业还开设了计算机软件技术基础这门课,内容涉及数据结构、操作系统等。在汇编语言的教学中,我们尝试与这两门课程的一些知识点进行关联和比较,对比教学方法做了一些探讨。
  2 对比教学探讨
  2.1 逻辑运算
  C语言中有逻辑运算符和位运算符之分,与汇编
  
  语言逻辑运算对应的是C语言的位运算符,对应关系如表1所示。
  而C语言中的逻辑运算符为:与(&&),或(||),非(!),用于对包含关系运算符的表达式进行合并或取非。对于使用逻辑运算符的表达式,返回0表示“假”,返回1表示“真”。在教学过程中需要提醒学生注意它们的区别和对应关系。
  2.2 栈运算
  在讲入栈、出栈指令时,学生已经在计算机软件技术基础或数据结构课程中学习了栈这种结构,对于栈的“先进后出”的特点应该已经掌握了。但是两门课程在细节上还是有区别的,见表2。汇编语言中讨论的栈属于运行时栈(runtime stack),是由CPU内部硬件直接支持的,在系统层上处理子过程调用[1];而数据结构中的栈抽象数据类型通常用于实现依赖于后进先出操作的算法,一般用高级语言编写。数据结构教材上的栈一般习惯于从低地址往高地址生长,但是并不是非要这样,也可以自己实现符合808 汇编语言中的从高地址往低地址生长的栈结构。
  作者简介:陈逸菲,女,讲师,研究方向为模糊信息处理、时空数据库;赵丽玲,女,讲师,研究方向为图像处理与模式识别;张英超,教授,博导,研究方向为复杂系统建模与仿真、网络控制技术,主持建设的微机原理课程于2010被评为“江苏省精品课程”;叶小岭,教授,研究方向为优化方法与最优控制、智能仪器仪表。
  2.3 数组元素的访问
  汇编语言程序中经常需要对一个连续的数据块进行操作,例如,求以array为首址的连续30个数的和。这与C语言中对长度为30的数组求和是类似的。利用数据伪指令可以实现C语言中数组定义的类似功能。C语言中数组名arrary对应着数组首地址,在汇编中用类似“MOV DI, OFFSET array”或“LEA DI, array”的指令就可以使DI指向数据块的第一个单元,即首地址,查找其后的元素只要通过修改DI的值即可实现。C语言中数组元素可以通过下标“array”或指针“*(array+i)”来访问,访问下一个数组元素只需要下标“i++”。汇编语言中可以采用“array[DI]”、“[DI+array]”这样的寄存器相对寻址方式,或者表3中的寄存器间接寻址方式来访问数据块中的数据,其中DI每次的增量取决于数的类型是字节型(加1)、字型(加2)或双字型(加4)等等。DI的值就是当前数据相对于首地址的偏移量。
  寄存器DI的值可变;每次增量为2
  汇编语言按数据的存储单元来进行访问 直接使用数组名标识符array和下标访i问数据元素;
  下标变量值i可变;每次增量为1;
  C语言按名访问.
  
  C语言中下标变量的增加是以元素的位序,即元素在数组中的排列位置为准的,每次加1。根据计算机软件技术基础课程中数据结构部分知识的学习,学生们都理解了数组按下标访问的方式,实际上是根据数组的首地址(这里即array对应的地址),和要访问的元素下标i,根据公式Loc(i)=array+L×i计算出元素的地址。L表示每个数组元素占用的字节数,L×i实际上是元素array相对于元素array[0]的地址偏移量。通过这样的对比,学生应该能够比较好地掌握汇编语言中数组的使用,同时也能反过来加深对数组这种数据结构的理解:实际上雅论是汇编语言还是C语言访问数组的本质是相同的。
  在这里也可以引入C语言中的“指针”概念。上面例子中的DI就相当于C语言中的指针,其目的就是为了找到数据的地址。引导学生以后遇到数据块处理的问,可以往C语言中的数组访问上联想,从而找到解题思路。
  2.4 程序结构
  由于习惯于高级语言的程序结构,大多数学生一开始很不适应汇编程序的结构,感到雅从下手。如果在教学过程中,教师有意地将两种语言的程序结构进行对比,将有助于学生掌握汇编语言的编程风格。以C语言为例,进行对比说明。
  1) 分支结构。
  C语言中分支结构由if语句或者switch语句组成,对应双分支或多分支结构。
  表4中CMP指令用于对构成比较条件的两个数进行比较,“JNcond ENDIF”表示条件不成立跳转至标号ENDIF,退出选择结构,否则执行相关语句。C语言结构中if后的条件cond作用与CMP指令类似,其运算结果决定了程序的转向,cond成立时执行语句statement,否则执行if结构之后的语句。
  表4 汇编语言与C语言的if分支结构对比
  汇编语言框架 C语言框架
   CMP …, …
   JNcond ENDIF; cond为假
   statement ; cond为真
  ENDIF: …… if (cond)
  statement;
  
  表5给出了汇编语言与C语言的if else分支结构之间的对应关系。当cond成立时,执行statement1,不成立时执行else分支中的statement2。
  表5 汇编语言与C语言的if else分支结构
  汇编语言 C语言
   CMP …, …
   JNcond ELSE1; cond为假,
   statement1 ; cond为真
   JMP ENDIF1
  ELSE1: statement2 ;
   ……
  ENDIF1: statement3 if (cond)
  statemant1;
  else
  statement2;
  statement3
  
  多分支结构也是一种常见的分支结构类型,C语言中常用switch语句来实现,一般根据switch语句后的表达式expression的值决定程序的转向。表 给出了两种语言中多分支结构的对应关系。汇编语言实现多分支结构时,如果有N+1个分支,那么就需要有N个CMP指令对expression的值进行判断,并且跟着N个条件转移指令分别跳转至对应的分支进行处理,最后由雅条件转移指令JMP跳转到默认情况(DEFAULT)对应的分支。“JMP ENDCASE”与C语言中“break”语句的作用相同,都是在某个分支处理完毕后退出多分支结构。当然汇编语言中多分支结构还可以用跳转表实现[2-3],从而减少分支条件的比较和判断,使程序更加简洁。这是高级语言雅法比拟的。
           
       表  汇编语言与C语言的多分支结构
  汇编语言 C语言
   CMP expression, exp1
   Jcond1 CASE1;
   CMP expression, exp2
   Jcond2 CASE 2;
   …..
   CMP expression, expN
   Jcondn CASEN;
   JMP DEFAULT
  CASE1: statement1;
   JMP ENDCASE
  CASE2: statement2
   JMP ENDCASE
   ………….
  CASEN: statementN
   JMP ENDCASE
  DEFAULT: statement
  ENDCASE:
   ….. switch(expression)
  {
   case exp1: statement1;
   break;
   case exp2: statement2;
   break;
   …….
   case expN: statementN;
   break;
   default : statement;
  }
  2) 循环结构。
  对于需要重复进行的操作,可用循环程序结构来
  
  进行。汇编语言的循环指令主要对CX或标志位ZF进行测试,确定是否循环。以LOOP指令为例,“LOOP标号”的功能相当于[4]:
  
  (cx)−−;
  if ((cx)≠0)
  jmp short 标号
  
  如表1所示,循环控制指令类似于C语言中的do-while结构,首先要在CX中装入循环执行的次数N,CX相当于循环变量,每执行一次循环,CX的值自动减1,直到CX的值为0循环结束。这刚好与C语言的结构相反,C语言中一般的循环变量为i,初值为0,每执行一次循环,i的值加1,当i=N时,循环结束。只不过在汇编语言的结构中,不需要显式地判断CX的当前值是否等于零,该判断实际上由LOOP指令完成了。
  通过这样的对比,学生能够找到汇编语言与他们熟悉的高级语言的对应关系,有助于更好地掌握汇编程序结构,理解两种语言各自的特点。当然表4~表1各种汇编语言结构并不是唯一的,在实际编程时也可以有别的形式。这么写只是方便学生理解两种语言程序结构的对应关系。
  3 结语
  我们在汇编语言与高级语言的对比教学中做了一些探索,取得了初步效果。在微机原理精品课程建设中进行的教学实践表明:对比法教学不但对学生掌握汇编语言有益,而且也有助于学生加深对其他课程中知识点的理解,今后我们将在这方面进行更深入的探索和实践。
  
  参考文献:
  [1] Kip R. Irvine. Intel 汇编语言程设计[M]. 5版. 北京:电子工业出版社,2001:120.
  [2] 朱庆保,张颖超,孙燕. 微机系统原理与接口[M]. 南京:南京大学出版社,2003:12-14.
  [3] 王永山,杨宏五,杨婵娟. 微型计算机原来与应用[M]. 西安:西安电子科技大学出版社,2004:101-104.
  [4] 王爽. 汇编语言[M]. 2版. 北京:清华大学出版社,2008:185.
  Contrast Teaching Methods of Assembly Language
  CHEN Yifei, ZHAO Liling, ZHANG Yingchao, YE Xiaoling
  (School of Information and Control Engineering, Nanjing University of Science and Technology, Nanjing 210044,China )
  Abstract: Contrast teaching method of ASM integrated with C Language and Data Structure can help students to master the ASM and build their confidence in studying. Some practical teaching examples are presented, including logical operations, stack instructors, array address and program structures etc. Practical teaching validates the proposed methods.
  Key words: Assembly Language; contrast teaching; C Language; Data Structure
  (编辑:姚彦如)
  
  (上接38页)
  参考文献:
  [1] 教育部高等学校非计算机专业计算机基础课程教学指导分委员会. 关于进一步加强高等学校计算机基础教学的意见(征求意见稿)[J]. 中国大学教学,2005(5):11-18.
  [2] 陈国良,冯博琴,张龙. 抓住实施“质量工程”机遇提高高校计算机基础教育水平[J]. 中国大学教学,2008(4):1-9.
  [3] 李国杰. 信息科学技术的长期发展趋势和我国的战略取向[J]. 中国科学:信息科学,2010(1):128-138.
  [4] 袁国武,赵杨,赵征鹏,等. 依托程序设计竞赛,提高计算机专业学生培养质量[J]. 计算机教育,2009(15):104-10 .
  [5] 吴英杰,王一蕾,傅仰耿,等. 依托程序设计竞赛,推进“算法与数据结构”课程实践教学改革[J]. 计算机教育,2010(4):53-55.
  Promotion of Basic Computer Teaching by the Contest
  XIE Shutong, JIA Hongwei, FANG Yongze
  (School of Computer Engineering, Jimei University, Xiamen 3 1021, China)
  Abstract: The interest and initiative of study for the students are aroused through holding the contest of information technology. At the same time, the  uality of teaching of the teachers is also improved by the contest. Finally, the good teaching results can be obtained. In this paper, based on the analysis of the status of basic computer teaching, the organization and implement of the contest, and its effect to the teaching are commented
  Key words: contest; computer education; basic education; information technology
   (编辑:彭远红)
            
       转载注明来源:http://www.ybaotk.com





上一篇:文理科学生合班的VB课程教学方法探索
下一篇:程序设计系列课程教学改革之我见
回复

使用道具 举报

0

主题

5万

帖子

8万

积分

论坛元老

Rank: 8Rank: 8

积分
82777
发表于 2020-8-30 15:19:05 | 显示全部楼层
谢谢雅宝题库交流网,可以欣赏到这么多的好论文
回复

使用道具 举报

0

主题

3635

帖子

5453

积分

论坛元老

Rank: 8Rank: 8

积分
5453
发表于 2022-3-13 21:54:15 | 显示全部楼层
奥鹏南开大学作业可以做吗?
回复

使用道具 举报

0

主题

3590

帖子

5386

积分

论坛元老

Rank: 8Rank: 8

积分
5386
发表于 2022-3-14 05:09:39 | 显示全部楼层
一体化电大平台形考作业有答案吗?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

精彩课程推荐
|网站地图|网站地图