数字式秒表汇编程序.doc_第1页
数字式秒表汇编程序.doc_第2页
数字式秒表汇编程序.doc_第3页
数字式秒表汇编程序.doc_第4页
数字式秒表汇编程序.doc_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

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

文档简介

inttype equ 08h;设置中断类型码p8253ctrl equ 43h;8253的控制口p8253cto equ 40h;8253的数据口p8255ctl equ 0e803h;8255的控制口rowport equ 0e801hcolport equ 0e802hsegport equ 0e800h ;段选bitport equ 0e801h ;位选cnto equ 11930 ;用来计算频率.model small .data ;数据段str db 36 dup (?) ;定义一个数组用来存放前八个成绩flag db 0 ;定义标志位mc db 1 ;定义名次num db 1point dw str ;定义指针point2 dw str ;定义指针count db 0 ;用来计时,初始化为0buff db 0,0,0,0 ;初始化数据缓冲区buff2 db 0,0,0,0 ;初始化数据缓冲区bit db 1 ;位码置1mess db 0-开始比赛 1-记录成绩 2-显示成绩 3-退出返回DOS 4-比赛结束 5-暂停计时:,0dh,0ah,$dseg db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h;数据09asctab db 0123456789ABCDEF.code ;代码段.startup ;开始mov ah,9 lea dx,messint 21hmov al,36h;写8253的方式字mov dx,p8253ctrl out dx,almov ax,cnto ;mov dx,p8253cto;写初值out dx,almov al,ahout dx,almov al,81h ;8255初始化mov dx,p8255ctl out dx,almov al,inttype ;DOS调用,读取中断向量mov ah,35h int 21h push es ;将es,bx,ds入栈保护push bxpush dsmov ax,datamov es,axmov dx,offset intp ;取intp的偏移量mov ax,seg intp ;取intp的段地址mov ds,axmov al,inttype ;设置inttpye的新中断向量mov ah,25hint 21hpop ds ;将ds出栈in al,21h ;CPU开中断(开IR0)and al,0fehout 21h,alstiab:call buttoncmp al,3 ;如果为F,则退出jz fpcmp al,1 ;如果为1,且标志位D0位为1,D2为1,则可保存成绩jz mpcmp al,2jz ppcmp al,4 ;比赛结束,即可以重新开始比赛jz apcmp al,5 ;暂停计时jz papcmp al,0jnz abOR flag,05h ;如果按键为B,则置标志位最后一位为1jmp abmp: ;存储的代码test flag,04h ;先判断是否还能存储,不能则跳到ab,否则继续jz abmov al,mc ;将第一位的名次先放到buff,然后一起放入数组mov buff,al lea si,buffmov di,pointmov cx,4cldrep movswcmp mc,8 ;如果名次到了8个,则将标志位置零,然后就不能存储了。jz go3inc mcadd point,4jmp abgo3:and flag,0fahlea bx,strmov point,bxjmp abpp:and flag,0fehcmp num,9 ;判断是否按过8次,是退出,否则继续jz abinc numlea di,buffmov si,point2mov cx,4cldrep movswadd point2,4jmp abap:push bxand flag,0 ;对标志和名次及num都进行初始化,以便比赛重新开始mov mc,1mov num,1lea bx,strmov point,bxmov point2,bxmov buff,0mov buff+1,0mov buff+2,0mov buff+3,0pop bxjmp abpap:and flag,0fehjmp abfp:cli ;关中断pop dx;出栈pop dsmov al,inttype ;设置新的中断向量mov ah,25hint 21h.exit 0;主程序结束intp:push sipush dipush ax push bxpush cxpush dxtest flag,01h ;判断标志位D0是否为1,为1开始,否则不计数jz iexitinc count;次数加1cmp count,10;将count和100比较jnz iexit ;若count不等于100,则转iexitmov count,0;否则count置0inc buff+3 ;秒的地位加1cmp buff+3,10 ;将秒的地位和10相比较jnz iexit ;若秒的地位不等于10,则转iexitinc buff+2 ;否则向秒的高位进1mov buff+3,0;秒的地位置0cmp buff+2,10;秒的高位和6相比jnz iexit ;若不为6,则转iexitinc buff+1 ;否则分的地位加1mov buff+2,0;将秒的高位置0cmp buff+1,6 ;分的地位和10相比jnz iexit;若不等则转iexit;inc buff;否则分的高位加1mov buff+1,0;分的地位置0and flag,0feh;cmp buff,6;分的高位和6比较;jnz iexit;不等则转iexit;mov buff,0;将分的高位和0比较iexit:lea bx,dseg;去数据表的首地址lea si,buff;取缓冲区的首地址agi:mov al,si;将si的内容送给alxlat;将ASCII码转换成数据mov ah,almov dx,bitportmov al,bitout dx ,al cmp al,04h ;判断是否为第二位,是则加上点,否则继续jnz q1and ah,07fhq1:mov al,ahmov dx,segport;取相应的段和位out dx,almov cx,8000h;延时delay:loop delayinc si;缓冲区地址加1shl bit,1;将位加1cmp bit,10h;将bit和10h相比jnz agi;不等于则循环mov bit,1;否则将bit置1mov al,0mov dx,bitportout dx,almov al,20h;将8259偶口中的数据输出out 20h,alpop dxpop cxpop bxpop axpop dipop siiretbutton proc nearnext:mov dx,rowportmov al,0out dx,alinc dxabb:in al,dxand al,0fhcmp al,0fhjz abbmov cx,8000hdelayy:loop delayymov bh,00 ;首行号mov bl,0;列号mov cx,4mov ah,0fehagain:mov al,ahmov dx,rowportout dx,alinc dxin al,dxand al,0fhcmp al,0fhjnz ab1add bh,4shl ah,1loop againjmp nextab1:mov cx,4ab3:shr al,1jc ab2jmp ab4ab2:inc blloop ab3ab4:add bh,blmov al,bhlea bx,as

温馨提示

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

评论

0/150

提交评论