学 号: | 0121010340328 |
课 程 设 计
题 目 | 打印ASCII码表及九九乘法表 |
学 院 | 计算机科学与技术学院 |
专 业 | 计算机科学与技术专业 |
班 级 | 1003班 |
姓 名 | 刘颖 |
指导教师 | 程艳芬 |
2012 | 年 | 6 | 月 | 29 | 日 |
课程设计任务书
学生姓名: 刘颖 专业班级: 计科1003班
指导教师: 程艳芬 工作单位:计算机科学与技术学院
题目: 打印ASCII码表及九九乘法表
初始条件:
理论:完成了《汇编语言程序设计》课程,对微机系统结构和80系列指令系统有了较深入的理解,已掌握了汇编语言程序设计的基本方法和技巧。
实践:完成了《汇编语言程序设计》的4个实验,熟悉了汇编语言程序的设计环境并掌握了汇编语言程序的调试方法。
要求完成的主要任务: (包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)
进一步理解和掌握较复杂程序的设计方法,掌握子程序结构的设计和友好用户界面的设计。具体的设计任务及要求:
1) 将字母和数字的ASCII表在屏幕上打印出来;
2) 将九九乘法表屏幕上打印出来;
汇编语言清华大学出版社3) 程序采用子程序结构,结构清晰;
4) 友好清晰的用户界面,能识别输入错误并控制错误的修改。
在完成设计任务后,按要求撰写课程设计说明书;对课程设计说明书的具体要求请见课程设计指导书。
阅读资料:
1)《IBM—PC汇编语言程序设计实验教程》实验2.4
2)《IBM—PC汇编语言程序设计(第2版)》例6.11
时间安排:
设计安排一周:周1、周2:完成系统分析及设计。
周3、周4:完成程序调试,和验收。
周5:撰写课程设计报告。
指导教师签名: 年 月 日
系主任(或责任教师)签名: 年 月 日
目录
1问题分析和任务定义...............................................3
11问题描述......................................................3
12问题分析......................................................3
2开发平台.........................................................3
3系统设计和各程序段描述...........................................3
31主程序流程图..................................................3
32 ASCII子程序流程图............................................4
33 NINE子程序流程图.............................................5
34 TOH子程序流程图..............................................5
35 OUTPUT子程序流程图...........................................6
4调试结果与运行情况分析...........................................6
41调试中的错误及改正............................................6
42程序运行结果..................................................7
43运行情况分析..................................................7
5自我评价与总结...................................................7
6参考文献.........................................................8
7源程序...........................................................8
8评分表..........................................................12
打印ASCII码表及九九乘法表
1问题分析和任务定义
1.1问题描述
将字母和数字的ASCII表和九九乘法表在屏幕上打印出来;
1.2问题分析
(1)在主程序中设计主菜单,选项包括打印字母和数字的ASCII码表、打印九九乘法表和退出,选择操作序号调用相关子程序;
(2)打印ASCII码子程序中,数字有0—9,字母有A—B和a—b,ASCII码分别为30H—39H,41H—5AH,61H—7AH,分别输出三组字符及ASCII码;
(3)打印九九乘法表子程序中,分行输出1到9的数字与1到9相乘的式子和结果;
(4)主菜单中选择操作时可判断输入是否在选项中,不在则重新输入;
2开发平台
系统:Windows 7
开发工具:Masm for Windows 集成实验环境 2010
语言:汇编语言
3系统设计和各程序段描述
主程序完成操作的选择子程序的调用,ASCII子程序完成字母数字ASCII码的输出,NINE子程序得到九九乘法表,UOTPUT子程序输出乘法算式,SPACE子程序输出空格,CRLF子程序回车换行。TOH子程序完成二进制向十六进制的转化并输出。
菜单选项以及一些提示字句在数据段中定义,用到了伪代码的相关知识。‘$’的作用再次很重要,LEA、OFFSET两个指令达到传送地址的效果,使字符串显示出来。
3.1数据段的定义
DATA SEGMENT
MESSG1 DB '1. PRINT ASCII TABLE','$'
MESSG2 DB '2. PRINT MUT TABLE','$'
MESSG3 DB '3. EXIT','$'
MESSG4 DB 'INPUT NUMBER:','$'
MESSG5 DB 'ASCII TABLE','$'
MESSG6 DB 'NINE_NINE MUT TABLE','$'
MESSG7 DB 'ERROR!INPUT AGAIN!','$'
DATA ENDS
开始
3.2主程序流程图显示主菜单
显示输入有误,重新输入选项
输入选项序号并存入AL
Y
ASCII子程序
[AL]=31H?
N
Y
NINE子程序
[AL]=32H?
N
Y
退出
N
[AL]=33H?
3.2 ASCII子程序流程图
开始
N
返回
[DL]=30H
Y
[DL]<7BH?
输出[DL]
[DL]+1
调用TOH
[DL]+1
Y
[DL]<3AH?
[DL]=61H
回车换行
回车换行
N
[DL]<7BH?
Y
N
[DL]=30H
调用TOH
[DL]+1
输出[DL]
[DL]+1
[DL]=61H
Y
[DL]<3AH?
回车换行
N
N
回车换行
[DL]<5BH?
Y
[DL]=41H
[DL]+1
输出[DL]
调用TOH
[DL]+1
[DL]=41H
回车换行
[DL]<5BH?
Y
N
3.3 NINE子程序流程图
Y
返回
开始
N
[AL]=1,[CH]=1,[BL]=[AL],[BH]=10,[SI]=9
[SI]=10?
[AL]=[BL],[CH]=1,[SI]=9
[AX]=[AL]*[CH],[AX]=[AX]/[BH]
[BL]=[BL]+1
[DH]=[AL],[CL]=[AH]
回车换行
调用OUTPUT
Y
N
[SI]=0?
[CH]=[CH]+1,[AL]=[BL],[SI]=[SI]-1
3.4 TOH子程序流程图
返回
开始
Y
N
循环计数值=0?
[BL]=[DL]
初始化循环计数值
显示一个字符
加上7
[BL]循环左移一个数位
Y
N
ASCII是A-F?
把最右面的数位转化为ASCII
3.5 OUTPUT子程序流程图
开始
返回
打印被乘数
调用SPACE
打印'*'
打印结果的低位
打印乘数
打印结果的高位
打印'='
4调试结果与运行情况分析
4.1调试中的错误及改正
当伪操作代码为 MESSG1 DW '1. PRINT ASCII TABLE','$' 或 MESSG1 DW '1. 打印ASCII表','$' 时,程序均出现错误,提示为:error A2084:constant value too large;而当为MESSG1 DB '1. 打印ASCII表','$' 时,程序可以运行,但汉字会显示为乱码。原因是字符只需要一个字节就可以存储,应使用DB定义;显示汉字需要更完善的运行环境,这里不能支持。
当代码的31行为 CMP AL,1 时,输入选项1提示输入错误。原因是此处应为[AL]与1进行比较,而数字在计算机中为二进制存储,调用时应使用其ASCII码,所以正确代码应为 CMP AL,31H。
当TOH子程序中开始没有AX、BX进栈,末尾没有BX、AX出栈时,打印ASCII表时程序无法显示正确的ASCII表,原因是在TOH中也使用了AX、BX寄存器,如果不对其进行进栈存
储,在调用TOH子程序后返回ASCII子程序时AX、BX中的内容改变了。所以子程序中一定要先对寄存器的内容进行进栈保护,返回前出栈。
代码第192行可以为 MOV DL,'*' ,也可以为 MOV DL,2AH ,两者本质都是将‘*’的ASCII码存入DL寄存器。
4.2程序运行结果
4.3运行情况分析
(1)程序运行后,显示主菜单;
(2)输入1,输出字母和数字的ASCII表,显示主菜单;
(3)输入2,输出九九乘法表,显示主菜单;
(4)输入4或g或其他1、2、3以外的字符,提示输入有误,重新输入;
(5)输入3,程序运行结束,任意键退出。
5自我评价与总结
在学汇编的过程中,最重要的就是要掌握汇编语言中的指令的一些基本用法,要能够真正的了解其中的内涵,这样在实际的编程中也能够像运用高级语言一样灵活的变通。汇编语言 作为一种低级程序设计语言,是最底层的,与计算机内部的结构联系应该联系很密切。寄存器、中断、还要各种寻址方式以及进栈出栈,好多的就是设计到计算机硬件。由于汇编的操作由于跟硬件紧密相关,所以很多硬件设施的嵌入式编程使用的都是使用的汇编语言,因为汇编语言更直接,更有效率。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论