ImageVerifierCode 换一换
格式:DOCX , 页数:14 ,大小:122.41KB ,
资源ID:7478522      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7478522.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(北邮微原作业中断实验与编程分析.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

北邮微原作业中断实验与编程分析.docx

1、北邮微原作业中断实验与编程分析微原第二次软件实验一、 实验要求编写一程序,在显示器上显示时、分、秒。具体要求如下:1) 借用计数器8253的Timer()作为中断源,通过8259A向CPU发中断,每10ms产生一次中断;2) 在中断服务程序中管理刷新时、分、秒;3) 输入文件名后清屏显示:Current time is : XX:XX:XX(时、分、秒键盘输入);4) 当键入CTRL+C时,停止计时,返回系统,且系统正常运行不死机。二、 设计思路1) 数据段定义四个字符串,分别用于显示程序功能、提示用户输入,显示当前时间以及错误格式输入提示。同时定义六个变量用于存储当前显示的的时、分、秒的十位

2、及个位,一个变量count100用以中断计数;2) 在BIOS功能调用中,令AH=6,设置窗口左上角、右下角行列位置使当前页上滚,从而实现程序一开始的清屏功能;3) 提示用户输入起始时间时,需要对输入格式进行判断,严格要求输入在00:00:00至23:59:59,正确输入时则存入相应的变量中,输入任意键开始计时,错误时则屏幕显示输入错误,提示用户重新进行输入,若输入为“CTRL+C”时退出程序;4) 利用8253作为中断源,输入控制字36H,时间常数为11932,使其选用通道0计数,产生频率100Hz的方波,即中断100次时间间隔为1s,时间刷新显示;5) 8253中断源每中断一次,进入tim

3、er中断子程序,将其段基地址及段内偏移量存入中断向量表,利用8259向CPU发出中断;6) timer子程序会对中断次数进行判断,每中断满100次时根据当前时间进行相应的时、分、秒修改,若不满100次时直接退出中断;7) 屏幕显示时将时、分、秒的十位和个位分别送人al中,在BIOS功能调用中令ah=14h,实现将al中的字符写到光标位置,并将光标进一,8次循环直到时钟完全显示,同时比对second,中断满100次时,即时间间隔1s时second变化,当检测到这一变化时重新进入disp刷新显示;8) 在每秒变化需要刷新显示时,都先进行键盘输入判断,当有输入且输入为“ctrl+c”时,退出程序。三

4、、 程序流程1) 主要程序流程图2) 中断程序流程图四、 源代码data segment count100 db 100 tenhour db 0 hour db 0,: tenmin db 0 minute db 0,: tensec db 0 second db 0 s1 db (00:00:0023:59:59 Ctrl+C to exit key to start)$ s4 db Starting time is:$ s2 db (Ctrl+C to exit)Current time is:$ s3 db Error!,0dh,0ah,$ data ends stack segmen

5、t stack db 256 dup(0) stack ends;回车换行宏定义 CRLF MACRO mov ah,02h mov dl,0dh int 21h mov dl,0ah int 21h ENDM code segment assume ds:data,cs:code,ss:stack start:mov ax,data mov ds,ax mov es,ax ;清屏 mov al,0 ;整个窗口为空白 mov ch,0 ;窗口左上角的行位置 mov cl,0 ;窗口左上角的列位置 mov dh,24 ;窗口右下角的行位置 mov dl,79 ;窗口右下角的列位置 mov bh,

6、7 ;正常显示属性 mov ah,6 ;当前显示页上滚功能调用号 int 10h ;I/O中断调用begin: mov dx,offset s1 mov ah,09h ;程序提示 int 21h CRLF mov dx,offset s4 mov ah,09h ;提示输入 int 21h mov bp,0 ;分输入正确后加一,跳转为秒输入判断 mov di,offset tenhour mov ah,01h int 21h cmp al,03h jnz goon1 ;读取第一位,不为ctrl+c则继续键入 mov ah,4ch int 21h goon1: mov bl,0 ;第一位为0到2

7、cmp al,bl jl tiaoban mov bl,2 cmp al,bl jg tiaoban mov di,al ;存入tenhour mov bh,al inc di mov ah,01h int 21h cmp al,03h jnz goon2 ;读取第二位,不为ctrl+c则继续键入 mov ah,4ch int 21h goon2: cmp bh,2 ;如果第一位为2,则第二位为0到3 je tenhour2 mov bl,0 ;第二位为0到9 cmp al,bl jl tiaoban mov bl,9 cmp al,bl jg error mov di,al ;存入hour

8、jmp nextchar tiaoban: jmp error ;用于跳转tenhour2: mov bl,0 cmp al,bl jl error mov bl,3 cmp al,bl jg error mov di,al nextchar: inc di mov ah,01h int 21h cmp al,03h jnz goon3 ;读取第三位,不为ctrl+c则继续键入 mov ah,4ch int 21h goon3: mov bl,: ;第三位为: cmp al,bl jne error inc di mov ah,01h int 21h cmp al,03h jnz goon4

9、;读取第四位,不为ctrl+c则继续键入 mov ah,4ch int 21h goon4: mov bl,0 ;分、秒均为00-59 cmp al,bl jl error mov bl,5 cmp al,bl jg error mov di,al ;存入tenmin或tensec inc di mov ah,01h int 21h cmp al,03h jnz goon5 ;读取第五位,不为ctrl+c则继续键入 mov ah,4ch int 21h goon5: mov bl,0 cmp al,bl jl error mov bl,9 cmp al,bl jg error mov di,a

10、l ;存入minute或second inc bp cmp bp,1 ;bp为1则继续读取秒钟输入 je nextchar signal: mov ah,0bh ;输入任意键开始计时 int 21h or al,al jz signal ;无输入继续检测,有输入才开始 CRLF ;换行回车 jmp init error: mov dx,offset s3 mov ah,09h int 21h ;显示错误提示信息 JMP begin ;重新读取init: cli ;关中断 mov ax,0 mov es,ax ;置附加段基地址为0 mov di,20h ;中断号08h*4 mov ax,offs

11、et timer ;中断程序的段内偏移量 stosw ;偏移量存入中断向量表 mov ax,cs ;中断程序段基地址 stosw ;段基地址存入中断向量表 mov al,36h ;选用0通道计数器,采用3号方式(方波)计数 out 43h,al mov bx,11932 ;时间常数,输出100HZ方波 mov al,bl out 40h,al mov al,bh out 40h,al mov al,0fch out 21h,al ;21h端口为中断屏蔽寄存器,用以开发外部中断 sti ;开中断;屏幕显示当前时间,变化时刷新显示disp: mov ah,0bh int 21h or al,al

12、jz noexit ;系统无输入时不退出 mov ah,08h int 21h cmp al,03h jnz noexit mov ah,4ch int 21hnoexit: mov dx,offset s2 mov ah,09h int 21h mov bx,offset tenhour mov cx,8 dispclk: mov al,bx call dispchar inc bx loop dispclk ;时分秒存入al并显示 mov al,0dh call dispchar mov al,second ;时间变化时秒个位必变化next: cmp al,second je next ;

13、无变化时循环 jmp disp ;有变化时刷新显示 ;中断一百次即为1s,时间相应变化 timer proc far push ax dec count100 jnz timerx mov count100,100 inc second cmp second,9 ;小于等于9,即之前秒个位为0-8 jle timerx ;秒个位0-8,变化后秒个位加1显示即可 mov second,0 ;原个位为9,变化后为0 inc tensec cmp tensec,6 jl timerx ;加1后小于5,即原秒十位为0-4,十位加1即可显示 mov tensec,0 inc minute ;与秒同理 c

14、mp minute,9 jle timerx mov minute,0 inc tenmin cmp tenmin,6 jl timerx mov tenmin,0 inc hour cmp tenhour,2 jl nexth cmp hour,3 jle timerx mov hour,0 mov tenhour,0 jmp timerx nexth: cmp hour,9 jle timerx adjhour: inc tenhour mov hour,0 timerx: mov al,20h out 20h,al pop ax iret ;中断退出 timer endp dispcha

15、r proc push bx mov ah,14 ;写字符到光标位置,光标位置加1 int 10h pop bx ret dispchar endp code ends end start五、 子程序清单1) 子程序名:timer;功能:判断中断计数是否满100次,若已满对时间做出相应的修改;入口参数:无;出口参数:无;使用寄存器:AX,FR。2) 子程序名:dispchar;功能:写入相应字符至光标位置,并将光标前进一位;入口参数:al,用以存储待写入的字符;出口参数:无;使用寄存器:AX,BX。六、 程序分析1) 本程序一开始利用INT 10H进入BIOS功能调用,通过当前页上滚实现清屏功

16、能,采用用户键入得到现行时钟起始值,利用INT 21H读取用户键盘输入,等待用户正确输入后开始计时;2) 利用8253作为中断源,43H端口是8253三通道定时器中的命令寄存器,所使用的命令字36H表示选用0通道定时器,以3号方式(产生方波)计数。向端口40H送出的计数器初值选用11932是要求8253每秒发出100次时钟中端(08H),将本程序中的timer的起始地址送入中断的入口地址,保证每次发生08H中断时,程序自动进入timer;3) 程序运行的大体过程为:主程序显示时钟值,发生中断08H时进入timer,查看中断计数是否达到100次,若没有达到次数直接退出中断返回主程序;若已达到,则

17、时间又过了1s,对个数据进行修改后返回主程序;4) 本程序的时钟显示范围是00:00:00至23:59:59,因而在计时至23:59:59时,下一秒将时间修改为00:00:00,针对不同的时间改变过程,程序中做了对应的修改,已保证时钟显示无误,在输入过程及刷新显示时对键盘输入进行检测,当输入“CTRL+C”时退出程序。七、 执行结果1) 初始清屏,提示用户输入正确时间:2) 输入错误时提示错误输入:3) 正确输入时开始计时:4) 输入“ctrl+c”时退出程序:八、 实验总结通过本次实验,初步掌握了中断的应用,在编写过程中,出现逐位判断异常,跳转超出范围,中断程序写入异常的问题,通过查阅书本及翻阅相关资料,解决了上述问题。本次实验与之前实验相比难度有所提升,完成程序的过程中对各中断号的应用更为熟练,汇编语言的编写能力逐步提升。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1