汇编语言课程设计显示系统当前时间与日期_第1页
汇编语言课程设计显示系统当前时间与日期_第2页
汇编语言课程设计显示系统当前时间与日期_第3页
汇编语言课程设计显示系统当前时间与日期_第4页
汇编语言课程设计显示系统当前时间与日期_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

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

文档简介

1、华 北 科 技 学 院课程设计说明书课程名称: 汇编语言 班级: 计算机b08-1 姓名: _邵璐婷 _ 学号:_ 200807014109 设计题目: 显示系统当前时间与日期 _ 设计时间: 20090621 至 20090702 指导教师: _ 孟广学 _ _ 评 语:_评阅成绩: 评阅教师:_一、课程设计目的进行程序设计方法和技能的基本训练,巩固在课堂上学到的有关程序设计的基本知识和基本方法,通过实际动手能力的培养,进一步熟悉汇编语言的结构和使用方法,达到能独立阅读、编制和调试一定规模的汇编语言程序的水平。二、课程设计要求 1要求编写并调试通过一个小型软件,实现对软件或硬件的操作。2遵循

2、模块化、结构化的程序设计方法。3.要求程序必须正确。4.程序简明易懂,多运用输入输出提示,出错信息及必要的注释。5.要求程序结构合理,语句使用得当。6.适当追求编程技巧和程序运行效率。三、课程设计题目:题目:显示系统当前时间与日期要求设计界面提示信息为:“please input date(d) or time(t)or quit(q):”,从键盘键入“d”,可显示系统日期。从键盘输入“t”,可显示系统时间。从键盘输入“q”,退出程序。利用dos的系统功能调用的2ah和2ch功能调用,读取系统日期和时间。将日期和时间转换为相应的ascii码字符,显示在屏幕上。四、课题分析 这个题目是显示系统当

3、前时间与日期,这就需要用dos的2a号功能-取系统日期和2c号功能-取系统时间,以及bios的06号功能-清屏或上卷,02号功能-制光标位置。此题目主要是将时间,日期转换为相应的ascii码,并显示出来。五、流程图:开始设置显示方式为80×25彩色文本方显示界面提示信息从键盘输入单个字符al=d?显示系统日期al=t?显示系统时间返回操作系统al=q?结束n 111f vb11n 111f vb11n 111f vb11y 111f vb11y 111f vb11y 111f vb11六、程序源代码:clear_screen macro op1,op2,op3,op4 ;1宏定义,设

4、置七个参数mov ah,06h ;2 ah=06屏幕初始化或上卷指定的行mov al,00h ;3 清屏mov bh,79h ;4 卷入行属性mov ch,op1 ;5 左上角行号mov cl,op2 ;6 左上角列号mov dh,op3 ;7 右上角行号mov dl,op4 ;8 右上角列号int 10h ;9 调用bios功能 【见43行】 mov ah,02h ;10 制定光标位置mov bh,00h ;11 第0页mov dh,00h ;12 第0行mov dl,00h ;13 第0列int 10h ;14endm ;15stack segment ;16定义堆栈段db 200 dup

5、(0) ;17stack ends ;18data segment ;19 定义数据段welcome db 'welcome you to come here!$' ;20 提示界面inf01 db 0dh,0ah,'this is a display progame!$' ;21inf02 db 0dh,0ah,'d:display system date;$' ;22inf03 db 0dh,0ah,'t:display system time;$' ;23inf04 db 0dh,0ah,'q:quit.',

6、0dh,0ah,'$' ;24inf05 db 0dh,0ah,'please input the char:$' ;25inputer db 0dh,0ah,'input error!',0dh,0ah,'$' ;26datedis db ' 00 - 00 - 0000',0ah,'$' ;27 显示datetimedis db ' 00 ',3ah,' 00 ',3ah,' 00 ',0ah,'$' ;28 显示time 【3a冒

7、号 0a换行 od回车】data ends ;29code segment ;30 代码段assume cs:code,ds:data,ss:stack ;31start: ;32main proc far ;33 mov ah,00h ;34 ah=0设置显示模式mov al,03h ;35 设置80*25图形显示int 10h ;36clear_screen 00h,00h,19h,50h ;37 调用宏定义mov ax,data ;38mov ds,ax ;39mov ax,stack ;40mov ss,ax ;41show macro b ;42-46 显示宏定义lea dx,b ;

8、43mov ah,9 ;44 int 21h ;45endm ;46 show welcome ;47-52 调用宏定义,显示字符串的内容show inf01 ;48show inf02 ;49show inf03 ;50show inf04 ;51show inf05 ;52input: mov ah,01 ;53 键盘输入并回写int 21h ;54 cmp al,44h ;55 与d比较jne l1 ;56 不相等转l1call datedisplay ;57 相等调用日期显示子程序jmp exit1 ;58 继续输入字母l1: cmp al,54h ;59 与t比较jne l2 ;60

9、 不相等转l2call timedisplay ;61 相等调用时间显示子程序jmp exit1 ;62 继续输入字母l2: cmp al,51h ;63 与q比较je exit ;64 相等转exit show inputer ;65 显示输入错误show inf05 ;66 显示输入提示jmp input ;67exit1: show inf05 ;68 显示输入提示jmp input ;69exit: mov ah,4ch ;70 结束int 21h ;71main endp ;72datedisplay proc near ;73 日期显示子程序mov ah,2ah ;74 取当前系统

10、日期int 21h ;75mov ax,cx ;76 送年份入ax作为被除数 【年份存在cx中】mov bx,10 ;77 (bx)=10lea si,datedis + 14 ;78 使si指向年的最后一位 【从0开始数】mov cx,4 ;79 (cx)=4 年的位数,循环4次push dx ;80 dx入栈,保存月日tab: xor dx, dx ;81 dx清零,存余数div bx ;82 (dx,ax)/bx,商送ax,余数送dxadd dl, 30h ;83 余数与30h相加变为字符的ascii码 mov si, dl ;84 余数送入si所指向的字节区dec si ;85 si减

11、一loop tab ;86 循环4次 【年的ascii码转换】pop dx ;87 dx还原mov al, dl ;88 日送al 【日存在dl中】xor ah, ah ;89 ah清零div bl ;90 ax/bl,商送al,余数送ahadd ax, 3030h ;91 转变为数字字符的ascii码sub si, 4 ;92 使si指向日的第一位mov si, ax ;93 (ax)送si所指向的字节区 mov al, dh ;94 月送al 【月存在dh中】xor ah, ah ;95 ah清零div bl ;96 ax/bl, 商送al,余数送ahadd ax, 3030h ;97 转

12、变为数字字符的ascii码sub si, 5 ;98 使si指向月的第一位mov si, ax ;99 (ax)送si所指向的字节区show datedis ;100 显示日期ret datedisplay endp ;101 调用后返回 timedisplay proc near ;102 时间显示子程序mov ah,2ch ;103int 21h ;104mov bx,10 ;105lea di,timedis ;106mov al,ch ;107 ch存时xor ah,ah ;108div bl ;109add ax,3030h ;110mov di+1,ax ;111mov al,cl

13、 ;112 cl存分xor ah,ah ;113div bl ;114add ax,3030h ;115mov di+6,ax ;116 mov al,dh ;117 dh存秒xor ah,ah ;118div bl ;119add ax,3030h ;120mov di+11,ax ;121show timedis ;122ret timedisplay endp ;123 时间调用返回code ends ;124end start ;125七、结果显示八、感想、收获及体会刚开始拿到这个程序的时候,首先想到应该是从键盘输入的这个字符跟大写字母t,d,q分别比较,如果和哪个字母的ascii码相

14、等,就调用与此字母相应的子程序,显示日期,时间或者直接退出。在程序的开始,就已经先定义了清屏上卷宏定义,制定了光标位置。考虑到程序中多次要显示字符串,所以将显示字符串也作为一个宏定义,避免了代码冗长,程序罗嗦,不清晰的麻烦。而在整个程序中,我们只有两个子程序,日期显示子程序和时间显示子程序。在编写日期显示子程序时,先取cx中存的系统当前日期,存在ax中,作为被除数,除以10,给各位加上30h,变为它的ascii码。使存日月的dx入栈,以保护日月。指针指向datedis字符串的最后一位,即年的最后一位,循环4次,将年的ascii码依次放入字符串 datedis ' 00-00-0000&

15、#39; 的0000位,随后dx出栈还原。取dl中存的日,放入al中,将高位ah清零,ax作为被除数,重复转换ascii码的步骤,指针减4,指向字符串 datedis ' 00 - 00 - 0000'的日的第一位,将转换后的日的ascii码放进00位。接着取dh中的月,重复日的步骤,直到将月放进字符串。然后调用显示宏定义,将转换后的日期显示出来。在显示月的子程序中,在ax除以bl之后,即执行div bl,其商送al,余数送ah,如6月存放与dh中,除以bl之后,商为0,余数为6。分别存放在al和ah之中,加上3030h之后,ax中的内容为3630h。由于定义datedis为字节型,故存放时30h存放在低字节,36h存放在高位字节,显示时,0字符在第一个显示,6字符在第二个显示,才会显示06。所以,si指针应指向第一个0,即第一个字节空间。同理,显示日和时间的时候也需要注意出现这种情况。在显示完日期,时间后,若要退出系统,则只能按q退出,按其他键不起用。做这个程序的过程中,我加深了对某些指令的理解,如push,pop,jmp指令。本次实验,我觉得最大的收获便是慢慢学会了独立思考问题及解决问题,并且最终将自己的想法通过程序代码来

温馨提示

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

评论

0/150

提交评论