王晓品 邓革
摘 要:随着新时代人工智能控制、物联网等技术的快速发展,社会对计算机学科中的控制、运算等核心技术的需求不断增加。培养计算机工程类人才的关键,是使学生熟练掌握和灵活运用计算机组成中的控制、存储等知识。在实验教学改革探索的过程中,引入C语言代码的反汇编程序,借此分析计算机中存储器的小端规则、变量存储机制、断点保护机制以及Cache映射机制,提高了学生的学习兴趣,改善了教学效果,为学生后续专业课程的学习和就业奠定了良好的基础。
关键词:计算机组成;实验教学改革;C语言
中图分类号:TP311;G434 文献标识码:A文章编号:2096-4706(2022)05-0190-03
Exploration on Computer Composition Experiment Teaching Reform
Based on C Language
WANG Xiaopin, DENG Ge
(Department of Electronics, Software Engineering Institute of Guangzhou, Guangzhou 510990, China)
Abstract: With the rapid development of artificial intelligence control, Internet of things and other technologies in the new era, the demand for core technologies such as control and operation in computer science is constantly increasing. The key to training computer engineering talents is to enable students to master and flexibly use the knowledge of control and storage in computer composition. During the exploration of experimental teaching reform, the disassembly program of C language code is introduced to analyze the small end rules, variable storage mechanism, breakpoint protection mechanism and Cache mapping mechanism in computer memory, which improves students’ interest in learning, improves the teaching effect, and lays a good foundation for students’ subsequent professional course learning and employment.
Keywords: computer composition; experimental teaching reform; C language
0 引 言
在信息化飛速发展的时代,超算、量子计算机都进入了应用的领域,运算速度惊人,颠覆了计算机的底层逻辑运算。作为未来的工科人员(尤其是通信工程、电子信息工程等专业的学生),若要引领计算机的发展和应用,对计算机知识的学习与拓展至关重要。计算机组成是核心专业基础课[1],是学习嵌入式系统开发及编程的基础,开发人员对计算机原理及工作流程的理解程度决定了其对嵌入式系统的设计和开发水平。传统的教学方法主要是基于理论讲解与分析,实验环节基本上依靠汇编语言和THJZ-2型实验箱来完成,与理论教学中的知识点衔接不足。课程本身难度大,导致学生出现入门困难、兴趣匮乏等问题,学生的学习效果达不到要求,无法满足新时代的需求。
为提高学生的学习兴趣和逻辑思维能力,强化学生的实践和创新能力,培养满足时代所需的专业人才,本文对计算机组成实验教学内容进行相应的改革探索,引入学生熟悉的C语言,采用C语言替代传统的汇编语言来描述计算机的工作过程,完成了计算机组成与C语言、嵌入式系统等课程的知识衔接。通过对C语言反汇编代码的观察和分析,掌握计算机中存储器的小端规则、变量存储机制、断点保护机制以及Cache映射机制,我们将在下文中介绍具体的改革方案和案例设计。
1 计算机组成的实验教学改革方案
计算机组成是一门知识含量极高的学科,有很多知识需要学生的理解和记忆,培养学生对本课程的学习兴趣是每个老师都将面临的问题[2]。通过分析往届学生对计算机组成课程的学习瓶颈和考核情况,在整理重点教学内容、细化教学案例两个方面予以改进。重点教学主要从计算机组成中的小端规则、存储机制、断点保护机制以及Cache映射机制四个方面展开。
C语言是计算机类学生和从业人员必须掌握的语言之一,但囿于对C语言及上述四个方面的研究较少,因此设计简单的C语言小程序,通过观察其与反汇编语句的对应关系,辅助学生掌握计算机组成的知识难点,弥补了计算机组成实验教学的不足。具体改革方案及案例内容设计规划如图1所示。
2 计算机组成改革方案及案例设计
2.1 小端规则的实验案例分析
通过将小数的单精度浮点数运算与存储器的存储规则相结合,观察并分析浮点数的二进制数值在存储器中的存储规则,从而理解小端规则的原理。以-58.625为例,理论计算其单精度数为C26A8000H,通过C代码实现数据换算后,运行结果与理论值一致,如图2所示。
通过观察反汇编编码找到结果在存储器中的具体地址,反汇编代码如图3(a)所示,图3(a)可以看出,数据转换是通过EBP寄存器的值指向内存的位置,因此可以得出转换结果存放在0X0019FF2C~2F之间,通过查看存储器相应位置的内容,如图3(b)所示,可以在运行程序后观察运算结果在存储器中的存储规则。
由图3(b)可知,低地址存放数据的低位、高地址存放数据的高位,符合小端规则的存放顺序,加深了学生对小端规则的理解,并且对C语言与汇编语言、机器硬件之间的关系建立了联系。
2.2 内存的管理实验案例分析
C语言中的变量按照作用域可以分为局部变量和全局变量。局部变量一般存放在内存的栈区,全局变量存放在静态存储区。C语言中的变量有两个基本属性:数据类型和存储类别。数据类型是指基本类型int、float、char等,存储类别是指数据在内存中的存储方式,存储类别分有四种:auto(自动)、static(静态)、register(寄存器)、extern(外部)[3]。
采用int来定义变量,如图4(a)所示,运行后观察其反汇编程序,如图4(b)所示。
由图4可以看出,每个整型变量占用四个字节,因此程序中定义的内存变量存储在0019ff10-0019ff2f中,其地址可以通过寄存器ebp得到,从而得出变量存储地址的存储规则,加深对存储管理的理解。
2.3 断点保护机制实验案例分析
子程序调用是计算机的基本程序结构,因其在调用过程需要保护断点、跳至子程序、保护现场、处理子程序、恢复现场、恢复断点,因此为掌握子程序调用过程中断点的保护机制,在程序中设置断点,查看反汇编语句,将一条C语句分解成若干可以被处理器执行的子操作,每一个子操作由一条独立的指令完成,从而帮助学生理解子程序调用和返回时处理器的工作机理。
主程序和子程序之间的数据可通过寄存器、存储器两种方式传递[4]。图5(a)中主程序将寄存器放入堆栈保护,并为主程序分配76个移动空间。
图5(b)中子程序被调用执行时,首先将主程序中断时寄存器的数据保存到堆栈中,以此达到保护断点的目的,并为子程序分配64个移动空间。
通过对比,让学生思考为什么图5的两个图中堆栈分配空间有所不同,從而理解主程序和子程序调用、返回计算机的工作过程以及子程序调用中断点的保护机制。
2.4 cache的映射机制实验案例分析
计算机中程序的性能与程序执行时访问指令和数据所用的时间有很大关系,而指令和数据的访问时间与相应的Cache命中率、命中时间和缺失损失有关。有实验证明,与未加入Cache机制的Flash控制器相比,Cache机制的引用可节省38%的取指时间[5],因此cache的作用非常重要。
对给定的计算机系统而言,命中时间和缺失损失是确定的。因此,指令和数据的访存时间主要由Cache命中率决定,而Cache命中率则主要由程序的空间局部性和时间局部性决定。若要访问的数据都能在Cache中命中,则程序的运行速度比较快。当需要处理的数据量比较大时,Cache中不能容纳全部数据,需要在内存中访问部分数据,影响程序执行的速度。
设计一个对二维数组执行相加运算的C程序,按两种不同的顺序读取数据:一个是按行取数进行相加的运算,再进行下一行的运算;另一个方式是按列取数进行相加的运算,再进行下一列的运算。比较两种方式运行的时间差异,如图6所示,并思考为什么运行的速度不同,从而理解计算机中cache的映射机制。
3 课程改革应用与效果
以广州软件学院为例,针对电子系通信工程、电子信息工程、自动化及智能科学与技术四个专业的学生,设计以上四个实验教学改革案例。
案例设计主要根据教学大纲对各知识点的掌握要求,五次组织教师开展教学内容研讨会议。将实验案例改为采用C语言编程实现,通过观察编译后计算机存储器的内容,来分析计算机的工作原理,扭转了传统实验箱演示及汇编语言设计的单调性,改善了教学团队的教学思考,提高了教学团队的教学能力和协作能力。
实验实施过程则主要通过课堂布置任务,学生根据要求进行编程设计和调试,并分析实验结果。通过实验学生不仅掌握了C语言与汇编以及计算机硬件之间的关联,而且还建立了计算机课程体系之间的知识架构,加深了其对理论知识的理解。
通过四个实验教学改革方案的实施(实验难度有所增加),学生的学习积极性得到了极大的提升。对最近四个学期的课程考核进行统计,学生对课程的教学评价和课程考核平均分较往年有所提升,具体数据如表1所示,验证了课程改革的必要性和有效性。
4 结 论
本文对计算机组成课程采用的实验改革教学,不仅使学生轻松掌握了计算机的小端规则、变量存储机制、断点保护机制以及cache的映射机制相关理论知识,而且培养了学生的逻辑思维、独立解决问题的能力,并促进学生创新性思维的发展,适应未来计算机领域的高速发展。与此同时,教学改革也促进了教师对课程的深层次思考,提高教师的教学水平,在教与学两方面都有大幅度的提升,解决了课程固化不变的缺陷,推动课程的建设和发展。
参考文献:
[1]袁春风,张泽生,蔡晓燕,等.计算机组成原理课程实践教学探索 [J].计算机教育,2011(17):110-114.
[2] 朱云芳.激发学生学习计算机组成理论课兴趣的几点建议 [J].计算机教育,2012(3):61-64.
[3] 孙静霞.C语言中的变量在内存中的存储情况探讨 [J].计算机时代,2015(10):53-55.
[4] 庞新法.C和汇编之间参数传递机制剖析 [J].价值工程,2014,33(29):225-226.
[5] 曹健,李凌浩,黄雅东,等.一种基于Cache机制的嵌入式Flash控制器设计 [J].计算机应用与软件,2016,33(8):238-241.
作者简介:王晓品(1982—),女,汉族,山东莱阳人,讲师,硕士,研究方向:电子与通信系统。