logo资料库

计算机汇编课程设计CCCC.pdf

第1页 / 共42页
第2页 / 共42页
第3页 / 共42页
第4页 / 共42页
第5页 / 共42页
第6页 / 共42页
第7页 / 共42页
第8页 / 共42页
资料共42页,剩余部分请下载后查看
计算机原理与汇编语言 课程设计报告 题目: 统计文件中各字母出现的频率 2019 年 7 月
1 设计目的 题目:给定一个英文 ASCII 码文件,统计文件中每个英文字母出现的次数,计算 每个英文字母出现的频率,并以十进制形式输出。 1.1 设计目标 确立价值塑造、能力培养、知识传授三位一体的课程目标,深入挖掘课程所 蕴含的思想政治教育元素和所承载的思想政治教育功能,融入课堂教学,达成德 育渗透的教学成效。课程设计是计算机原理与汇编语言教学过程中的重要环节。 本课程设计主要目的是使计算机专业学生深入学习计算机原理与汇编语言知识, 进一步提高学生计算机原理与汇编语言综合能力和程序设计技能,锻炼运用计算 机原理与汇编语言解决实际问题的能力。 1.2 设计要求 知识: 理解计算机系统的层次结构、计算机体系结构和计算机组成、冯?诺依曼计 算机的特点;熟练掌握计算机的运算方法;熟练掌握 CPU 的结构和功能,控制 单元的设计;理解计算机组织结构,中央处理器各寄存器结构、标志寄存器;熟 练掌握存储器的编址与组织管理,寻址机制;熟练掌握汇编指令系统指令使用; 熟练掌握循环、分支、调用等程序设计方法;熟练掌握高级宏汇编技术;熟练掌 握磁盘文件系统组织和设计。 能力: 掌握计算机原理和汇编语言程序设计方法和技术,将计算机原理和汇编语言 程序设计应用软件和系统设计;利用控制单元设计原理,学会计算机指令系统, 控制器设计方法;掌握汇编语言程序设计方法,在针对具体实际问题给出汇编语 1
言程序设计;在计算机原理和汇编语言程序设计知识的讨论中培养创新意识,提 高分析、发现、研究和解决问题的能力;培养综合分析问题解决问题和调试程序 的能力。 素质: 注重提高学生思想水平、政治觉悟、道德品质、文化素养等的培养。通过课 程设计中的分析讨论辩论培养分析沟通交流素质,建立计算机原理和汇编语言程 序设计的思维模式,提升理解计算机原理和汇编语言程序设计的基本素质。通过 课程设计,提升团队合作,交流沟通素质。 1.3 实验原理 程序首先打开文件,并进行读取,对文件中的内容(字符串)进行逻辑判断, 根据不同字母对应不同的 ASCII 码值来统计不同字母出现的次数;在程序中, 当读到 ASCII 码值为 0 的字符时说明字符串结束。 2 设计准备 2.1 设计环境 Masm for Windows 集成实验环境 2.2 设计原则 1、 书写的所有汇编语言代码应遵守灰暗语言规范。 2、 语言描述直接、清晰,保持代码简洁,避免语句复杂。 3、 修改后要及时删除旧代码,而不只是将其注释掉。 4、 风格要保持一致,使代码布局清晰,增强可读性。 5、 注释要通俗易懂,不产生歧义,避免加上并非必须的注解。注释使用的语句 要简洁,表达要清晰、准确,不要使人产生歧义,不可喧宾夺主。 2
3 程序设计思想 3.1 总体设计 为实现相应的功能,程序应具备打开文件、读取文本内容、对文本内容进行 分类统计等功能。程序应具备下面的流程图: 开始 打开文件 读取文本内容 对字符内容进行判别 统计各字母个数 错误处理 输出&结束 为实现相应的功能,程序应按照以下的步骤进行: (1)置数据段寄存器,初始化变量 (2)读打开指定文件: 若打开成功,则读取文件中的数据; 若打开失败,则显示打开失败的提示信息; (3)成功读打开文件后: 先保存文件代号,再从文件中读取一个字符; 若读取字符失败,则显示读取字符失败的提示信息; 若读取成功,并且未读取到文件结束符,则继续进行读取下一个字符的操作; (4)读取文件中字符成功后,将文件内容推入栈中,并输出: 先置缓冲区地址,调用缓冲区调用; 读字符,若读出错,则转读出错代码; 3
判断文件是否结束,若结束,置文件结束符于栈中; 若文件未结束,取所读字符置栈中; (5)对所读字符 ASCII 码进行比较判断并统计字符数: 若所读字符的 ASCII 码值小于 A 或大于 z,跳转继续比较下一个字符; 若所读字符的 ASCII 码值在 Z 和 a 之间,跳转继续比较下一个字符; 若读取字符的 ASCII 码值与 a-z,或者 A-Z 中某个字符 ASCII 码值相等,则 该字符个数加 1; (6)统计结束后,显示输出统计出的对应字母个数 4 实现过程 4.1 读取文件代码段 读打开指定文件,若打开成功,则读取文件中的数据,若打开失败,则显示 打开失败的提示信息;成功读打开文件后:先保存文件代号,再从文件中读取一 个字符;若读取字符失败,则显示读取字符失败的提示信息;若读取成功,并且 未读取到文件结束符,则继续进行读取下一个字符的操作; MOV AX,DATAS MOV DS,AX MOV DX,OFFSET FNAME MOV AX,3D00H ;读打开指定文件 INT 21H JNC OPEN ;打开成功,发生跳转 MOV SI,OFFSET ERROR1 CALL DMESS JMP OVER OPEN: MOV BX,AX ;保存文件句柄 GO: CALL READ_CHAR ;跳转代码段,从文件中读一个字符 JC READ_ERROR ;读取错误,跳转至指定代码段 CMP AL,EOF ;是否读到文件结束符 JZ TYPE_OK ;程序转移 CALL PUNCH JMP GO 4
4.2 将文件压入栈中,并输出 读取文件中字符成功后,将文件内容推入栈中,并输出:先置缓冲区地址, 调用缓冲区调用;读字符,若读出错,则转读出错代码;判断文件是否结束,若结 束,置文件结束符于栈中;若文件未结束,取所读字符置栈中; READ_CHAR PROC MOV CX,1 ;要读取的字节数 MOV DX,OFFSET BUFFER ;置缓冲区地址 MOV AH,3FH ;读文件 INT 21H JC R1 ;读出错,程序转移 CMP AX,CX ;判断文件是否结束 MOV AL,EOF JB R2 MOV AL,BUFFER R2: CLC R1: RET READ_CHAR ENDP DMESS PROC DMESS1: MOV DL,[SI] INC SI OR DL,DL JZ DMESS2 MOV AH,02H INT 21H ;显示一个字符 JMP DMESS1 DMESS2:RET DMESS ENDP 4.3 对所读字符 ASCII 码进行比较判断并统计字符 对所读字符 ASCII 码进行比较判断并统计字符数:若所读字符的 ASCII 码值 小于 A 或大于 z,跳转继续比较下一个字符;若所读字符的 ASCII 码值在 Z 和 a 之间,跳转继续比较下一个字符;若读取字符的 ASCII 码值与 a-z,或者 A-Z 中 某个字符 ASCII 码值相等,则该字符个数加 1;对于不在字母序列内的字符 PUNCH PROC PUSH DX 5
MOV DL,AL MOV AH,02H ;显示一个字符 INT 21H POP DX MOV CL,41H ;(A) LEA DI,ARRAY MOV CH,AL CMP CH,CL JB OTHER ;若IF<41H(A),OTHER++ CMP CH,5AH JA HIGHER2 ;若IF>5AH(Z),继续比较 H1: CMP CH,CL JE CHAR ;对应字母个数++ JA LOOP1 LOOP1: INC CL ADD DI,1 JMP H1 HIGHER2: MOV CL,61H ;(a) LEA DI,ARRAY MOV CH,AL CMP CH,CL JB OTHER ;若IF<61H(a),OTHER++ CMP CH,7AH JA OTHER ;若IF>7AH(z),OTHER++ H2: CMP CH,CL JE CHAR ;对应字母个数++ JA LOOP2 LOOP2: INC CL ADD DI,1 JMP H2 CHAR: XOR CH,CH MOV CH,[DI] INC CH MOV [DI],CH 6
OTHER: INC OTHERS ;比较结束 5 运行结果 5.1 文本文件内容 aaaaabbbbbcccccdddddeeeeefffffggggghhhhhiiiiijjjjjkkkkklllllmmmmmnnnnnooooop ppppqqqqqrrrrrssssstttttuuuuuvvvvvwwwwwxxxxxyyyyyzzzzz%*% 5.2 运行结果截图 先显示文件内容,然后显示各字符出现的字数 6 心得体会 6.1 问题及解决办法 (1)找不到文件,显示 file not found 解决办法:根据显示可知,出现这种情况的原因是找不到文件,可能出现的原因 有:一代码出错,导致无法找到文件或是打开文件;二是文件未创建成功;三是 7
分享到:
收藏