汇编程序设计课程设计报告_第1页
汇编程序设计课程设计报告_第2页
汇编程序设计课程设计报告_第3页
汇编程序设计课程设计报告_第4页
汇编程序设计课程设计报告_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、课程设计说明书题目: 显示9-9乘法表和ASCII字符表 院 系: 计算机学院 专业班级: 计算机08-2班 学 号: 学生姓名: 李雅雪 指导教师: 廖正和 2010年 12 月 19 日 安徽理工大学课程设计(论文)任务书 计算机科学与工程学院 硬件 教研室学 号学生姓名李雅雪专业(班级)计算机08-2班设计题目显示9-9乘法表和ASCII字符表(从20H-FFH)设计技术参数1. 熟悉汇编指令、宏汇编语言的编程方法 2. BIOS中断调用、系统功能中断调用方法 3. 磁盘文件、及文件内容操作设计要求1程序运行后先要清屏幕,然后屏幕上出现主菜单:1)M 输出9-9乘法表2)A ASCAII

2、 表3)Q 退出2选择功能后显示乘法表或ASCAII字符表,屏幕上提示按任意键回到主菜单,选择按Q键后退出程序。显示表格时,要确定好光标的开始位置。按任意键返回的提示可以在最下面一行显示,这样不会被覆盖掉。3课程设计中,菜单的设计可以是简单明了,主要注重程序中工作量1. 完成所选题目的软件设计;2. 课程设计说明书1000字(不包括程序源代码)左右。工作计划第1次课熟悉软件环境绘制程序流程图。第2次课编写程序。第3次课用调试运行程序。第4次课用修改完善程序第5次课编写课程设计说明书参考资料1. 8086/8088和基于ARM核汇编语言程序设计 第二版 李敬兆/编 中国科学技术大学出版社2. I

3、BM-PC 汇编语言程序设计 沈美明等 清华大学出版社 3. 80X86汇编语言程序设计教程 杨季文/等编 清华大学出版社指导教师签字教研室主任签字 2009年 12月 1日指导教师评语:成绩: 指导教师: 年 月 日安徽理工大学课程设计(论文)成绩评定表目录摘要II1系统分析11.1 课程设计题目11.2 任务分析12系统设计22.1 程序结构设计22.2 模块划分33系统实现43.1 各模块主要功能及实现44总结114.1 实验体会114.2 系统改进12参考文献13摘要本次汇编语言课程设计题目可以开发一个具有分支、循环等结构的汇编语言程序。程序运行后实现先要清屏幕,然后屏幕上出现主菜单:

4、M 输出9-9乘法表,A ASCAII 表,Q 退出,选择功能后显示乘法表或ASCAII字符表,屏幕上提示按任意键回到主菜单,选择按Q键后退出程序。我们可以通过子程序的调用来实现程序的两个子功能。子程序Print99MultTable实现9-9乘法表的显示;子程序PrintASCIITable实现ASCII字符表(20H-FFH)的显示。子程序Quit实现退出的功能关键词: 汇编语言 子程序 输入输出 中断1系统分析1.1 课程设计题目题目:显示9-9乘法表和ASCII字符表(从20H-FFH) 要求:1. 建立主菜单界面; 2. 按下M键显示9-9乘法表3. 按下A键显示ASCII字符表。4

5、. 按“Q”键退出。5. 设计出友好的交互界面1.2 任务分析本次汇编语言课程设计题目可以开发一个具有分支、循环等结构的汇编语言程序。程序运行后实现先要清屏幕,然后屏幕上出现主菜单:M 输出9-9乘法表,A ASCAII 表,Q 退出,选择功能后显示乘法表或ASCAII字符表,屏幕上提示按任意键回到主菜单,选择按Q键后退出程序。们可以通过子程序的调用来实现程序的两个子功能。子程序Print99MultTable实现9-9乘法表的显示;子程序PrintASCIITable实现ASCII字符表(20H-FFH)的显示。子程序Quit实现退出的功能该程序具有字符串输出、字符输入输出等功能,需要调用i

6、nt 21h的02号的显示dl数字到屏幕上的功能,08号接受键盘输入的字符,09好功能将一个以$结束的字符串显示在屏幕上,4Ch号功能是返回到Dos界面。程序编写时在进行语句跳转时要特别谨慎,防止出现语句的跳转错误或逻辑错误。2系统设计2.1 程序结构设计根据任务分析,设计程序的流程。绘出程序流程图,如图2.1:2.1 程序流程图程序开始运行后,通过按键判断,可以进入3个不同的分支。分别是子程序1、子程序2、和退出功能。子程序1是显示9-9乘法表功能,子程序2是显示ASCII字符表的功能。执行完子程序1和子程序2后可以选择继续执行原来的子程序还是返回到按键判断的模块。子程序1实现的9-9乘法表

7、可以通过输入的参数来确定乘法表的大小(即输入一个1到9之间的整数N,可以显示从1*1=1到N*N=N2)。该子程序通过一个双层嵌套循环来控制乘法表的行、列的显示输出。外层循环控制乘法表的行输出,内层循环控制乘法表的列输出。子程序2实现存储在数据段中的字符串的输出。依次输出ASCII字符表的每一行,通过调用int 10h的0eh功能。退出功能通过调用int 21h的4ch功能来退出程序返回DOS控制。2.2 模块划分1. 菜单显示模块。用于显示程序的主菜单。2. 按键判断模块。用于判断按下的是那个键,根据按键来选择转入哪个分支。3. 子程序Print99MultTable模块。用于实现显示9-9

8、乘法表的功能。4. 子程序PrintASCIITable模块。用于实现显示ASCII符号表的功能。5. 子程序Quit模块。用于退出模块6. 错误处理模块。用于显示出错信息,以及出错后的程序跳转。3系统实现3.1 各模块主要功能及实现1. 数据段的定义data segmenttab db *Display Program*,0dh,0ah,$select1 db F1 multipul table,0dh,0ah,$select2 db F2 ASCII codes table,0dh,0ah,$select3 db F3 exit,0dh,0ah,$errsign db error keyp

9、ress,0dh,0ah,$sign db please input a integer (between 1 and 9):,0dh,0ah,$rsign db return or continue(R or C),0dh,0ah,$resign db return(Y or N),0dh,0ah,$p db 10buf dw ?buf2 dw ?ascii1 db SP 20h 0 30h 40h P 50h blank 60h p 70h,0dh,0ah,$ascii2 db ! 21h 1 31h A 41h Q 51h a 61h q 71h,0dh,0ah,$ascii3 db 2

10、2h 2 32h B 42h R 52h b 62h r 72h,0dh,0ah,$ascii4 db # 23h 3 33h C 43h S 53h c 63h s 73h,0dh,0ah,$ascii5 db 24h 4 34h D 44h T 54h d 64h t 74h,0dh,0ah,$ascii6 db % 25h 5 35h E 45h U 55h e 65h u 75h ,0dh,0ah,$ascii7 db & 26h 6 36h F 46h V 56h f 66h v 76h,0dh,0ah,$ascii8 db 27H, 27h 7 37h G 47h W 57h g

11、67h w 77h,0dh,0ah,$ascii9 db ( 28h 8 38h H 48h X 58h h 68h x 78h,0dh,0ah,$ascii10 db ) 29h 9 39h I 49h Y 59h i 69h y 79h,0dh,0ah,$ascii11 db * 2ah : 3ah J 4ah Z 5ah j 6ah z 7ah,0dh,0ah,$ascii12 db + 2bh ; 3bh K 4bh 5bh k 6bh 7bh,0dh,0ah,$ascii13 db , 2ch 3eh N 4eh 5eh n 6eh 7eh,0dh,0ah,$ascii16 db /

12、 2fh ? 3fh O 4fh _ 5fh o 6fh DEL 7fh,0dh,0ah,$data ends数据段中主要定义了本次实验中需要使用的一些字符串,比如用于显示主菜单、提示信息的字符串和显示ASCII字符表的字符串。数据段定义如下:字符串tab、select1、select2、select3是用来输出主菜单的字符串。errsign、sign、rsign、resign是用来输出提示信息的字符串。变量p、buf和buf2的作用在后面有所叙述。ascii1到ascii16用来输出ASCII字符表的字符串。2. 菜单显示模块本模块主要是通过调用int 21h的9号功能,输出字符串来实现菜单

13、的显示。start1: lea dx, tab mov ah,09 int 21h lea dx,select1 mov ah,09 int 21h lea dx,select2 mov ah,09 int 21h lea dx,select3 mov ah,09 int 21h mov ah,0eh mov al,0dh int 10h mov ah,0eh mov al,0ah int 10h3.1 程序主菜单截图3. 按键判断模块本模块的作用是用来检测按下的按键并且判断按键是否有效,若有效,则跳转到对应的分支。若按键无效,跳转到错误处理模块,处理按键的错误。mov ah,0 int 16

14、h cmp al,0 je select jmp error1select: cmp ah,3bh jz lab1 cmp ah,3ch jz lab2 cmp ah,3dh jz exit jmp error1调用int 16h的0号功能,完成键盘的输入。并在下面的select分支里对ah的值进行测试比较,判断并跳转到相应的子程序里。如果都不满足跳转的条件则输入错误,跳转到错误处理模块error1。4. 子程序1模块子程序1实现显示9-9乘法表的功能。代码如下:OPTION_F1 proc xor ax,ax xor dx,dx lea dx,sign mov ah,09 int 21h x

15、or ax,ax mov ah,1 int 21h xor ah,ah sub ax,30h mov buf,ax mov ah,0eh mov al,0dh int 10h mov ah,0eh mov al,0ah int 10h xor bx,bx mov cx,bufs1: inc bh mov bl,0s2: inc bl mov ah,2 mov dl,bl add dl,30h int 21h mov ah,0eh mov al,* int 10hmov ah,2 mov dl,bh add dl,30h int 21h mov ah,0ehmov al,=int 10hmov

16、al,blmul bhdiv p mov buf2,bxmov bx,axmov ah,2mov dl,bladd dl,30hint 21hmov ah,2mov dl,bhadd dl,30hint 21hmov ah,0ehmov al, int 10hmov bx,buf2mov ax,bufsub ax,cxadd ax,1hcmp al,blja s2mov ah,0ehint 10hmov al,0dhimov ah,0ehmov al,0ahint 10hloop s1 retOPTION_F1 endp本模块先通过调用int 21h的9号功能输出提示信息:“please in

17、put a integer (between 1 and 9):”。然后通过调用int 21h的1号功能来接受从键盘输入的一个字符的ASCII码值,经过减3OH的操作后将寄存器ax中的值处理为内外循环的最大循环次数(即乘法表的最大行列数)。将bl和bh两个字节寄存器做内外循环的计数器,也能在计算乘法表中充当算式的被乘数和乘数的值。外层循环用“s1: loop s1”的循环结构来控制乘法表的换行输出。进入内层循环后,利用当前的bh和bl寄存器中的值即可构成当前的算式:“(bl)*(bh)=(bl)*(bh))”。算式中的固定部分“*”和“=”是利用int 10h的0eh号功能输出的。内层的循环次

18、数是由“buf-cx+1bl”来判断的。buf变量在这里充当一个暂存器的作用,用来存储cx的初值。buf-cx+1在这里确定了每次内层循环中的最大循环次数。在循环的过程中对于需要重复使用的寄存器,在重复使用前要做好现场保护。在本程序中,使用了另一个变量buf2来充当bx的暂存器。其实也可以用“push”和“pop”指令来完成同样的工作,比用变量的方式要方便。在输出算式的乘积是要注意到有很多算式的乘积已经超过0-9的范围了。那么在输出字符时就不能直接使用“ax+30h”的方法来求出输出字符的ASCII码值了。我们知道,两个字节数相乘后,乘积默认存储在字寄存器ax中。这时,我们需要在得出乘积后,转

19、化其存储方式,即用ah来存储十进制乘积的十位数,用al来存储十进制乘积的个位数。这样在输出时,分别输出就可以得到正确的显示结果了。外层循环的功能简单地来说就是控制换行;内层的功能就是通过每一次的循环来输出一个算式。经过指定次数的循环后,即可得出一个下三角形状的矩阵。3.2 子程序1 9-9乘法表图示5. 子程序2模块子程序2用于显示ASCII字符表,代码如下:OPTION_F2 proc lea dx,ascii1 mov ah,09 int 21h lea dx,ascii2 mov ah,09 int 21h lea dx,ascii3 mov ah,09 int 21h lea dx,a

20、scii4 mov ah,09 int 21h mov ah,0eh mov al,$ int 10h lea dx,ascii5 mov ah,09 int 21h lea dx,ascii6 mov ah,09 int 21h lea dx,ascii7 mov ah,09 int 21h lea dx,ascii8 mov ah,09 int 21h lea dx,ascii9 mov ah,09 int 21h lea dx,ascii10 mov ah,09 int 21h lea dx,ascii11 mov ah,09 int 21h lea dx,ascii12 mov ah,

21、09 int 21h lea dx,ascii13 mov ah,09 int 21h lea dx,ascii14 mov ah,09 int 21h lea dx,ascii15 mov ah,09 int 21h lea dx,ascii16 mov ah,09 int 21h retOPTION_F2 endp通过调用int 21h的9号功能逐行输出存储在数据段中的字符串。该模块的实现比较简单。3.3 子程序2 ASCII字符表显示图示(完整程序代码详见光盘)4总结4.1 实验体会两周的汇编语言课程设计结束了,我的收获很大。通过课程设计的编程和对编程过程中遇到的问题的思考,有效地提高了

22、我对汇编的认识和理解,切实地提高了我的编程能力,补全了我的不足。我深刻地感觉到对于我们的程序设计来说纸上谈兵是不行的。在实践中你会遇到很多意想不到的问题。在解决这些问题的过程中也是很有趣的,考验着你的耐心和能力。我发现在从不断的实践中发现问题、解决问题,我学到了课本上学不到的经验和知识。通过这次课程设计,我巩固所了学过的知识,能用汇编语言熟练地运用顺序、选择、循环三大结构,进一步掌握了各个指令的功能,特别是转向指令,掌握了子程序的定义及调用,以及正确地运用debug指令。在整个程序的编写中,调试占了很大部分的时间。要想写好汇编语言的程序,必须认真对待代码的每一个细节,还必须熟练的掌握debug命令,这对程

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论