第一篇:C语言学习心得及报告
如 何 学习C 语 言
学校:西安航空学院
系别:电气系
班级:过控1409
姓名:兰敏
学号:1***3
前言
两个原因促使我写下这篇文章,第一就是作为过来人根据我自己的经验我知道编程的初学者 一般都很兴 奋也都有种困惑,一方面对运行在计算机(注:不特别指明都指个人微型计算机)的五花八门如精彩的游戏程序,多姿多彩的网站等等漂亮的视窗程序所着迷,另一方面大部分的初学者(如计算机专业的低年级学生)都是从简单命令行程序“Hello world!”开始入手而且很长一段时间都无法接触到日常经常使用的视窗程序,由此好奇者有之,迷惑者有之等等,更遗憾的是也有少部分人因为困惑对编程逐渐失去兴趣。第二就是今天妹妹看C程序设计语言的人读碰到一个例题没有看懂,而作为计算机专业毕业的老哥自然义不容辞地承担起了讲解的任务,在噼里啪啦的大说之后,老妹终于弄懂了例题程序的意思,但仍然不过瘾,竟然问起我如何学好C语言,弄得我心一惊,这里我还是有点自知之明的,因为我知道我并不是什么大师,甚至自己对计算机世界也经常是一片茫然,不过看着她那“崇拜”的眼神,不说点什么似乎有点不大好,只好硬着头皮把自己以前的一些理解讲了一番。所以既然知道有这个需要,尽管自己见识浅薄,也抱着“区区陋见假如能够对后学者能够有所帮助那是再好不过了,即使有所偏颇当当笑话看看能有助于大家饭后生活也是美德一件”的心 情就写下了这篇文章。
简介
我是很乐意将计算机(程序设计)语言跟人类语言做类比的,在我看来学习程序设计语言就想学习外语一样,通过计算机语言与计算机交流就如同在使用外语与老外交流一样。通常学习语言比如英语有单词,语法,语义三个部分组成,单词是构成语言的最基本的要素,语法告诉我们单词如何构成语句,语义则告诉我们单词构成的语句的意思,类似的程序设计语言中也是有[1] “单词”,“语法”,“语义”三部分组成,其中跟人类语言一样,“单词”“语法”是基础,而为达到交流的目的“语义”是整个程序设计语言的重点。当然相对人类语言(以英语为例)而言程序设计语言(以C语言为例)显然要有简单得多的组成,所以这里我们要首先确立自己对学好程序设计语言的信心。下面试加以说明,其中可能有些类比不太适当,不过好像也差不多吧,你自己也可以试着举出更好的例子以使自己更容易明白,我这里就抛砖引玉吧。
先从“单词”谈起,在英语中就是由26个英文字母以及26个英文字母构成的单词组成,学习语言我们首先应该记忆的就是“单词”,26个英文字母A,B,C,„„然后就是令人头痛的英文单词,记忆的过程是痛苦的至少我学英语时最恼火的地方就是反复记忆老是忘记的单词,类似的在C语言中我们可以作这样的类比,C语言的单词是由26个英文字母、数字(0,1,2„„9)、运算符以及其他特殊符号组成,所以相比而言学习C语言是多么的幸福。
“语法”,在英语中是如常见构词法、时态、常用句型、特殊用法、固定用法等等(呵呵,不是语言专家如有兴趣可以参考英语语法书籍),仅拿构词法来说动词后面加er就变成名词(work-worker),名词后面加y就变成形容词(wind-windy)等十多种变换还要记忆些特殊变换,复杂且繁琐,假如算上时态、句型等那就更复杂了。在C语言中也同样也存在有语法,比如标识符、常量、表达式、数据定义、函数定义、变量初始化、语句构成、预处理命令等大致8种语法,如标识符[2]可由字母、数字以及下划线组成,且必须以字母或下划线开头,区分大小写,另外在不同的编译器中字符数目有不同的规定,一般为7个字符。不过这里有些可能会被忽略的就是书写格式,在C语言中书写格式也是需要被注意的,因为格式也可以当作C语言的语法项目,如语句是以分号‘;’作为结束的标志的而不是以换行作为结束标志,其实英语也有要求比如什么时候该使用句号什么时候该使用逗号等等只不过我们日常要求并不注意,而且也可以看的懂所以不太较真。
总结
综上所述我们要学好一门程序设计语言首先就要像学习英语一样先熟记至少要熟悉这门语言的“单词”和“语法”然后才能谈得上使用,俗话说“万丈高楼平地起”,学好C语言的必要前提就是先打下坚实的C语言基础,所以潭先生的书作为一本很好的教材,我建议是不能丢的,而且还要反复看,至少刚开始我学习的时候上机机会不多,就是反复看懂看明白这本书,有些东西该记的还是要记尤其是一些重要的语法比如标识符、数据类型、语句的特点、函数的占式结构,指针的意义等等。
最后始终记住这点在没有实践之前,先打下坚实的理论基础吧,毕竟理论是实践的先行,理论可以更好的指导实践。即使再低点的要求至少要先熟悉理论吧,毕竟“摸着石头过河”感觉还是盲目以及痛苦的
“语义”即语句的意思、含义。同人类语言一样,程序设计语言最重要的目的还是“交流”,所以写一段没有任何作用的代码就如同说一句没有任何意思的话是没有意义的,在这一点上两者是共同的,至于在其他某些方面两者也有惊人的相似之处,试举一例吧,比如说可以有不同的表达表示同一个意思,如微型计算机同个人计算机就是同一个意思,在C语言中比如要让变量i自增1,可以有i=i+1或者i+=1等等。不过与人类语言相比,程序设计语言毕竟是与计算机交流,交流对象计算机与人类的不同也决定了程序设计语言与人类语言还是有所区别,甚至可以说是存在巨大的“鸿沟”,这也就是学习程序设计语言的重点。
与人类相区别,计算机最大的不同之处在于没有“自己”的“思维”,没有像人类那样丰富的感情,所以在交流过程中对于人类的跳跃性的思维,对于人类的“幽默”无法理解也没有丝毫的兴趣。比如说对与同样一句话“Do it”,在不同的场景不同的说话语气,对10个人来说就会有10种不同的回答,有的人可能会认为这是合理的要求,有的人可能会认为这可能是个玩笑而不与理睬,有的人则可能认为语气要求有些过分而感到非常愤怒„„,但对所有的计算机来说则是严格执行。不过也正是由于计算机“机械”“笨着”的可爱而深得人们的喜爱并被广泛使用,因为对我们来说,计算机就像一个忠实的士兵一样在执行我们的命令并且作为指挥者,当然我们希望计算机在合适的时间干切当的事情。而要达到这个目的,很凑巧有点类似于社会的“权利与义务”法则一样,我们也有自己的义务那就是下达明确而又正确的“命令”。
首先明确,即我们要在与计算机交流时“语义”必须明确,否则计算机将无所适从,因此作为交流工具的程序设计语言的“语义”也必须是能够明确无二义的。当然程序设计语言的设计者已经注意到这一点,在设计时就回避了这个问题,所以我们——程序设计语言的使用者——程序员也就无须过多关注这点,也就是说使用何种程序设计语言(C,Basic,Pascal等)并不是我们要关注的重点。其次正确,包括正确的输入以及正确的逻辑。由于计算机 “忠实”得有点“盲目”以至于对事情的对错毫无判断力,就像一把枪一样,在警察手里它就是正义的化身,而在土匪手里就成了恶魔的代言人,因此要时刻记住计算机是没有错的,“错误”掌握在我们自己手里,这也就决定了我们在编程时是不是应该投入更多的精力来纠正我们自己所犯下的错误上面来?除此之外,我们智慧的结晶——程序,在我们的上帝——顾客,在程序的使用者看来就像个黑匣子,他们只管输入哪怕是错误的输入却同样期待能得到正确的结果,而对于上帝我们除了祈祷和期望之外还能有什么选择?因此对于输入的不可预期的程序源数据,我们是不是也应该花更多的时间进行处理呢?
先小结下,由于我们在编程时需要对于输入的不可预期的程序源数据以及提高我们自己的逻辑正确性花费更多的时间,因此这也就是我们编程训练所应该关注的重点,而不是关注于何种实际的程序设计语言。
为了加深印象,下面我们举个实际的例子来说明这点。先看题目要求“输入一行字符串(全字母或空格),统计其中的单词数量,单词之间用空格分开”,应该说这是个简单的题目,有些人可能一看到这个题目很快就给出了自己的答案。如有些人会想单词是以空格分开的,我们统计其中空格的数量再加上最后一个单词不就是单词的个数吗,因此便很快给出如下答案。
/*Program1*/ #include
char string[81];
int i,num = 0;
char c;
gets(string);
for(i = 0;(c=string[i])!=' ';i++)
if(c == ' ')
num++;
printf(“There are %d words in the line.n”,num+1);}
编译运行,然后输入“I am a student”,得出正确答案“There are 4 words in the line.”在输入几个类似的测试用例,都得出正确答案,最后确信无误便自信满满的交出自己的答卷。应该说正确的输入情况下,这个程序毫无疑问是能够正确运行的,但这种正确性是非常脆弱的,你不能指望用户和你一样聪明并且不犯错误,何况即使是神仙那也有打盹的时候。假如用户输入“ I am a student”,“ I
am a student”,“
I am a
student ”„„这种情况下,你是不是应该重新修正你的思路呢?现在我这样考虑一个单词应该是字母后面紧接着一个空格或者结束符号,所以重新写下如下程序。
/* Program 2*/ #include
char string[81];
int i,num = 0;
char c;
gets(string);
for(i = 0;(c = string[i])!=' ';i++)
if(c!= ' ' &&(string[i+1] ==' '|| string[i+1]== ' '))
num++;
printf(“There are %d words in the line.n”,num);}
运行一遍,发现结果是正确的,单词之间不管你是有几个空格,不管是两个也好,三个也好都能够正确运行,但是回过头来我们看下这个程序是不是还有些可以改进的地方呢?我们再看如下一个程序 /* Program 3[3]*/ #include
if(c == ' ')word = 0;
else if(word == 0)
{
word = 1;
num++;
} printf(“There are %d words in the line.n”,num);}
输入测试用例也能够完全正确,看看源程序,其中增加了一个标志位便把所有的情况给考虑进去了,相比前一个程序,程序2就是直白的描述了解题的思路,而程序3看起来好像不好理解但似乎更能满足我们作为“天才程序员”的欲望,这也就是编程时使用的一些小技巧。
总体比较三个程序,可以说类似程序1的错误——逻辑错误是我们程序员比较容易犯的,也是在编程调试过程中最费时间的,至于语法错误编译器可以很快的给我们找出错误的地方程序2逻辑正确但相比程序1思路要更难想到,程序3思路不但正确而且还在编程的过程中使用了一些编程技巧,所有这些开阔的逻辑思路(解决问题),快速的调试方法及过程(发现错误),累积的编程技巧(让程序让“好看”)都需要我们在编程实践中去获得,这是宝贵的经验也我们作为程序员最珍贵的地方,而且最重要的这些经验是属于我们自己的,独一无二的。
综合上面的叙述,我们把编程看成程序设计语言的“单词”“语法”“明确的语义”“正确的语义”四个部分,可以看出前面三个部分是几乎所有的程序设计语言自身所具有的,“单词”“语法”不同的程序设计语言有所不同,但如果你仔细观察所有的程序设计语言,可以分成几类,而且有很多地方也有相通的地方,有点像一通百通的味道,这也就是为什么很多有经验的程序员可以在很短的时间就能熟悉其他语言的原因。至于“明确的语义”这是所有的程序设计语言都应该具备的,只是表述的方法由于程序设计的“单词”“语法”不同表述不同而已,但让计算机明白该做什么这点是相同的。最后“正确的语义”包括开阔的,正确的逻辑思路以及发现并纠正错误的能力则是属于我们自己的,这也是我们区别于其他人的地方,这些都需要在经常性的编程实践中去积累去开阔,所以是我们所应该关注的重中之重。
跟许多前辈一样,我是建议初学编程者先熟练掌握一门语言的,至于怎么学习,我想书本是纲领,我们首先要熟悉一门语言的粗枝大叶,在编程的过程中不至于老是去翻书查找一门语言的基本语法,比如说函数的传递方式,函数调用的一些特点,这样不仅非常浪费时间而且一直困扰于语法中使得自己有种身缘“庐山”中的那种非常迷茫的感觉。就向施工一样,建造一个茅屋可能没有图纸,抱着边建边看的态度兴许能完成(事实上你自己脑海里至少也有个大致的样子),但要建造一座大厦,没有图纸,困难可想而知。当然光有图纸还是不够的,我们可能在施工的过程中发现一些问题,这样我们在慢慢修改原来的方案或者原先有些地方描述不清楚通过具体施工确认我们的想法。因此编程实践同样不可少,编程实践不仅可以“让语义正确”即开阔编程思路,发现错误(调试),累计编程技巧,而且可以在编程过程中熟悉这门语言,熟悉这门语言的细节部分,但也请记住这些细节虽然重要,但也仅仅是细节。当然光看书,光有理论那也是不行的,有“纲领”而没有“章程”,有“纲领”而没有实施那同样也是没用的,毕竟实践是检验真理的唯一标准,实践过程中给理论修枝剪叶。
总得来说熟悉一门程序设计语言的语法是编程实践的先行,而编程实践是可以更好促进对程序设计语言基本语法知识的理解和熟悉,而积累的宝贵的编程经验则我们自己最珍贵的地方,最独一无二的地方,是所有程序设计语言所没有的。写到这里,我想现在应该是回答第一个问题的时候了,有人说我学了
这么长时间的C语言还是没编过一个漂亮花哨的程序,编出来的都是丑陋的而且看起来没什么价值的程序,一点自豪感都没有便丧失了对编程的兴趣,为什么前面我一直强调一门语言丰富的编程经验是你最珍贵的地方呢?原因就在于编程不仅仅是把我们的想法把我们的思路用程序设计语言写下来就够了,要得到实际运用还需要与计算机的其他知识如网络,低层硬件,图形图像,开发环境等,甚至还有其他学科知识比如自动控制,通讯等相结合,而这些知识需要我们在以后的学习过程中学习,比如一些后续课程,数据结构与算法,操作系统,数据库,计算机网络,软件工程等等,如果有兴趣你也可以在以后的课程中专门学习视窗程序的编程,或者也可以学习自己做个网站,那会就真的是有自豪感并且货真价实的了。当然那会可能你会有另外的想法比如说做嵌入式程序员,网络程序员,甚至去搞算法研究等等了。不管你选择做什么,书本知识都是大家所共有的,是全人类的财富,而自身的知识,尤其是经验却实实在在是你自己的,最后我还想强调一遍,这是我们最珍贵的地方。
所以在此之前,我知道打基础是痛苦而且没有多少成就感的过程,但是在化蛹成蝶之前,我们还是要继续我们做而且认真的做我们的毛毛虫,因为我们知道我们会有变成美丽蝴蝶的那一天。
我的心得体会
通过一学期对C语言的学习,我感觉学习C语言是有一定难度却又是非常有趣的科目。也是很有帮助的,特别是对将要面对的计算机二级考试。这段时间的学习我知道了C语言的基本特点有以下几点: 1.语言简洁,使用灵活方便。2.运算符丰富,表达能力强。3.数计类型丰富。
4.目标程序质量高,具有面向硬件系统的特点。5.具有结构化的控制语句和模块化的程序结构。6.具有编译预处理功能。
7.程序设计自由度大,可移植性好。
经过第一阶段对语法的学习,我觉得实例阶段应该是一个过渡阶段吧,通过前一阶段对语法的学习之后,可能有很多概念我们都比较模糊,或者说很多东西太抽象了,这就为我们第二个阶段的学习做好了实例化的准备,可以这样说吧,第一个阶段就我们为我们的学习一样东西而构建的一个类,里面讲了我们应该在这里面要做什么?第二阶,也就是本阶段,我们就应该去把前一段的东西具体化(实例化先前创建的类),那怎么个具体化呢,呵呵!说白了,去练习一些小例子,从网上下载的电子书上有很多这方面的例子的,如果有自己去书店买书的话,里面也应该提供了不少,里面的例子,我是每次都打了一遍,也许有的人不会亲自去用手打一遍,什么copy等,当然这样也行,但我个人认为,对于初学者来说,最好还是自己动力打一遍比较好,毕竟这些东西对我们来说,都比较陌生,如果每个字都自己打完的话,有些代码你不想记住也难了,在这里,我们得弄懂练习的每一个例子,如果能把一些例子稍稍修改,弄懂里面精髓的东西,让自己知道为什么这样做,那么是最好不过的了,我平时练习时,这一步是少不了的,都习惯了,所以也就成了条件反射,想不这样都不行。最后,我们就应该汇一下总,把前面做过的例子里所用的技术理一下,再做一个比较大的例子,尽量把到目前为止所懂的知识全部应用到里面去,只是尽量,当然有些东西是不能集成到一起的,也是是代码之间的排斥性。
这是个人的一点学习心得,希望能更好的运用到学习中去。C语言是一门很有用的、对于我们的就业很实际的语言,学习好C语言是一项必须而实际的任务。我们必须要好好掌握。
第二篇:C语言学习心得报告
C语言学习心得报告
看了一段时间的《C和指针》,这样看的效果不是很好,看着书本当时是懂了,有点恍然大悟的感觉,但是发现并不能真正的把理解的内容加入到自己程序当中,不能很好的去运用它,所以对于C语言我认为理论加实践,是学习C语言的最好方法,看书并不能完全理解书中的内容,也较容易遗忘,学习效率比较低,所以现在学习《数据结构》,在看书的同时,会在Microsoft Visual C++ 6.0软件上实践,严蔚敏写的《数据结构》这本书,比较经典但是这本书是伪算法,并不能直接在计算机上运行,对于初学者上机实践比较困难,另外说一下,我认为学习应该是在模仿中理解,在模仿中创新,所以我选择结合高一凡写的书《数据结构算法实现及解析》,这本书严蔚敏写的伪算法全部用程序实现了,给我上机实践提供了很大的帮助,貌似说到数据结构了,呵呵,回到正题,下面继续说说C语言。
指针是C语言的精华,也是C语言的难点,它就像一把双刃剑,锋利无比但运用的不好也会给自己带来危害,后果比较严重,所以重点来说说指针。
很多初学者弄不清指针和数组到底有什么样的关系,为避免混淆不清,下面总结一下指针和数组的特性。指针是保存数据的地址,任何存入指针变量的数据都会被当作地址来处理,指针变量本身的地址由编译器另外存储,存储在哪里,我们并不知道,间接访问数据,首先取得指针变量的内容,把它作为地址,然后从这个地址读或写入数据。指针可以用间接访问操作符(*)访问,也可以用以下标的形式访问,指针一般用于动态数据结构。数组是用来保存数据的,数组名代表的是数组首元素的地址而不是数组的首地址,所以数组p与&p是有区别的,虽然内容相同,但意义却不同,&p才是整个数组的首地址,数组名是整个数组的名字,数组内每个元素并没有名字,不能把数组当一个整体来进行读写操作。当然数组在初始化时也有例外,如int p[]=“12345”是合法的。数组可以以指针的形式访问如*(p+i);也可以以下标的形式访问p[i],但其本质都是p所代表的数组首元素的地址加上i*sizeof(类型)个字节作为数据的真正地址来进行访问的。数组通常用于存储固定数目且数据类型相同的元素。刚开始的时候我有点分不清指针数组和数组指针,现在也总结一下,指针数组,首先它是一个数组,数组的每个元素都是指针,可以理解为“存储指针的数组”的简称,数组指针,首先它是一个指针,它指向一个数组,在32位系统下永远只占4个字节,至于它指向的数组有多少个字节,并不知道,可以理解为“指向数组的指针”。举个例子,int *p1[10]与int(*p2)[10], 要理解这个问题,首先要清楚操作符的优先级,“[]” 的优先级比“*” 的优先级高,所以首先p1与“[10]”结合构成一个数组p1[10],int *为修饰数组的内容,所以数组元素是指向int类型的指针,所以这个是指针数组,“()” 的优先级比“[]” 的优先级高,“*”与p2结合构成一个指针变量,int修饰数组的内容,即数组的每个元素,数组这里并没有名字,是个匿名数组,现在清楚了p2是一个指针,它指向一个包含10个int类型数据的数组,即为数组指针。下面再说说内存管理,内存分为三个部分:静态区、堆、栈。其实堆栈就是栈,而不是堆。静态区是保存自动全局变量和static变量。静态区的内容在整个程序的生命周期内都存在,由编译器在编译的时候分配。堆是由malloc系统函数分配内存的。其生命周期由free和delete决定。栈保存局部变量。栈上的内容只在函数范围内存在,当函数运行结束,这些内容也会自动被销毁。再说说有关内存需要注意的地方,定义了指针变量,在使用之前一定要初始化使它指向一块合法的内存,不管什么时候,我们在使用指针之前一定要确保指针是有效的。使用malloc系列函数分配内存,使用完之后应及时释放内存,以防止内存泄露。
最后总结的说一下学习C语言的方法就是编程编程再编程,理论学习与上机操作同时进行,另外在编程序的过程中要养成良好的编程习惯。
第三篇:语言学习心得
汇编学习心得
08网工
(一)班 李锐 0804031002 在大三接触汇编语言之前,我们在计算机组成原理课程中就已经有所了解了,但也只是略微明白一些如jmp,mov这样的指令,极度缺乏系统性的学习。
在接触这门课程后,感到汇编语言并不是很容易就可以弄懂的。相比较以前学过的高级语言如C、C++等,电脑等于在迁就人的思维方式,但学汇编,人却必须要去迁就电脑的思维方式,要设身处地地用电脑的角度去思考问题,这就是我们学习汇编语言时遇到的最大的障碍。
另外,在C语言中不到10个语句构成的程序,用汇编语言却要好几十行甚至上百行。这不得不让我们对汇编产生一种恐惧感。事实上,这是完全不必要的。一旦对它的原理掌握后,编写程序就容易多了。另外,学习汇编语言能让我们更加了解计算机内部的组织结构,对我们计算机专业的学生来说,学习汇编也是提升综合能力的关键环节。
汇编的学习不仅仅是学习其语法,而更多的是学习计算机基本的体系结构。其中遇到很多新的概念,名字。如寄存器、中断、寻址方式等。这些概念在刚接触汇编这门课的时候难以理解,但在之后的学习中通过老师的讲解,自己亲手编程的方式也就渐渐清晰明了。
我们在学习之前都需要明确什么是汇编语言。计算机能够直接识别的数据是由二进制数0和1组成的代码。机器指令就是用二进制代码组成的指令,一条机器指令控制计算机完成一个基本操作。为了克服机器语言的缺点,人们采用助记符表示机器指令的操作码,用变量代替操作数的存放地址等,这样就形成了汇编语言。
经过一个学期的学习,我也慢慢摸出了汇编学习的规律。
首先,学习这门语言时如果能联系上以前学过的其他高级语言的知识,则会起到良好的效果。例如C语言程序的运行逻辑结构有顺序(按语句依次执行)、分支结构(IF...THEN...ELSE...),循环结构(FOR...NEXT)三种结构,也通过C语言了解并掌握了什么是子程序,什么是调用。事实上,汇编语言中有关程序结构,子程序等等的知识都是跟C语言十分相似的,只是在编程时用到的语言不同:汇编语言完全面向机器,需要指明数据在寄存器、内存中的流向。
第二,学习汇编语言,首要问题是学习80X86指令系统。如果能将指令系统中的各个助记符、格式等都能完全掌握并灵活运用,大部分工作就已经完成了。指令系统确定了CPU所能完成的功能,是用汇编语言进行程序设计的最基本部分。如果不熟悉汇编指令的功能及其有关规定,那肯定不能灵活使用汇编语言。
指令的种类十分繁杂,但其格式却是统一的。
其中方括号中的内容为可选项。指令助记符决定了指令的功能,对应一条二进制编码的机器指令。指令的操作数个数由该指令确定,可以没有操作数,也可以有一个或多个操作数,大多数指令要显示写出来,还有些操作数是隐含的。当指令包含操作数的时候,书写时必须遵守:
1、指令助记符和操作数之间有分隔符,比如几个空格;
2、如果含有多个操作数,操作数之间用逗号分隔。
现在简单总结汇编语言指令的分类:
1、数据传送指令;
2、标志位操作指令;3、算术运算指令;
4、逻辑运算指令;
5、移位运算指令;
6、位操作指令;
7、比较运算指令;
8、循环指令;
9、转移指令;
10、条件设置字节指令;
11、字符串操作指令;
12、BCD码运算调整指令;
13、处理器指令。
在编写汇编程序时,应该注意特别容易出现的错误,例如在编写数据传送指令时,目的操作数和源操作数的类型一定要匹配,CS不能作为目的操作数,offset后只能跟简单地址符号,等等。
汇编语言的寻址方式有直接寻址,寄存器寻址,基址变址寻址,相对基址变址寻址等等,掌握这些都是编写汇编程序很重要的环节。
汇编语言中的程序结构,子程序等知识也会帮助我们编写出一个更加完善的汇编程序。另外,我们还应该掌握DOS系统功能调用,宏汇编等知识。这里要对子程序和宏汇编加以区分,我的理解是:子程序是调用,而宏是替换,比如一个MAX宏,所有出现MAX的地方,都用宏代码代替。
在学习汇编语言时,指令的功能是学习和掌握的重点,要准确有效并合理的使用这些指令,必须了解一些使用的规则。现对汇编语言编程时的规则进行总结,归纳起来有三点:
1、要求指令操作数的寻址方式;
2、指令对标志位的影响和标志位对指令的影响;
3、指令的执行时间,对可完成同样功能的指令,要选用执行时间短的指令。
还有一点十分重要。和所有的程序设计语言一样,要学好汇编语言,实验是必不可少的环节。我们深有体会:书上的程序都能看懂,基本原理也都明白,但是在自己亲手编写程序时,却无从下手,甚至连第一句该怎么写都不知道。通过实验,可以在很大程度上加深印象。在书上看程序,一切都是理所当然,十分顺利,而自己动手,才会真正发现自己的不足之处。程序的编写在记事本中进行即可,掌握debug的使用对实验是有很大帮助的。
现在汇编语言的学课程已经告一段落了,学习过程中遇到的所有困难以及遗留的难点都需要我们在其余时间里逐步攻克,在打好基础的前提下,学习更加专业的汇编知识。
以上便是我在学习汇编语言过程中所有的心得体会,我们会在不断的学习与实践中向着更深入的层面迈进
第四篇:语言学习心得
汇编语言学习心得
在接触这门课之前就已对汇编语言有所了解,一方面是在计算机组成原理中有所涉及,虽然那时只知道简单的mov、add、jmp指令,不清楚其具体用法,缺乏系统性的学习;另一方面是在相关书籍中了解到汇编语言写驱动比较好但比较难,当时就觉得汇编是门很牛的语言,很想学习。接触这门课后,感到汇编语言的确不是很容易就可以弄懂的,相比较以前学过的高级语言如C、C++等,电脑等于在迁就人的思维方式,但学汇编,人却必须要去迁就电脑的思维方式,要设身处地地用电脑的角度去思考问题,这就是我们学习汇编语言时遇到的最大的障碍。通过这一学期的学习,对汇编有了初步的掌握,可以说是汇编的入门教程。
在接触汇编语言的时候,对汇编的第一印象就是觉得这种语言非常繁琐和松散,里面有很多细小的知识点,而且有很多规定,必须要根据严格的规则来编写才能够写出正确的程序,譬如一些指令的具体作用,如XLAT指令、CWB指令、LEA指令、OFFSET等的含义和功能,还有大于、小于、等于指令的写法都要记住,不能像高级语言里面用符号“< > =”就能够实现了,正是汇编中的这些规则让我觉得汇编真是特别繁琐,所以在刚刚开始学习汇编的时候经常觉得有些不知所措,特别是对于几种寻址方式,还有各个段的功能,以及各种寄存器的作用都觉得学的很混乱,虽然老师在上课时说的都很详细了,但是在当时好像听懂了,但是很快又弄不清了,还有一些指令的用法会很快就忘记,或者是记混了,但是慢慢接触多了,特别是在做实验的之后,学习得很快,因为要是把学过的知识具体应用到现实中,对于知识的掌握要求就更深一步了,在实验过程中,发现了很多问题,例如一些寻址方式的应用,字符串的定义末尾要加上$符号,在利用AX、BX、CX、DX这几个寄存器的时候注意考虑PUSH进栈对数据进行保护,通过在实验中不断出现错误并改正,对汇编语言的掌握和使用能力都有所提高了。
刚开始对汇编的最大感觉就是觉得用起来很麻烦,不像高级语言那么随意,寄存器就那么几个,用的时候要好好利用,而且还要考虑到计算机内部的工作情况,特别是数据在内存中的存储情况,但是经过学习,发现汇编语言对我们学习好其他语言是非常有用的,原来在C语言中一直不是非常清楚的数据和地址的区别也通过学习汇编而了解得很清楚,通过汇编对CPU里面的工作情况也有了一定的认识,写有些指令的时候要考虑到CPU里面的标志位的改变和利用标志位来实现一些功能,这些在高级语言中是没有的。对于汇编中的指令我很多记不住,由于课件中的程序的注释都是中文的,而课本上的注释都是英文的,刚开始觉得看课件比较好一些,但是后来我发现课本上的英文注释更加容易理解和记忆,和用到的指令是匹配的,因为指令也都是英文缩写方式的,而且都是一些简单的单词,阅读起来并不复杂。
和所有的程序设计语言一样,要学好汇编语言,实验是必不可少的环节。我深有体会:书上的程序都能看懂,基本原理也都明白,但是在自己亲手编写程序时,却无从下手,甚至连第一句该怎么写都不知道。后来随着老师的讲解和实验的进行,知道了程序的编写格式,包括数据段、堆栈段和代码段,其中数据段和堆栈段可以不定义,但代码段是必不可少的,也掌握了该怎么调试程序、运行程序等。特别是debug命令的使用,可以配合与list文件的使用,让我们可以调试排错、检查结果是否正确等,掌握debug的使用对实验有很大的帮助。程序的编写在记事本中进行即可,再在mask中编译,link中连接运行,当然也可以在专门的汇编工具中进行。通过实验,可以在很大程度上加深印象,在书上看程序,一切都是理所当然,十分顺利,而自己动手,才会真正发现自己的不足之处
老师经常说其实很多知识都是相通的,在学习了汇编之后对这点可以说是深有感触,而且在汇编也和很多其他课程息息相关,譬如本学期的微机接口课程里面所用得到的也是汇编语言,汇编虽然是比较低级的语言,但是许多工作还是需要通过汇编来完成,而且很好的掌握汇编后,能够对计算机硬件很好的支配,汇编很接近计算机的底层,总的来说汇编在今天的作用还是不容小觑的,学习好了汇编这门课程对于学习其他课程和进一步学好计算机都有很大的帮助。
14GB软件一班 01410271X07 肖雅丽
第五篇:语言学习心得
2010年6月英语四级、六级考试愈发临近,大家都希望掌握一些应试技巧,从而能够在四六级考试中取得比较满意的成绩。下面沪江网校的方辰晖老师从几个方面来谈一下语言学习以及四级六级应试技巧等问题。
语言是人类经过长期实践积累的,用于交流沟通的工具。历经无数代积累演变下来的语言,学好肯定不是一朝一夕之功,这就决定了,学习语言不可能一蹴而就,更不能闭门造车。但是,如果我们能提高对语言的敏感性,语言学习的进程还是可以大大加快的。
语言学习包括哪些?
任何语言都分为语法和词汇。基础是语法,但语法是有限的、固定的,可以在初级阶段学完,这里,可以建议大家在接触某种语言一年,对它有了初步的感性认识之后,选一本权威的语法书进行系统学习,在此不再赘述。关键是词汇,词汇是无限的,变化发展的,不断涌现的。无论对中小学生,还是专家学者,任何人在任何领域的学习工作中,都会遇到生词、新词。因此,学习语言,就是初级阶段学语法,高级阶段学词汇。语法学习的阶段是基础,万事开头难,但这个阶段,一般只要二到三年即可完成,因为语法是有限的。学习语言的大部分时间都耗在了后者上,而且词汇量的多寡往往就可以决定语言的水平。因此,对于想进一步提高语言水平的人来说,扩大词汇量就是学习语言的重中之重了。
关于词汇的认知
人类对于事物的认知有四个过程,即:
1.不知道不知道,自己没有接触过,根本没有意识到自己的无知。
2.知道不知道,开始意识到自己的无知,正设法去了解这一事物。
3.知道知道,经过学习,基本弄清了这一事物的来龙去脉。
4.不知道知道,对于这一事物早已了然于心,熟练的很,它已然成为自己不可或缺的一部分。
对于词汇的认知,也有一个类似的过程:
1.第一次听或第一次看到,不知其意,需要查阅词典。
2.查阅词典,了解意思后,再次听到或读到时,知其意,无需再查,但自己不会主动使用这个词到对话或写作之中。我们称其为阅读词汇或听力词汇。
3.会拼写,自己会主动使用这个词到对话或写作之中,但每次说或者写,都会在大脑中再现第一次学习这个词的情景,因为你需要回想这个词的用法。我们称其为写作词汇或口语词
汇。
4.彻底忘掉了第一次学习这个词的情景。只有达到这一步,我们才敢说你真正掌握了这个词汇。
在这里,我要声明一点,词汇的学习不是一次性完成的,因为这不符合人类认知的特点。我不提倡通过背词汇书学习语言,因为这种学习方法,记得快,忘得也快。在这种情况下,词汇在大脑的驻留时间仅仅能维持几天,就算应付得了后天的四级考试,肯定也无法应付后年的六级或八级考试。
词汇只能在实际运用中学习,我们和任何一个词的首次邂逅,都要在实际运用中发生,应该是第一次在电视电台里听到,或是第一次在报刊杂志里看到,肯定不是第一次在词汇书的背到。对于,第一次听到的单词,我们可能无法正确拼出,所以查阅这个词也就存在困难。我们要尽量把首次邂逅某个生词的机会放在阅读里。
如何通过阅读快速提高词汇量
大家知道,对于除专业领域的术语以外的词汇,从概率论上来说,任何一个词作为新词首次出现在普通文章中的概率是大致相同的。这就意味着,两个水平相当的学生,以学习相同数量的新词作为阅读目的的话,所需的阅读量也大致相同,假定他们的阅读速度相同的话,则耗时也大致相同。
任何一个单词,首次邂逅千万不要对其视而不见,我们必须认真查阅词典,可以使用电子词典,或在线词典,如新沪江小D。因为,这样可以节省很多时间。举个例子:有两个人,一个人见面两次才查生词,一个人首次见面即查生词,要学习同等数量的生词的话,前者所需时间是后者的两倍。
首次见面之后,最好尽快安排机会第二次相遇。方法就是,大量阅读同类文章,因为人类的大脑是会遗忘的,在遗忘之前,再次刺激大脑,会产生更有效的记忆。一般情况下,一个生词再短期内的第二次相遇以后,就会转化为阅读词汇。
成为阅读词汇的单词,要劲量找机会卖弄出去,在不同的机会卖弄几次以后,阅读词汇可以转化为写作词汇或口语词汇。当你在潜意识下写出或说出这个词的时候,恭喜你,这个词已经写进你的植物性神经了。
总而言之,通过阅读提高词汇量的捷径就是,见到生词立即查,似曾相识先回忆,学到立即要卖弄,卖弄多了可掌握。
关于大学的英语学习
大学四年,是学习英语的黄金时期。这个阶段,少了很多高中时的学习负担,英语学习不用以提高考试成绩为目的,考试真正成为了检验学习效果的手段。
大学时期的英语学习,目的各有不同,有人为了通过考试,如四六级、BEC、翻译考试、考研;有人为了出国,在国外深造、生存;有人为了日后在国内与客户交流。但无论如何,仅仅靠看书做题,是无法练就高水平英语的。英语学习在于厚积薄发,大三以前,应该注重积累,广泛涉猎。欧美文化、报刊杂志、流行歌曲、名人演讲、电台听力等等都可以尝试。有了这些,四六级的英语就不难准备了,各位同学就不必狂做四六级模拟题折磨自己了。我个人认为语言的学习,要从所有方面全面着手,仅仅练阅读,或仅仅练听力都是费时伤神,事倍功半的。人的精力有这样一个特点,长时间集中于某一种事物,就会容易疲劳,导致效率低下。对于英语,杂志看累了,我们可以听一些歌曲,歌曲听腻了,我们再看点美剧,万变不离其宗,人不累,效果也好,何乐而不为呢?(小编推荐:更有趣的外语学习,更人性化的学习体验, 更多好学、好玩的应用和功能,更完美的外语交流和互动,一切尽在沪江新部落哦!赶快戳我进啊>>>)
关于四六级的应试技巧
考试之前,我还是提倡做一套模拟试题的,不为提高英语技能,也不为发现错误日后改正,只为熟悉题型,提升应试技巧。快点我参加模考吧 >>
关于听力,一般考试都有一个试音时间,三到五分钟,这段时间一定要好好利用,姓名准考证号可以稍后再写,听力的选项一定要在第一时间通览一遍,时间还有富余的话,就再通览一遍,千万不要为了赶时间,去做阅读或干其他的事。听力考试过程中,要准备好笔纸,以备不时之需,即使没有内容需要记的,转转笔也可以缓解一下压力。
关于词汇题,这类题都很烦人,选项常常是些长得很像的词,这就没办法投机取巧了。只能靠平时积累。但不会选的题先可以不用猜,先把它标出来,后面做阅读的时候,说不定就些词,会给你灵感,这时再翻回去,选出来,准确性高点。
关于阅读,这就大有文章可做了。阅读里的文章可以给单选提供灵感,也可以给作文提供词句。至于答题技巧,就更有很多值得一提的了。四六级的文章一般有一篇记叙文,一篇新闻稿,一篇说明文,一篇议论文。后面的问题,都需要对通篇有正确的理解。因此,作者的观点非常重要,了解是褒是贬,还是中性,至少可以才对三分之一的问题。如何判定作者的态度呢?找中心句,一般出现在文章的第一句或结尾。但要注意的是,议论文类的文章,常常在开头放个“耙子”,然后对此反驳,当看到“Some people often hold the idea that….”时,我们一定要注意,这句话反过来理解才更接近作者的观点。
关于改错,这类题通常针对中国人的汉语固有思维设题,平时多读原汁原味的英语是很好的备考方法。在这里,我有另一种方法,可以供大家借鉴,就是看老师办公室,观摩老师如何批改学生作文的。仔细研读,老师批改后的作文。效果很不错哦。
最后,关于作文,分好提纲结构,很重要。提出问题,即摆事实。分析问题,即说原因。解决问题,即提方案。每个段落给几句模板试的句子,作文的一半不用临时去写了。另一半呢,需要临时结合题目写出来,要注意,避免使用大家都会用的词,如“I think”,“In my opinion”或普通句式,要是写成“I reckon”“Put in their shoes, I would….”这样阅卷老师必然会眼前一亮的。