以下都是一些很基础很基础的课题,一眼就能看出答案来的课题,给初学汇编的新手练习练习,在提高自己的编程能力同时提高自己学习汇编的信心。
  学习任何一门技术,都需要一定的时间,少则三五个月,多则半年甚至一年。感觉学习汇编更是如此,需要很大的兴趣和耐心才能学有所成。刚开始学时,初学者不能急躁(当然我也是一个初学者).
      要学好一门技术,至少得有一本系统详细的教材中,这里说的教材,这不是一般的字典式的教材,那不是真正的教材,那只能用来作工具书用,我们不能没有教材,也不能没有工具书,但是不能把工具书拿来当教材读。真正的教材应该让人看了很在成就感的,写这样的书的作者也是最负责任的,书好不好,看一下目录也可以辨别一二。一本初学者使用的技术型的好书它至少要有习题,有上机,最好还要一二个项目放在书的后面。
  找好教材之后,就要作好数个月深入详细学习的心理了,要真正掌握它,就得经常上机。课本上的例题要上机,自己有想法、有问题的时候也要上机验证一下,还有就是保存好自己写过的所有源代码,这点非常重要,因为它不仅是我们技术进步,经验增加的一种见证,而且也有可能有将来某个时间拿来重用。
     这里说的不能急躁就是说不强求自己一下子把整本书看完,一本好书应该细细的看,把里面的知识全部吸引掉,习题全部做完,上机题也全部做完,前面的内容没有看懂就看后面的,那只能导致越看越不懂,越不懂越不看不下去,到最后把书本一扔,前面的努力全白费了。看这样的一本好书胜过自己蜻蜓点水看几本书。看书不能急,时间充实的话,每天看一二个小时就行了,坚持一个星期,一个月,那收获是非常大的。
  看书时,要学会举一反三、融会贯通的能力,即一个题目修改一下又可以生出一个新的程序来了,一个例题加强一下它的功能它就彻底变成自己的了。
  辛辛苦苦把书看完了,还不够,还要做一些小项目,前面辛辛苦苦(实际上是非常快乐的)的看书,做题,上机,写报告,写总结,不就是为了吸引知识嘛,教材学完了,就该检验一下自己掌握了多少知识,掌握得扎不扎实。项目要求不大,能够实现自己想要实现的功能即可。
  以上仅为本人的一些学习的小心得。欢迎论坛的各位大虾小虾大牛小牛提出批评和建议。
     
[课题2.1] 汇编入门实验报告
内容列表:
实验1  查看CPU和内存,用机器指令和汇编指令编程
http://bbs.pediy.com/showthread.php?t=53710 (1楼)

实验2  用机器指令和汇编指令编程

http://bbs.pediy.com/showthread.php?t=53710 (10/11楼)

实验4  [BX]和loop的使用
http://bbs.pediy.com/showthread.php?t=53710&page=2 (18楼)

实验5 编写、调试具有多个段的程序
http://bbs.pediy.com/showthread.php?t=53710&page=3 (23楼)

实验6 实践课程中的程序
http://bbs.pediy.com/showthread.php?t=53710&page=3 (29楼)

实验7 寻址方式在结构化数据访问中的应用
http://bbs.pediy.com/showthread.php?t=53710&page=4 (34楼)

实验8 分析一个奇怪的程序
http://bbs.pediy.com/showthread.php?t=53710&page=4 (40楼)

实验9 根据材料编程
http://bbs.pediy.com/showthread.php?t=53710&page=5 (42楼)


实验10编写子程序
http://bbs.pediy.com/showthread.php?t=57823

[课题2.2]汇编入门小程序联系1
课题要求:编写3个小程序,要求如下

(1)编写程序,从键盘输入一个字母字符,找出该字母的大写/小写字母前导字母和后续字母,并顺序显示出这3个字母字符。

(2)编写程序,比较两个字符串是否相同,并输出比较结果。

(3)从键盘上输入一个4位十六进制数,分别将该数以十六进制和十进制形式显示出来。

http://bbs.pediy.com/showthread.php?t=57474


[课题2.3] 汇编入门小程序联系2
课题要求:编写3个小程序

(1)在以BUF为起始地址的数组中存入了一个字符串,检测该字符串中是否有数字字符,若有,将DL的D3位置1,否则将该位置0。

(2)从键盘输入一个字符串,分类统计该字符串中字母、数字及其它字符的个数,并显示出分类统计值。

(3)在起始地址为ARRAY的数组中,存入了100个16位带符号数,试求该数组中的最大值、最小值及平均值,并将这3个值显示出来。

http://bbs.pediy.com/showthread.php?p=398261#post398261

[课题2.4]汇编入门小程序联系3
课题要求:编写3个小程序
1.  逆序排列字符串
编写一个通用的子程序来实现逆序排列字符串这个功能。
子程序描述
名称:revers_str
功能:将一个指定的字符串逆序排列
参数:ds:si指向字符串的首地址
返回:无
应用举例:将字符串I Love Masm! 逆序排列并输出屏幕查看结果。

2.  字符串大写转换成小写
字符串大小写转换是日常经常用到的功能,编写一个通用的接口实现大写转换成小写的功能,这个接口使我们更灵活的处理字符串的大小写的转换。字符串必须以0结束。
子程序描述
名称:lowercase
功能:将一个指定的字符串转换成成小写的形式
参数:ds:si指向字符串的首地址
返回:无
应用举例:将字符串I Love 80X86 Assembly Language 转换为小写形式,并输出屏幕查看转换后的字符串。

3.  字符串小写转换成大写
字符串大小写转换是日常经常用到的功能,编写一个通用的接口实现大写转换成小写的功能,这个接口使我们更灵活的处理字符串的大小写的转换。字符串必须以0结束。
子程序描述
名称:capital
功能:将一个指定的字符串转换成大写的形式
参数:ds:si指向字符串的首地址
返回:无
应用举例:将字符串I Love Win32 Assembly Language转换为大写形式,并输出屏幕查看转换后的字符串。

http://bbs.pediy.com/showthread.php?t=57937


[课题2.5]汇编入门小程序联系4
课题要求:编写3个小程序

1. 在一个串中查找给定字符的第一个匹配之处
编写一个通用的子程序来实现在一个串中查找给定字符的第一个匹配之处的功能。字符串必须以0结束,区分大小写。
子程序描述
名称:string_char
功能:在一个串中查找给定字符的第一个匹配之处
参数:(ch)=字符 
                    ds:si指向字符串的首地址
返回:(ax)=匹配的位置
             (ax)=0表示未找到匹配位置
应用举例:在字符串I Love Masm! 查找M的第一个匹配的位置,并输出测试结果。

2. 字符串拼接
编写一个通用的子程序来实现将源字符串拼接到目的字符串的功能。字符串必须以0结束。
子程序描述
名称:string_cat
功能:将源字符串拼接到目的字符串
参数:ds:si指向源字符串的首地址
     ds:di指向目的字符串的首地址
返回:无
应用举例:将字符串I Love Win32 Assembly Language!拼接在I Love 80X86 Assembly Language!后面,并输出结果到屏幕上。

3.串比较
编写一个通用的子程序来实现两个字符串的比较的功能。字符串必须以0结束。
子程序描述
名称:string_compare
功能:比较两个字符串
参数:ds:si指向第一个字符串的首地址
     ds:di指向第二个字符串的首地址
返回:(ah)=0 两个字符串相等
     (ah)=1 第一个字符串大于第二个字符串
     (ah)=-1  第一个字符串小于第二字符串
应用举例:比较字符串I Love 80X86 Assembly Language!I Love Win32 Assembly Language!,并在屏幕上输出比较的结果。

http://bbs.pediy.com/showthread.php?t=58757


[课题2.6]汇编入门小程序联系5
课题要求:编写3个小程序

1.  试编写一个程序,要求从键盘接收一个个数数N,然后响铃N次(响铃的ASCII码为07)

2. 编写程序,将一个包含有20个数据的数组M分成两个数组,正数数组P和负数数组N,并分别把这两个数组中的个数显示出来。

3. 编制一个程序,求出首地址为DATA的100D字数组中的最小偶数,并把它存放在AX中。

[课题2.7]汇编入门小程序联系6
课题要求:编写3个小程序

1. 把AX中存入的16位二进制数看作是8个二进制的“四分之一字节“。试编写一个程序,要求数一个值为3(即11B)的四分之一字节数,并将该数在终端上显示出来。

2. 设有一段英文,其字符变量名为MEM,并以$字符结束。试编写一个程序,查找单词MOON在该文本中的出现次数,并以格式”MOON XXXX“显示出次数。

3. 有一个首地址为MEM的100D字数组,试编写程序删除数组中所有为0的项,并将后续项向前压缩,最后将数组的剩余部分补上0。

http://bbs.pediy.com/showthread.php?t=61101

[课题2.8]汇编入门小程序联系7
课题要求:编写3个小程序

1. 数据段中已定义了一个有N个字数据的数组M,试编写一程序求出M中绝对值最大的数,把它放在数据段的M+2N单元中,并将该数的偏移地址存入M+2(N+1)单元中。

2. 试编写一个程序,把AX中的十六进制数转换为ASCII码,并将对应的ASCII码依次存放到MEM数组中的4个字节中。例如,当(AX)=3B85时,程序执行完后,MEM中的4个字节内容为35H、38H、42H和33H。

3. 把0~100D之间的30个数存入以GRADE为首地址的30个字节数组中,GRADE+i表示学号i+1的学生的成绩。另一个数组RANK就为30个学生的名次表,其中RANK+i的内容是学号为i+1的学生的名次。
编写一个程序,根据GRADE中的学生成绩,将学生名次填入RANK数组中。(提示:一个学生的名次等于成绩高于这个学生的人数加1。)

[课题2.9]汇编入门小程序联系8
课题要求:编写3个小程序

1.  已知数组A包含15个互不相等的整数,数组B包含20个互不相等的整数。试编写一个程序,把既在A中又在B中出现的整数存入在数组C中。

2. 设在A、B和C单元中分别存放着3个元素 ,若3个数都不是0,则求出3个数之和并存放于D单元中,若其中有一个数为0,则把其它两个数也清0。

3. 试编写一个程序,要求比较数组ARRAY中的3个16位数,并根据比较结果在终端上显示如下信息:

       (1)如果3个数都不相等则显示0。

       (2)如果3个数有两个数相等则显示1。

       (3)如果3个数都相等则显示2。


[课题2.10]汇编入门小程序联系9
课题要求:编写3个小程序

1.  已定义两个整数变量A和B,试编写一个程序完成下列功能:

       (1)若两个数中有一个是奇数,则将奇数存入A中,偶数存入B中。

       (2)若两个数均为奇数,则将两数均加2后存回原变量。

       (3)若两个数均为偶数,则两个变量都不改变。

2. 假设已编制5个歌曲程序,它们的段地址和偏移地址存入在数据段的跳跃表SINGLIST中。试编写一个程序,根据从键盘输入的歌曲编号1~5,转去执行5个歌曲程序中的某一个。

3. 文件test.txt中有10、20、30、23、45这几个数,试编写一个程序把它们读入内存,并求和,把和存入AX。   



新年新气象,在新的一年里,祝愿大家身体健康,万事如意!