星座查询系统.doc_第1页
星座查询系统.doc_第2页
星座查询系统.doc_第3页
星座查询系统.doc_第4页
星座查询系统.doc_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

汇编语言程序设计课程设计题目:星座查询系统专业: 计算机 学号: 姓名:2008-2009学年第一学期一设计目的汇编语言课程设计是对所学课程内容全面、系统的总结、巩固和提高的一项课程实践活动。根据汇编语言的特点,选择相应的题目,在老师的指导下,由学生独立完成。课程设计要求同学们熟悉汇编语言的编程,BIOS中断调用、系统功能调用、磁盘数据的查询、存取等相关知识。通过课程设计,一方面提高运用汇编语言编程解决实际问题的能力,另一方面使同学们更深入的了解计算机系统内部的有关知识,为以后的学习和系统开发奠定良好的基础。二设计内容通过输入姓名,月份日期 输出相应的星座。如输入:04-19,输出:Aries。输入Q 结束退出。同时把刚才的查询结果保存在quary.txt文档中。三程序设计原理星座查询系统所涉及到的功能:建立文件,输入名字,输入生日,查询星座,将名字、生日、星座写入文件,关闭文件星座查询系统所涉及到的问题:如何建立文件,如何写入文件,如何将键盘输入的数值显示出来,如何执行ASCII码与各进制数之间的转换,如何判断输入的生日是否合法如何通过生日来判断星座,如何关闭文件等等针对系统所需要的功能做如下的设计步骤:1、 调用scren、curs进行初始化界面以及置光标的位置,利用功能调用在窗口界面显示Welcome to the programe of Horoscope!,再次利用显示功能调用显示Please input the name:2、 调用creath子程序,在pathnam所保存的路径里建立对应的文件,并把文件代号赋给handle。若建立不成功,则显示* * * open error * * *。返回主程序中,判断文件建立是否成功,若不成功,则退出系统。3、 调用proch子程序,让用户输入姓名,并调用writh子程序把姓名写入到quary.txt文件当中。若写入文件未成功,则显示* * * write error * * *,返回主程序4、 利用功能调用显示Please input the birthday of month:,调用input子程序,让用户从键盘键入数值,并数值转变为二进制数保存到bx中。继续显示Please input the birthday of day:,再次调用input子程序,让用户键入数值,并吧数值转变为二进制数保存到dx中5、 调用correct子程序进行判断用户输入的生日是否合法,如果不合法则会显示The birthday you input is worng!Please input again!并让用户再次输入生日,直至输入的生日是合法的为止,才继续往下执行。6、 调用output1、output2子程序,将存放月份的寄存器bx与存放天数的寄存器dx中的二进制数转变为ASCII码后,顺序存放到figure的存储单元中7、 调用print子程序将生日写入quary.txt文件中。8、 调用search子程序,利用bx,dx所存放的月份与天数来判断是哪个星座,然后将其写入quary.txt文件中并显示在屏幕上 9、 接着,屏幕上会提示用户是否要继续,如果不要的话,按下键盘上的“Q”键,即可退出。若要继续的话,则按下其他任意键,程序就会跳到步骤3中循环往下执行下去,直至用户选择退出程序为止。四程序流程图程序初始化界面 创建失败 创建文件 创 建 成 功 用户输入姓名 用户输入月份用户输入天数 判断生日是否 不合法 合法 合 法生日写入文件中判断星座将星座显示并写入文件 否 用户 是退出程序 选择是否继续五源程序子程序块write macro point,num 宏调用,利用point来确定所要读取星座的相对位置,用num来确定所要读入文件的星座的长度main proc far 主程序,用来实现整个程序的运行过程,以实现星座查询的功能creath proc near 在相应的路径建立quary.txt文件proch proc near 让用户输入的姓名并进行相应的操作:写入、判断是否要卷屏scrl proc near 卷屏操作,若要则进行卷屏,否则不进行卷屏操作writh proc near 将用户输入的姓名写入quary.txt文件中clseh proc near 关闭quary.txt文件scren proc near 初始化屏幕curs proc near 初始化光标的位置errm proc near 文件操作错误时进行的相应处理input proc near 将用户从键盘敲入的数字ASCII码转变为二进制数 correct proc near 判断用户输入的生日的日期是否合法,不合法则让用户再次输入生日的日期output1 proc near 将二进制数转化为ASCII码保存在figure0,figure1中output2 proc near 将二进制数转化为ASCII码保存在figure2,figure3中print proc near 将合法的生日写入到quary.txt文件中search proc near 根据生日判断是哪个星座,并将星座显示在屏幕上,同时将其写入quary.txt文件中源代码:title search horoscopedata segmenttopic db Welcome to the programe of Horoscope!$mess1 db 13,10,Please input the name:$mess2 db 13,10,Please input the birthday of month:$mess3 db 13,10,Please input the birthday of day:$mess4 db 13,10,The birthday you input is worng!Please input again!$mess5 db 13,10,The horoscope is:$mess6 db 13,10,If you want to exit,enter q.else enter others:$mess7 db 7 dup( ) ;blankfigure db 4 dup(?)sign db - right db 1 ;set birthday right=1mojie db Capricorn$shuiping db Aquarius$shuangyu db Pisces$muyang db Aries$jinniu db Taurus$shuangzi db Gemini$juxie db Cancer$shizi db Leo$chunv db Virgo$tianping db Libra$tianxie db Scorpio$sheshou db Sagittarius$namepar label byte ;name parameter listmaxlen db 30namelen db ?namerec db 30 dup( ),0dh,0ah ;entered nameclrf db 13,10,$ ;clrferrcde db 0 ;define not errorhandle dw ? ;file codepathnam db e:quary.txt,0prompt db Please input the name:row db 01opnmsg db * * * open error * * *,0dh,0ah,$wrtmsg db * * * write error * * *,0dh,0ah,$data endscode segment ;-;display horoscopewrite macro point,num ;point:relative address lea dx,mojiepoint ;num:the length of horoscope mov ah,9 int 21h mov ah,40h ;request write mov bx,handle mov cx,num lea dx,mojiepoint ;write horoscope int 21h mov ah,40h ;request write mov bx,handle mov cx,2 lea dx,clrf ;write CR/LF int 21h endm ;-main proc farassume cs:code,ds:data,es:databegin: mov ax,data mov ds,ax ;initialize DS mov es,ax mov ax,0600h mov ax,data mov ds,ax lea dx,topic ;print topic mov ah,09 int 21h lea dx,mess1 ;print to input a name mov ah,09 int 21h call scren ;clear screen call curs ;set cursor call creath ;creath file cmp errcde,0 ;create error? jz contin ;yes,contine jmp back ;no,exitcontin: call prochagain: lea dx,mess2 ;ask to input birthday of month mov ah,9 int 21h call input ; input number to Decimal mov bx,dx ;month to bx lea dx,mess3 ;ask to input birthday of day mov ah,9 int 21h call input mov cx,dx ;day to cx call correct cmp right,1 jne again lea dx,mess5 ;display horoscope mov ah,9 int 21h mov dx,cx ;day to dx call output1 ;(month)Binary to ASCII in figure to decimal on quary.txt call output2 ;(day)Binary to ASCII in figure to decimal on quary.txt call print ;write birday to quary.txt call search ;search the horoscope lea dx,mess6 ;exit or not? mov ah,9 int 21h mov ah,1 int 21h cmp al,q je back ;exit lea dx,clrf ;CR/LF mov ah,9 int 21h jmp continback: call clseh ;close quary.txt mov ax,4c00h ;return DOS int 21hmain endp;-;create disk filecreath proc near mov ah,3ch ;request create mov cx,0 ;normal attribute lea dx,pathnam int 21h jc a1 ;error? mov handle,ax ;no,save handle reta1: lea dx,opnmsg ;error message call errm retcreath endp;-;accept inputproch proc near mov ah,40h ;request display mov bx,01 ;01=ouput device mov cx,22 ;length of prompt lea dx,prompt ;display prompt int 21h mov ah,0ah ;request input lea dx,namepar ;accept name int 21h cmp namelen,0 ;is there a name? jne b1 ;yes ret ;nob1: mov al,20h ;blank for storing sub ch,ch mov cl,namelen ;length lea di,namerec add di,cx ;address+length neg cx ;calculate remaining add cx,30 ;length cld rep stosb ;set to blank call writh ;write disk record call scrl ;check for scroll retproch endp;-;check for scrollscrl proc near cmp row,18h ;bottom of screen? jae c1 ;yes,bypass mov ah,09 ;no,to next row lea dx,clrf int 21h inc row ;no,add to row retc1: mov ax,0601h ;scroll one row call scren call curs ;reset cursor retscrl endp;-;write disk recordwrith proc near mov ah,40h ;request write mov bx,handle mov cx,22 ;for name and CR/LF lea dx,namerec int 21h jnc d1 ;valid write lea dx,wrtmsg ;no call errm ;call error routined1: retwrith endp;-;close disk fileclseh proc near mov namerec,1ah ;set EOF mark call writh mov ah,3eh ;request close mov bx,handle int 21h retclseh endp;-;scroll screenscren proc near mov bh,1eh ;set yellow on blue mov cx,0 mov dx,184fh int 10h retscren endp;-;set cursorcurs proc near mov ah,02 mov bh,0 mov dh,row ;set cursor mov dl,0 int 10h retcurs endp;-;disk error routineerrm proc near mov ah,40h mov bx,01 ;handle mov cx,21 ;length int 21h mov errcde,01 ;set error code reterrm endp;-;convert Decimal on keyboard to Binaryinput proc near mov dx,0o: mov ah,1 ;keyboard input int 21h cmp al,0dh je exit sub al,30h ;ASCII to binary jb exit ;0 cmp al,9h jnbe exit mov ah,0 mov cx,ax mov ax,dx cwd ;byte in AL to word in AX mov di,10d mul di add ax,cx mov dx,ax jmpoexit:retinput endp;-;birthday right or wrong?correct proc near cmp bx,0 ;month range from 1-12 jle a ;month12 cmp dx,0 jle a ;day=0 j: cmp bx,1 ;month?=1 je j1 cmp bx,2 ;month?=2 je j9 cmp bx,3 ;month?=3 je j1 cmp bx,4 ;month?=4 je j0 cmp bx,5 ;month?=5 je j1 cmp bx,6 ;month?=6 je j0 cmp bx,7 ;month?=7 je j1 cmp bx,8 ;month?=8 je j1 cmp bx,9 ;month?=9 je j0 cmp bx,10 ;month?=10 je j1 cmp bx,11 ;month?11 je j0 cmp bx,12 ;month?12 je j1j0: cmp dx,30 ;day range from 1-30 jg a jmp bj1: cmp dx,31 ;day range from 1-31 jg a jmp b j9: cmp dx,29 ;day range from 2-29 jg a jmp ba: lea dx,mess4 mov ah,09 int 21h mov right,0 ;set right=0 retb: mov right,1 retcorrect endp;-;(month)Binary to ASCII in figure to decimal on quary.txtoutput1 proc near push ax push dx push cx mov ax,bx push bx mov si,0mov dx,0mov di,10ddiv diadd bx,ax ;quotientmov cx,dx ;remainder cmp bx,0je o1mov dl,aladd dl,30h ;to ASCIImov figuresi,dl ;first figurejmp o2o1: mov figuresi,0o2: inc simov ax,cxmov dx,0mov di,1ddiv dimov cx,dx mov dl,aladd dl,30h ;to ASCIImov figuresi,dl ;second figurepop bxpop dxpop cxpop axretoutput1 endp;-;(day)Binary to ASCII in figure to decimal on quary.txtoutput2 proc near push ax push bx push cx mov ax,dx push dx inc simov dx,0mov di,10ddiv diadd bx,ax ;quotient mov cx,dx ;remaindercmp bx,0je o3mov dl,aladd dl,30h ;to ASCIImov figuresi,dl ;third figurejmp o4o3: mov figuresi,0o4: inc simov ax,cxmov dx,0mov di,1ddiv dimov cx,dxmov dl,aladd dl,30h ;to ASCIImov figuresi,dl ;forth figurepop dxpop cx pop bxpop axretoutput2 endp;-;write disk birthdayprint proc near push ax push bx push cx push dx mov ah,40h mov bx,handle mov cx,2 lea dx,figure ;write month int 21h mov ah,40h mov bx,handle mov cx,1 lea dx,sign ;write - int 21h mov ah,40h mov bx,handle mov cx,2 lea dx,figure+2 ;write day int 21h mov ah,40h mov bx,handle mov cx,7 lea dx,mess7 ;write CR/LF int 21h pop dx pop cx pop bx pop ax retprint endp;-;search the horoscopesearch proc near cmp bx,1 ;month?=1 je s1 cmp bx,2 ;month?=2 je s2 cmp bx,3 ;month?=3 je s3 cmp bx,4 ;month?=4 je s4 cmp bx,5 ;month?=5 je s5 cmp bx,6 ;month?=6 je s6 cmp bx,7 ;month?=7 je s7 cmp bx,8 ;month?=8 je s8 cmp bx,9 ;month?=9 je s9 cmp bx,10 ;month?=10 je s10 cmp bx,11 ;month?=11 je s11 cmp dx,21 ;month=12 jle z12 jmp z1s1: cmp dx,19 ;compare the boudary of horoscope jle z1 jmp z2s2: cmp dx,18 jle z2 jmp z3s3: cmp dx,20 jle z3 jmp z4s4: cmp dx,20 jle z4 jmp z5s5: cmp dx,20 jle z5 jmp z6s6: cmp dx,21 jle z6 jmp z7s7: cmp dx,22 jle z7 jmp z8s8: cmp dx,22 jle z8 jmp z9s9: cmp dx,22 jle z9 jmp z10s10:cmp dx,22 jle z10 jmp z11s11:cmp dx,21 jle z11 jmp z12z1: write 0,9 ;mojie retz2: write 10,8 ;shuiping retz3: write 19,6 ;shuangyu retz4: write 26,5 ;muyang retz5: write 32,6 ;jinniu retz6: write 39,6 ;shuangzi retz7: write 46,6 ;juxie retz8: write 53,3 ;shizi retz9: write 57,5 ;chunv retz10:write 63,5 ;tianping retz11:write 69,7 ;tianxie retz12:write 77,11 ;sheshou retsearch endp code ends end begin六调试过程1、先建立asm文件2、运行程序后的初始界面3、用户输入“zhangpeng”的姓名之后,按下回车键后4、输入“2”月份之后,按下回车键后5、输入不合法的天数“30”,按回车键后6、重新输入生日(月份不合法),按回车键后7、重新输入生日(但月份与天数均不合法),按下回车键后8、输入正确的生日后,按下回车键,程序提示用户是要退出还是要继续9、按下回车键后,程序显示如下10、多次输入多个信息进行查询星座11、按下键盘上的“Q”键之后,便会结束程序12、在E:目录下可以看到刚建立的QUARY.TXT文件13、打开QUARY.TXT文件之后,可以看到文本里的信息,即刚刚运行2007957005.exe,输入相应信息查询星座的结果七遇到的问题及解决方法1.问题:在显示标题(lea dx,title)的时候,提示:title没有定义 原因:title是一个伪操作

温馨提示

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

评论

0/150

提交评论