版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 汇编语言课程设计报告课程名称: 汇编语言课程设计 设计题目: 显示系统时间 院 系: 计算机科学与技术学院班 级: 计专10703 设 计 者: 学 号: 200700172 序 号: 33 指导教师: 设计时间: 2009.06.08-2009.06.19目录1. 课程设计题目2. 课程设计内容3. 设计目的4. 设计图形5. 源代码6. 运行界面7. 感想体会一, 课程设计目的。 1.掌握中断的使用方法。2.掌握bios系统功能调用。3.掌握基本的显存读写技术。 4.学会用汇编语言编写一个较完整的实用程序, 培养自己的动手操作能力。5. 学习程序设计的基本思路和方法,编程、调试、撰写报告
2、等。二、程序内容: 第一部分:定义显示界面。 第二部分:调用系统时间,并将调用的用二进制表示的时间数转换成ascii码,并将时间数存入显存区。(显存的起始地址:b8000h) 第三部分:将存在系统内存区的时间用字符串的形式显示出来。 第四部分:定时响铃功能,指定时间和倒计时。响铃为一首自写音乐。注意:1、如果用图形方式显示更好,2、注意设置显示时候的背景颜色3、可以增加键盘设置的功能,设置显示颜色,显示位置4、闹铃如果不关闭,可以设置为间隔1分钟再响三、程序设计原理 首先在数据段开辟一显示缓冲区,用来存储系统时间。调用bios中断,返回系统时间,并将来返回的二进制时间转换成ascii码,方便时
3、间显示时的调用。分别将来小时数、分钟数、秒数存入显示缓冲区。通过写显存将时间显示出来。由于获取了的系统时间不会自动刷新,所以我们要设计成刷新的方式来不断获取系统的时间,这样就形成了会跳动的电子钟了。定时功能主要指定一个报警时间作为比较,到了需要响铃时间调用一个音乐程序表示时间到。四、程序流程图 开 始获取原中断类型1ch 保存原中断类型 设置新的中断类型 执行中断处理程序 结束 保护现场 中断返回 读取系统时间 保存原中断类型分别将时间的bcd码转换为字符在指定位置写显存以显示时间 恢复现场 图一 主程序流程图 图二 中断处理程序流程图 开始播放音乐输入#输入1-7间隔1分钟停止闹铃开关是否关
4、开始闹铃a=b取系统时间a设置闹铃时间b结束五、程序代码eraserscreen macro ab ;清除过时显示的时间 push ax push cx push bx mov bx ,cloaddre ;当前地址 sub bx,ab ;得按键前地址 mov ax,0b800h mov es,ax mov di,bx lea si,blank call disptime pop bx pop cx pop ax endmclearscreen macro clor ;相当于清屏 ,指定颜色 push cx push si push di mov cx,1 lea si, blank write
5、char 0,0,clor,2000 pop di pop si pop cx endm writechar macro arra,row,color,cc ;在指定位置写入数据 local lp mov dl,arra ;第几列 lp: mov dh ,row ;第几行 mov ah,02 ;设置位置 mov bh, 0 int 10h mov al,si mov ah,09h mov bl,color ;颜色 push cx mov cx,cc int 10h add si,1 add dl,1 pop cx loop lp endm .model small.stack .data ;
6、-学生个人信息 mess1 db 0dh,0ah,0dh,0ah,0dh,0ah db 9,9,9,-,0dh,0ah ;0dh,0ah是回车换行的意思 db 9,9,9,| students,33, information |,0dh,0ah db 9,9,9,| name: zhangshuguang |,0dh,0ah db 9,9,9,| class: three |,0dh,0ah db 9,9,9,| grade: tow |,0dh,0ah db 9,9,9, | number: 200700172 |,0dh,0ah db 9,9,9,- ,0dh,0ah,$ msg1 db
7、0dh,0ah,9,9,9,press any key to continue.,0dh,0ah,$ ;提示信息 ; - 菜单 mess2 db 0dh,0ah,0dh,0ah,0dh,0ah db 9,9,9,-,0dh,0ah db 9,9,9,| 1- create a music |,0dh,0ah db 9,9,9,| 2- time to ring a bell |,0dh,0ah db 9,9,9,| 3- exit |,0dh,0ah db 9,9,9,- ,0dh,0ah,$ msg2 db 0dh,0ah,9,9,9, press 1 or 2 or 3 ,0dh,0ah,
8、$ ;提示信息 ; - 变量数据 showmusicbook db 0dh,0ah,0dh,0ah,0dh,0ah db 9,9,9 ,press # to conclude,0dh,0ah db 9, the music book is: ,$ showmsg db press q to stop the clock,0dh,0ah db press esc to exit,0dh,0ah db press b to back thr main mu ,$ cloaddre dw 850h msgdown db the last:,?, ,s len equ $-msgdown blank
9、db 25 dup( ),0,0 msgring db ring ok!,10 dup( ) music db 337665654444334555666# initab dw 8e5h,7f4h,6adh,5f1h,54bh,4b7h,472h settime db please set the time to ring,$ timer0 db ?,? timer1 db 0ffh sign db 0 year db ?,?,?,? db / mounth db ?,? db / day db ?,?,0,0 msg db the time is: time0 db ?,? db : tim
10、e1 db ?,? db : time2 db ?,?,0,0 .code.startup ; -程序开始 mov ah,09h lea dx, mess1 int 21h mov ah,09h lea dx, msg1 int 21h mov ah,07h int 21h start0: clearscreen 6fh mov ah,09h lea dx,mess2 int 21h lea dx, msg2 ;显示提示信息 msg2 int 21h lop1: mov ah,08h ;从标准输入设备输入一个字符,在此是用户输入所选菜单 int 21h ;-判断从键盘输入的选项 push ax
11、 cmp al,3 jz c3 pop ax push ax cmp al,1 ; jz (相等的时候跳转) jz c1 ;若等于1,则跳转到c1 pop ax ;否则ax出栈,并与2比较 push ax cmp al,2 jz c2 pop ax jmp lop1 ;否则跳转到lop1,即重新输入一个字符(1/2/3) ;- 此为前面所要跳转的程序 c1: clearscreen 6fh call creatmiusic ;创作铃声 mov byte ptr sign,1 ;闹铃开启 call clock mov byte ptr sign,0 ;闹铃关闭 jmp start0 c2: jm
12、p start1 c3: jmp over;- 设置闹钟闹铃时间 start1: clearscreen 6fh push dx push bx mov dl,10 ;第几列 mov dh ,5 ;设置光标位置 mov ah,02 mov bh, 0 int 10h lea dx, settime mov ah,09h int 21h pop bx pop dx push si push cx lea si,timer0 mov cx ,2 ;-;输入需闹铃时间 input: mov ah,02h mov dl,: ;冒号输出 int 21h mov ah,01h int 21h ;- ;以下
13、为输入有效值的判断,时针在00-23有效,分针在00-59有效 .if cx=2 ;输入时高位 .if al2 pop cx pop si jmp start1 .elseif al5 pop cx pop si jmp start1 .elseif al3 pop cx pop si jmp start1 .elseif al9 pop cx pop si jmp start1 .elseif al9 pop cx pop si jmp start1 .elseif al0 pop cx pop si jmp start1 .else sub al,0 sub bl,0 push cx mo
14、v cl,4 shl bl,cl pop cx add bl,al mov byte ptr si,bl add si,1 .endif .endif dec cx jnz input startcha: push dx push bx mov dl,0 ;第几列 mov dh ,0;设置光标位置 mov ah,02 mov bh, 0 int 10h pop bx pop dx mov dx,offset showmsg mov ah,09h int 21h ; - 读取系统时间 startloop: push cx push dx push es push si push di mov a
15、h,2ah ;获取系统时间,cxyear dhmouth dlday,为十六进制表示 int 21h call translate ;转化寄存器中值为bcd码格式 mov al,ch lea si,year call bcd ;将bcd码转化为可以输出的相应字符 mov al,cl lea si,year2 call bcd mov al,dh lea si,mounth call bcd mov al,dl lea si,day call bcd mov ax,0b800h ;将年月日写入显存 mov es,ax mov di,720h lea si,year call disptime p
16、op di pop si pop es pop dx pop cx mov ax,0200h ;获取系统时间,chhours clminutes dhseconds,均为bcd码格式 int 1ah mov al,ch lea si,time0 call bcd mov al,cl lea si,time1 call bcd mov al,dh lea si,time2 call bcd mov ax,0b800h ;显存地址 采用直接写显存的方法输出字符 mov es,ax ;es:di 指向显存地址 mov di,cloaddre ;变量cloaddre为偏移地址 lea si,msg c
17、all disptime ;显示时间 ; - 判断是否闹铃 mov al,sign ;判断闹铃是否开着sign为1表示没有开着 or al,al jnz to ;若闹铃没关,整分闹铃 mov al,ch xor al,timer00 ;比较时针 jnz disp0 mov al,cl xor al,timer01 ;继续比较分针 jnz downc or dh,dh jnz disp0 mov byte ptr sign,1 ;闹铃开启 call clock ;闹铃 jmp disp0 ; - 判断倒计时 to : mov al,dh cmp al,51h jb to1 sub al,51h
18、call countdown to1: mov al,cl cmp al,timer1 jna to2 ;分针变化则闹 call clock to2: mov byte ptr timer1,cl jmp disp0 downc : mov al,cl ;判断分针,是否可以准备闹铃 add al,1 xor al,timer01 jnz disp0 mov al,dh cmp al,51h ;倒数十秒开始闹铃 jb disp0 sub al,51h call countdown ; - 键盘控制时间显示位置 disp0: mov ah,01h int 16h ;从键盘缓冲区读取扫描码 ;- 是
19、否按了q键 cmp ah,10h jne i0 mov byte ptr sign,0 ;关闭闹铃 call clear jmp startloop ;- 是否按了上方向键 i0: cmp ah,48h jne i1 sub cloaddre,160 call clear eraserscreen 0ff60h ;当前地址减160 jmp intend ;直接结束一次中断,以避免修改其它单元内容 ;- 是否按了左方向键 i1: cmp ah,4bh jne i2 sub cloaddre,2 call clear eraserscreen 0fffeh ;当前地址减2 jmp intend ;
20、-是否按了下方向键 i2: cmp ah,50h jne i3 add cloaddre,160 call clear eraserscreen 160 ;当前地址加160 jmp intend ;- 是否按了右方向键 i3: cmp ah,4dh jne i4 add cloaddre,2 call clear eraserscreen 2 ;当前地址加2 jmp intend ;直接结束一次中断,以避免修改其它单元内容 ; - ;是否按了esc键 i4: cmp ah,01h jne i5 jmp over ; - ;按以下键变化不同种颜色 i5: .if ah=1eh ;按a键变色 cl
21、earscreen 04h call clear jmp startcha .elseif ah=1fh ;按s键变色 clearscreen 1eh call clear jmp startcha .elseif ah=20h ;按d键变色 clearscreen 0e0h call clear jmp startcha .elseif ah=21h clearscreen 23h call clear jmp startcha .elseif ah=22h clearscreen 41h call clear jmp startcha .else jmp i6 .endifi6: cmp
22、ah,30h ; 按b 键 je start0 ;返回主菜单 intend : call clear jmp startloop ; -bcd码转换 bcd: mov ah,al push cx mov cl,4 shr ah,cl pop cx and al,0fh add ax,00 xchg ah,al mov ds:si,ax ret ; -退出 over: mov ax,4c00h int 21h ; - 显示时间子程序 disptime proc disp : mov al,si inc si or al,al jz back cld stosb ;将al传送到es:di inc
23、di jmp disp back: ret disptime endp ; -编写音乐子程序 creatmiusic proc push ax push si push cx push dx mov dx,offset showmusicbook mov ah,09h int 21h lea si,music loop0: mov ah,07h int 21h cmp al,# jne loop1 mov byte ptr si,al jmp finish ; #结束编辑 loop1: .if al7 jmp loop0 .else mov ah,02 mov dl,al int 21h mo
24、v byte ptr si,al inc si .endif jmp loop0 finish: pop dx pop cx pop si pop ax retcreatmiusic endp ; -倒计时子程序countdown proc push cx push dx push si mov ah,al mov al,9 sub al,ah ;用9减当前秒数即得倒计数 add al,0 ;将字符存入指定位置 lea si,msgdown push si add si,len sub si,3 mov byte ptr si,al pop si mov cx,lengthof msgdown
25、 writechar 28,7,0f4h,1 pop si pop dx pop cx retcountdown endp ; -清除键盘缓冲区 clear proc push es push ax push cx push dx push di mov ax,0040h mov es,ax mov ax,es:001ch mov word ptr es:001ah,ax ;队首地址等于队尾地址 mov di,es:001ch mov word ptr es:di,0000h ;清0 pop di pop dx pop cx pop ax pop es ret clear endp ; -发声
26、闹铃子程序 clock proc push ax push bx push cx push dx push si mov cx ,lengthof msgring lea si,msgring writechar 28,7,0f4h,1 mov si,offset music lp1: mov al,si cmp al,# jz done and al,0fh dec al shl al,1 xor ah,ah push si lea si,initab add si,ax ;对映相应音调频率 mov bx,si mov al,01h out 61,al mov al,10110110b ;给定时器2送控制字 out 43h,al ;2号控制寄存器 mov al,bl out 42h,al ;给定时器送计数值低字节 mov al,bh out 42h,al ;给定时器送计数值高字节 in al,61h or al,3 ;开扬声器,低二位全置1 out 61h,al call delay and al,0fch ;关闭扬声器,低二位置为0 out 61h,al pop si add si,1 in al,60h cmp al, 10h jne
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 北京市西城区2022届高三化学统一测试一模试题
- 新患者入院沟通唐莹教授护患沟通护患关系护士培训
- 社会工作基本内涵第二部分社会工作的内涵和实践领域社会工
- 物理因子疗法及康复护理高频电疗
- 音乐照护技术指导-老年康体指导 初 级 -1729733382158
- 《呼吸衰竭的监护》课件
- 妇幼保健院基本医疗保险管理制度
- 《儿童防龋》课件
- 2024安全管理培训
- 中医混合痔护理查房
- 单片机原理与应用说课
- 修辞手法课件(共46张PPT)
- 河道整治工程毕业设计
- SB/T 10482-2008预制肉类食品质量安全要求
- GB/T 20307-2006纳米级长度的扫描电镜测量方法通则
- GB/T 13912-2020金属覆盖层钢铁制件热浸镀锌层技术要求及试验方法
- GB/T 11270.2-2021超硬磨料制品金刚石圆锯片第2部分:烧结锯片
- GB 39552.1-2020太阳镜和太阳镜片第1部分:通用要求
- FZ/T 93015-2010转杯纺纱机
- 2023年考研英语(二)真题
- 病理学-生殖系统疾病课件
评论
0/150
提交评论