课程设计说明书
课程设计名称:汇编语言程序设计课程设计
学生所在院部: 计算机学院网络工程系
学号:
班级: 姓名:
设计题目: 字符串处理
设计地点:_________基础五____________
设计时间: 15周 至 16周
成绩评定:
1、工作量: 大( ),较 大( ),一般( ),较 小( )
2、难易度: 难( ),较 难( ),一般( ),简 单( )
3、答辩情况:
基本操作: 熟练( ),较熟练( ),一般( ),不熟练( )
代码理解: 准确( ),较准确( ),一般( ),不准确( )
4、报告规范度: 规范( ),较规范( ),一般( ),不规范( )
5、学习态度: 优秀( ),良 好( ),中等( ),一 般( )
总评成绩:___________________________
指导教师:___________________________
1、 汇编语言课程设计的目的、任务
使学生综合使用所学过的汇编语言程序设计知识,掌握结构化程序设计的基本思路和方法,利用所学的基本知识和技能,发挥自学能力和查找资料的能力,解决稍微复杂的结构化程序设计问题,加深对所学知识的理解与掌握,增强学生利用自己所学知识解决实际问题的能力,为以后的程序开发打下基础。
课程设计的目的和要求:
(1)使学生巩固和加强《汇编语言》课程的理论知识。
(2)使学生掌握汇编语言的基本概念、语法、语义和数据类型的使用特点。
(3)使学生掌握汇编语言程序设计的方法及编程技巧,能正确使用汇编语言编写程序。
(4)进一步理解与运用结构化程序设计的思想和方法;学会利用流程图或N-S图表示算法。
(5)使学生掌握调试程序的基本方法及上机操作方法。
(6)掌握书写程序设计开发文档的能力,使学生学会撰写课程设计总结报告。课程设计的思想和方法还可以作为学生做毕业论文时的参考资料。
(7)通过查阅手册和文献资料,培养学生独立分析问题和解决问题的能力。为学生做毕业设计打好基础。
(8)初步掌握开发一个小型实用系统的基本方法:结合实际应用的要求,使课程设计既覆盖知识点,又接近工程实际需要。通过激发学习兴趣,调动学生主动学习的积极性,并引导他们根据实际编程要求,训练自己实际分析 问题的能力及编程能力,并养成良好的编程习惯。
(9)培养学生的创新能力和创新思维。学生可以根据指导书和相关文献上的参考算法,自己设计出相应的应用程序。
(10)培养学生良好的程序设计风格。在实际编程中,为了提高编程质量,对空行、空格和注释均有要求。学生在课程设计书写代码时,应该严格按要求处理,以便建立良好的程序设计风格。
2、 软件需求分析和设计
从键盘输入字符串,内有数字和非数字字符(以空字符串作为输入结束标志),如:A32b2K456 178? Fgfre54f等,将其中的连续数字作为一个整数,依次存入数组a中,例如a[0]中存32、a[1]中存2、a[2]中存456、……,并将数组元素按升序排序后一次存入另一个数组中,再输出到屏幕
主程序设计流程图:
┌──────────────────────┐
│ 字符处理 │
├──────────────────────┤
│ 1--显示数字 │
│ 2--将数字排序 │
│ 3--显示字母 │
│ 4--显示特殊字符 │
│ 5—显示字符串 │
│ 6--退出系统 │
└──────────────────────┘
“显示字母”的二级菜单为:
┌──────────────────────┐
│ 1--显示大写字母 │
│ 2--显示小写字母 │
│ 3--显示元音字母 │
│ │
└──────────────────────┘
子程序流程图:
3、 程序实现说明
从键盘输入字符串,内有数字和非数字字符,判断每个字符种类并存储到字符相对应字符空间。
Next:mov ah,1
int 21h
CMP AL,0DH
JNZ GOON
JMP TISHI ;显示结果
GOON:
inc zs 输入的字符个数+1
MOV BX,OFFSET baocun 字符保存在BAOCUN存储空间
MOV CX,0
MOV CL,zs
ADD BX,CX
DEC BX
MOV [bx],al
CMP AL,'!' 判断符号!到/之间的符号保存在FH_C中
jl next
cmp al,'/'
jg is_0_9
inc FHX
MOV BX,OFFSET FH_C
MOV CX,0
MOV CL,FHX
ADD BX,CX
DEC BX
MOV [bx],al
jmp next
is_0_9:
cmp al,'0' 判断数字0之9之间的数字保存在SZ_C中
jl NEXT
cmp al,'9'
jg NO_0_9
inc SZ
MOV BX,OFFSET SZ_C
MOV CX,0
MOV CL,SZ
ADD BX,CX
DEC BX
MOV [BX],AL
JMP NEXT
NO_0_9:
cmp al,'A' 判断字母大写保存在DX_C中
jl NEXT
cmp al,'Z'
jg NO_D_AZ
inc DAX
MOV BX,OFFSET DX_C
MOV CX,0
MOV CL,DAX
ADD BX,CX
DEC BX
MOV [BX],AL
inc ZM
MOV BX,OFFSET ZM_C 保存字母
MOV CX,0
MOV CL,ZM
ADD BX,CX
DEC BX
MOV [BX],AL
JMP NEXT
9号功能调用提示信息
TISHI: MOV AH,2
MOV DH,3
MOV DL,9
MOV BH,0
INT 10H
mov ah,9
mov al,'*'
mov bh,0
mov bl,0dah
mov cx,24
int 10h
mov ah,9
lea dx,mess1
int 21h
mov ah,9
lea dx,mess2
int 21h
mov ah,9
lea dx,mess3
int 21h
mov ah,9
lea dx,mess4
int 21h
mov ah,9
lea dx,mess5
int 21h
mov ah,9
lea dx,mess6
int 21h
MOV AH,2
MOV DH,10
MOV DL,9
MOV BH,0
INT 10H
mov ah,9
mov al,'*'
mov bh,0
mov bl,0dah
mov cx,24
int 10h
xz:
mov ah,1
int 21h
cmp al,'1'
je DISP_1
CMP AL,'2'
JE DISP_4
CMP AL,'3'
JE DISP_5
CMP AL,'4'
JE disp_6
CMP AL,'5'
JE disp_7
CMP AL,'6'
jmp out1
DISP_1: 输出数字个数和数字
CALL CRLF_P
mov al,SZ
CALL DISP_CZR
mov ah,09
lea dx,SZ_C
int 21h
CALL CRLF_P
JMP xz
DISP_2: 输出大写字母个数和大写字母
CALL CRLF_P
mov al,DAX
CALL DISP_CZR
mov ah,09
lea dx,DX_C
int 21h
CALL CRLF_P
JMP xz1
DISP_3: 输出小写字母和个数
CALL CRLF_P
mov al,XXX
CALL DISP_CZR
mov ah,09
lea dx,XX_C
int 21h
CALL CRLF_P
JMP xz1
DISP_4: 输出符号和符号个数
CALL CRLF_P
mov al,FHX
call DISP_CZR
MOV AH,09
LEA DX,FH_C
INT 21H
CALL CRLF_P
JMP xz
DISP_5: 数字排序
CALL CRLF_P
mov cl,sz
mov ch,0
dec cx
loop2:
push cx
mov bx,0
loop3:
mov al,SZ_C[bx]
cmp al,SZ_C[bx+1]
jle next2
xchg al,SZ_C[bx+1]
mov SZ_C[bx],al
next2: add bx,1
loop loop3
pop cx
loop loop2
lea dx,SZ_C
mov ah,9
int 21h
call crlf_p
jmp xz
xz1:call crlf_p 二级菜单设计
mov ah,1
int 21h
cmp al,'1'
je DISP_2
CMP AL,'2'
JE DISP_3
CMP AL,'3'
JE yyzm
CMP AL,'4'
jmp out1
yyzm: 判断字母是不是元音字母并保持在yy_c中,
call crlf_p
mov al,zm
mov ah,0
mov cx,ax
mov di,0
mov si,0
loop1: mov al,zm_c[si]
cmp al,'a'
je yyzm1
cmp al,'e'
je yyzm1
cmp al,'i'
je yyzm1
cmp al,'o'
je yyzm1
cmp al,'u'
je yyzm1
cmp al,'A'
je yyzm1
cmp al,'E'
je yyzm1
cmp al,'I'
je yyzm1
cmp al,'O'
je yyzm1
cmp al,'U'
je yyzm1
inc si
loop loop1
yyzm1:mov yy_c[di],al
inc si
inc di
loop loop1
lea dx,yy_c
mov ah,9
int 21h
call crlf_p
JMP XZ1
4.程序总结
在这次课程设计中我收获很多,熟悉汇编语言子程序设计方法熟悉利用汇编语言子程序参数传递方法熟悉串操作指令的功能和应用,掌握串操作指令的寻址方式及使用方法,编写常用的字符串处理。
以往对编程的应用较少,只能编写一些简单较小的,这次课程设计一次编写了达到400行的代码。我觉得挺不容易的,以我的基础来说本来很难做到,但是通过认真看书,不明白的又上网查阅资料,最终勉强做完了实验的要求,唯一较为遗憾的是在排序数字的要求上做的不够好,只是做了一个简单的个位数排序,没有达到要求的任意位数排序,另外题目要求的保存字符串在显示字符串,我的运行结果里只有显示字符串,在程序中直接把字符串保存在相应的存储位置在显示出来,对程序的运行思想基本做到理解,但是对程序的代码还不够熟练掌握。需要依靠课本知识才能完成本次实验任务。我希望可以通过更加多的实验提高我们的汇编知识,在这次选题中,每个人只做了一个属于自己的题目,所用到的知识也不相同,我觉得有点遗憾。