汇编语言课程设计报告
( 20## -- 20## 年度第 1 学期)
目 录
1 设计目的. 1
2 概要设计. 1
2.1 系统总体分析. 1
2.2 主模块框图及说明. 1
3 详细设计. 3
3.1 主模块及子模块说明. 3
3.2 各模块详细设计. 5
3.2.1 主界面模块. 5
4 程序调试. 5
4.1 运行界面分析. 5
4.2 调试过程及分析. 7
5 心得体会. 9
5.1 设计体会. 9
5.2 系统改进. 10
参考文献. 11
附 录. 12
附录1 源程序清单. 12
附录1.1 磁盘文件管理系统模块源程序. 12
1 设计目的
本课程设计是在学完教学大纲规定的全部内容、完成所有实践环节的基础上,旨在深化学生学习的汇编语言课程基本知识,进一步掌握汇编语言程序设计方法,提高分析问题、解决问题的综合应用能力。学会查阅和汇编语言相关的规范,手册等技术资料。能正确绘制和使用流程图。掌握汇编语言程序设计和程序调试的基本技能,能进行基本的软件设计。
“汇编语言”课程设计是计算机应用开发人员必须接受的最重要的专业训练之一,是计算机软、硬件的基础,利用汇编语言编写程序可以是我们更清楚地了解计算机是怎样完成复杂工作的,理解计算机对系统中各种设备的调度,从而从根本上认识计算机的工作原理,对课程所学理论知识的深化和提高。因此,课程设计要求同学们熟悉汇编语言的编程,BIOS中断调用、dos系统功能调用、磁盘数据的查询、存取等相关知识。通过课程设计,可以提高运用汇编语言编程解决实际问题的能力,为以后的学习和系统开发奠定良好的基础。
2 概要设计
2.1 系统总体分析
实现对磁盘文件的管理。
创建文件,向磁盘文件中写入信息,从磁盘文件中读出信息并显示,退出程序。如果向磁盘中写入信息或者从磁盘中读取信息失败屏幕会显示打开文件错误的提示。根据提示输入字符,如果输错可以返回并且从新输入。
通过DOS 1功能调用接收用户输入的数据,如果用户输入1,则调用“文件创建模块”,创建文件。如果输入2,则调用“文件写入模块”,对文件写入。如果输入3,则调用“文件读取模块”,读取文件。如果输入4,则退出程序。
如果输入其他字符,则再次调用“主界面模块”,提示符合的操作。
2.2 主模块框图及说明
1、功能菜单主界面。
2、创建文件。
3、写入文件。
4、读取文件
3 详细设计
3.1 主模块及子模块说明
⑴创建文件
⑵写入信息
⑶读出信息
1功能菜单的显示。利用9H功能调用显示menu
mov ah,9
lea dx,menu
int 21h
2创建文件。利用功能调用3CH建立文件。DX=文件路径,CX=属性
3 向磁盘文件中写入信息。先利用功能调用3DH打开文件,再将从键盘输入的字符存入缓冲区,再从缓冲区写入文件,关闭文件。
4 从磁盘文件中读出信息并显示。先打开文件,在将文件内容存入缓冲区,再将缓冲区内容输出,关闭文件。
5 退出程序。
3.2 各模块详细设计
3.2.1 主界面模块
调用Dos 21H功能实现文件操作
3CH:创建文件 DS:DX=文件路径,CX=属性,返回文件号
3DH:打开文件 DS:DX=文件路径,AL=模式
3EH:关闭文件 BX=文件号
3FH:读取文件 BX=文件号 CX=字符数 DS: DX=缓冲区 成功:CF=0,失败:CF=1,AX=错误码
40H:写文件或设备 BX=文件号 DS:DX=代写的数据地址 CX=代写的字节数
在主程序中通过call指令调用子程序,在子程序中通过RET指令返回主函数。
缓冲区定义
buffer1 db 60,0,60 dup(?)
buffer2 db 60,0,60 dup(?)
新建文件 ah=3c ds:dx=asciiz串地址 cx=属性字 返回成功:ax=句柄
打开文件 ah=3d ds:dx=asciiz串地址 返回成功:ax=句柄
al=(访问码)(0,读 1,写 2读写)
读文件 ah=3f ds:dx=asciiz数据缓冲区地址 返回成功:ax=句柄
bx=句柄 cx=读取字节数
写文件 ah=40 ds:dx=asciiz数据缓冲区地址 返回成功:ax=句柄
bx=句柄 cx=写入字节数
4 程序调试
4.1 运行界面分析
1)打开windows命令窗口
2)进入tasm程序的安装目录,汇编源文件,如图:
3)用tlink将文件生成obj文件格式
图5-1
图5-2
4.2 调试过程及分析
当输入1时,创建文件成功,如图5-3所示:
图5-3
如果创建失败,则显示Creat file error!
当输入2时,屏幕会显示如图5-4所示
图5-4
向磁盘中输入信息qinxia,写入文件成功,如图5-5所示。
图5-5
当写入文件失败会显示Write to file error!
输入3时,读出文件成功,如图5-6所示
图5-6
当读出文件失败会显示Read from file error!
当输入4时,退出程序。如图5-6所示。
图5-6
5 心得体会
5.1 设计体会
汇编语言是面向机器的程序设计语言。在汇编语言中,用助记符代替机器指令的操作码,用地址符号或标号代替指令或操作数的地址,如此就增强了程序的可读性并且降低了编写难度,想这样符号化的程序设计语言就是汇编语言,因此也称为符号语言。使用汇编语言编写的程序,机器不能直接识别,还要由汇编程序或者叫汇编语言编译器转换成机器指令。汇编程序将符号化的操作代码组装成处理器可以识别的机器指令,这个组装的过程称为作何或汇编。因此,有时候人们也把汇编语言称为组合语言。
这学期学习汇编语言这门课时,对它有了基本的了解和认识。汇编语言其实仍然是机器语言,虽然看起来是英文,但实际上汇编语言中差不多每一句指令都单独对应一句机器语言指令,这就好比汉字一对应阿拉伯数字1一样,只有一少部分是经过变化的,就是因为绝大多数汇编语言指令都与机器语言指令一一映射,所以通常说汇编语言能直接对电脑硬件操作。除了机器语言之外的任何一种语言都需要编译程序,汇编语言的编译器非常小。本次课程设计使我充分了解到汇编语言在实际中的应用并不是那么容易。仅把课堂上的知识充分运用还是不够的。程序设计不能仅仅停留在课本上,想要把程序做好,必须不断通过各种途径掌握更多更好的知识,要善于查找资料提高自己的资料查询能力,要善于利用网络、图书馆来获得知识,不清楚的地方多向老师咨询,获得帮助。最重要的是,要将获得的知识运用的实际编程中,要学以致用。开始着手程序设计时,有些功能感觉无从下手,都不知道要干什么。这些问题只要找到相关的资料就会得到提示从而理解所要解决问题的大致方向。有了明确的目的,就可以发挥自己的智慧来完成它。只有认真的去思考机器是如何进行逻辑思考才能更好的掌握理解它。正所谓“纸上得来终觉浅,觉知此事要躬行。”所以在本学期课程设计是很及时、很必要的。这样不仅能加深我们对程序设计的掌握,而且还及时、真正的做到了学以致用。
5.2 系统改进
这次的课程设计中为了避免寄存器冲突的问题,在设计子程序时,应把所有用到的寄存器都入栈保存,但用来传递参数和结果的寄存器则要注意,不必入栈的就不入栈了,以免得不到预期的结果。可以把寄存器当作变量来看待,有时候它存储的是数据变量(如把BP当作字符个数的记录器),而有时候它存储的是地址变量(如DI、SI);通过这次课程设计的编程和对编程过程中遇到的问题的思考,有效的提高了我对汇编的认识和理解,提高了我的编程能力。
参考文献
[1]姚燕南,薛钧义主编.微型计算机原理与接口技术.高等教育出版社,2004.11
[2]温冬蝉,沈美明.IBM PC汇编语言程序设计.第2版.北京:清华大学出版社,2002.3
[3]齐志儒,高福祥主编.汇编语言程序设计.第2版.东北大学出版社,2001.1
[4]张弥左,王兆月,邢立军编著.微型计算机接口技术. 机械工业出版社
[5]吴秀清.微型计算机原理与接口技术.合肥:中国科技大学出版社,2003
[6]易先清.微型计算机原理与应用.北京:电子工业出版社,2001
[7]李敬兆.8086/8088和基于ARM核汇编语言程序设计.第二版.合肥:中国科学技术大学出版社,2008.9
[8]王爽.汇编语言.北京:清华大学出版
附 录
附录1 源程序清单
附录1.1 磁盘文件管理系统模块源程序
@@@@@@@@@@@@@@@@@@@@@@@
data segment
menu db 0dh,0ah, '********************************************',0dh,0ah
db '* menu *',0dh,0ah
db '*------------------------------------------*',0dh,0ah
db '* 1.Create file *',0dh,0ah
db '* 2.Write to file *',0dh,0ah
db '* 3.Read file *',0dh,0ah
db '* 4.Quit *',0dh,0ah
db '*------------------------------------------*',0dh,0ah
db '* Choice(1--4) *',0dh,0ah
db '********************************************',0dh,0ah,'$'
pathname db 'D:\IBM PC.TXT',00
handle dw ?
buffer1 db 60,0,60 dup(?)
buffer2 db 60,0,60 dup(?)
huanhang db '',0dh,0ah,'$'
chose db 0dh,0ah,'Please enter the digital from 1-4!',0dh,0ah,'$'
entery db 0dh,0ah,'Enter what you want to write to the file!(The length of the strings is under 60)',0dh,0ah,'$'
str_ok1 db 0dh,0ah,'Create file successfully!',0dh,0ah,'$'
str_ok2 db 0dh,0ah,'Wtite to file successfully!',0dh,0ah,'$'
str_ok3 db 0dh,0ah,'Read from file successfully!',0dh,0ah,'$'
str_error1 db 'Create file error!$'
str_error2 db 'Open file error!$'
str_error3 db 'Write to file error!$'
str_error4 db 'Read file error!$'
str_error5 db 'Exit from file error!$'
data ends
code segment
assume cs:code,ds:data
main proc far
start:
mov ax,data
mov ds,ax
mov ax,0600h
call me
call choice
ret
main endp
me proc near
mov ah,9
lea dx,menu
int 21h
me endp
choice proc near
mov ah,1
int 21h
cmp al,31h
je next1
cmp al,32h
je next2
cmp al,33h
je next3
cmp al,34h
je next4
jmp back
next1:
call creath
next2:
call entry
next3:
mov ah,9
lea dx,huanhang
int 21h
call read
next4:
mov ax,4c00h
int 21h
back:
mov ah,9
lea dx,chose
int 21h
call me
ret
choice endp
creath proc near
mov ah,3ch
lea dx,pathname
mov cx,0
int 21h
jc error1
mov handle,ax
jmp exit
error1:
mov ah,9
lea dx,str_error1
int 21h
jmp exit1
exit:
mov ah,9
lea dx,str_ok1
int 21h
exit1:
call choice
creath endp
entry proc near
mov ah,9
lea dx,entery
int 21h
lea dx,buffer1
mov ah,0ah
int 21h
sub ch,ch
mov cl,buffer1+1
add dx,2
call writh
ret
entry endp
writh proc near
mov ah,3dh
lea dx,pathname
mov al,1
int 21h
jc error2
mov handle,ax
mov ah,40h
lea dx,buffer1+2
mov bx,handle
mov cx,60
int 21h
jc error3
mov ah,3eh
mov bx,handle
int 21h
jc error4
jmp back1
error2:
mov ah,9
lea dx,str_error2
int 21h
jmp exit2
error3:
mov ah,9
lea dx,str_error4
int 21h
jmp exit2
error4:
mov ah,9
lea dx,str_error5
int 21h
jmp exit2
back1:
mov ah,9
lea dx,str_ok2
int 21h
exit2:
call choice
writh endp
read proc near
mov ah,3dh
lea dx,pathname
mov al,0
int 21h
jc error5
mov handle,ax
mov ah,3fh
lea dx,buffer2
mov bx,handle
mov cx,60
int 21h
jc error6
mov ah,9
lea dx,buffer2
int 21h
jc error6
mov ah,3eh
mov bx,handle
int 21h
jc error7
jmp back2
error5:
mov ah,9
lea dx,str_error2
int 21h
jmp exit3
error6:
mov ah,9
lea dx,str_error4
int 21h
jmp exit3
error7:
mov ah,9
lea dx,str_error5
int 21h
jmp exit3
back2:
mov ah,9
lea dx,str_ok3
int 21h
exit3:
call choice
read endp
code ends
end start
end main