北邮微机原理软件实验 第七章 实验报告.docx
- 文档编号:24223544
- 上传时间:2023-05-25
- 格式:DOCX
- 页数:12
- 大小:368.70KB
北邮微机原理软件实验 第七章 实验报告.docx
《北邮微机原理软件实验 第七章 实验报告.docx》由会员分享,可在线阅读,更多相关《北邮微机原理软件实验 第七章 实验报告.docx(12页珍藏版)》请在冰豆网上搜索。
北邮微机原理软件实验第七章实验报告
微机原理与接口技术
第七章上机编程作业
实验报告
姓名:
曹爽
学号:
2013210640
班级:
2013211124
2016年1月12日
目录
一、实验题目3
二、实验内容3
1.设计思路3
2.流程图3
3.源程序5
4.子程序清单9
5.实验结果图9
三、心得体会10
一、实验题目
编一程序,在显示器上显示时、分、秒。
借用计数器8253的Timer0作为中断源,通过8259A向CPU发中断,每10ms产生一次中断。
在中断服务程序中管理刷新时、分、秒。
要求:
输入文件名(如:
CLK)后清屏后显示:
Currenttimeis:
xx:
xx:
xx(时分秒键盘输入),回车,时、分、秒开始计时。
时钟不停的刷新。
当键入CTRL+C时,停止计时,返回系统,且系统正常运行不死机。
二、实验内容
1.设计思路
程序可以采用命令行参数取得用户键入的现行时钟值。
命令行参数在程序加载后位于程序段前缀(PSP)偏移量82h处。
程序加载时,DS指向PSP段地址,PSP长度为100h,偏移量从0开始。
通过软中断INT16H调用BIOS的键盘输入子程序,等待用户打入回车后开始计时。
主程序不停地显示时钟值,当发生时钟中断08H时,转入timer过程,timer查看中断计数是否达到了100次,如果没有达到则返回主程序;如果已达到,则表示过了一秒钟,对时钟的值进行修改后返回主程序。
2.流程图
实验流程如图1.2.1所示。
图1.2.1实验流程图
3.源程序
DATASEGMENTPARAPUBLIC'DATA'
COUNT100DB100
MESG1DB'Currenttimeis:
$'
MESG2DB'Thetimeiswrong,pleaseinputagian...$'
GETTIMEDB9,'?
'
TENHOURDB0
HOURDB0,':
'
TENMINDB0
MINUTEDB0,':
'
TENSECDB0
SECONDDB0
OLD_OFFDW0
OLD_SEGDW0
DATAENDS
STACKSEGMENTPARASTACK'STACK'
DB256DUP(0)
STACKENDS
CODESEGMENTPARAPUBLIC'CODE'
ASSUMECS:
CODE
ASSUMEDS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVDX,OFFSETMESG1;显示'Currenttimeis:
'
MOVAL,09H
INT21H
MOVDX,OFFSETGETTIME;接受屏幕输入时间
MOVAH,0AH
INT21H
MOVHOUR+1,':
';时分秒之间的分隔符为':
'
MOVMINUTE+1,':
';检测时间输入是否符合要求
CMPSECOND,'0'
JCERRO
CMPSECOND,'9'
JGERRO
CMPTENSEC,'0'
JCERRO
CMPTENSEC,'6'
JNCERRO
CMPMINUTE,'0'
JCERRO
CMPMINUTE,'9'
JGERRO
CMPTENMIN,'0'
JCERRO
CMPTENMIN,'6'
JNCERRO
CMPHOUR,'0'
JCERRO
CMPHOUR,'4'
JNCERRO
CMPTENHOUR,'0'
JCERRO
CMPTENHOUR,'3'
JNCERRO
JMPNEXT1
ERRO:
MOVDX,OFFSETMESG2;输入有错,显示'Thetimeiswrong,pleaseinputagian...'
MOVAH,09H
INT21H
JMPSTART
;设置中断向量表
NEXT1:
CLI
MOVAL,08H;取08号中断向量的服务程序地址
MOVAH,35H
INT21H;ES:
BX=入口地址
MOVOLD_OFF,BX;保存原来的终端服务程序地址
MOVBX,ES
MOVOLD_SEG,BX
MOVAL,08H;设置08号中断向量的服务程序地址
MOVAH,25H
MOVDX,SEGTIMER
PUSHDS
MOVDS,DX
MOVDX,OFFSETTIMER
INT21H
POPDS
;设置8253
MOVAL,36H
OUT43H,AL
MOVBX,11932
MOVAL,bl
OUT40H,AL
MOVAL,bH
OUT40H,AL
;设置8259A
MOVDX,20H;ICW1地址
MOVAL,11H;写ICW1,沿触发方式、级联,要ICW4
OUTDX,AL
ADDDX,1;指向ICW2、ICW3、ICW4地址
MOVAL,8;ICW2,中断向量号为08H
OUTDX,AL
MOVAL,4;ICW3,IR2接有从片PIC
OUTDX,AL
MOVAL,1;ICW4,正常屏蔽方式、全嵌套、正常EOI
OUTDX,AL
MOVDX,0A0H;从片ICW1地址
MOVAL,11H;写ICW1,沿触发方式、级联,要ICW4
OUTDX,AL
ADDDX,1;指向ICW2、ICW3、ICW4地址
MOVAL,70H;ICW2,中断向量号为70H
OUTDX,AL
MOVAL,2;ICW3,从片PIC识别号=2
OUTDX,AL
MOVAL,1;ICW4,正常屏蔽方式、正常EOI
OUTDX,AL
STI
;显示时间信息
FOREVER:
MOVDX,OFFSETMESG1;显示'Currenttimeis:
'
MOVAH,09H
INT21H
MOVBX,OFFSETTENHOUR
MOVCX,8
DISD:
MOVAL,[BX];显示具体时间
CALLDISPCHAR
INCBX
LOOPDISD
MOVAL,0DH
CALLDISPCHAR
MOVAL,SECOND
NEXT:
CMPAL,SECOND;检测时间是否改变
JENEXT
JMPFOREVER
;中断服务程序TIMER
TIMERPROCFAR
PUSHAX
DECCOUNT100;每100次中断为1秒
JNZTIMERX
MOVCOUNT100,100
INCSECOND
CMPSECOND,'9'
JLETIMERX
MOVSECOND,'0'
INCTENSEC
CMPTENSEC,'5'
JLETIMERX
MOVTENSEC,'0'
INCMINUTE
CMPMINUTE,'9'
JLETIMERX
MOVMINUTE,'0'
INCTENMIN
CMPTENMIN,'5'
JLETIMERX
MOVTENMIN,'0'
INCHOUR
CMPHOUR,'9'
JLETIMERX
MOVHOUR,'0'
INCTENHOUR
CMPTENHOUR,'1'
JLETIMERX
CMPHOUR,'3'
JLETIMERX
MOVTENHOUR,'0'
MOVHOUR,'0'
TIMERX:
MOVAL,20H;不到100次则结束中断
OUT20H,AL
POPAX
IRET
TIMERENDP
;显示字符的子程序
DISPCHARPROCNEAR
PUSHBX
MOVBX,0
MOVAH,14
INT10H
POPBX
RET
DISPCHARENDP
;恢复原来的中断服务程序
MOVAH,4CH
MOVDX,OLD_SEG
PUSHDS
MOVDS,DX
MOVDX,OLD_OFF
INT21H
POPDS
CODEENDS
ENDSTART
4.子程序清单
本程序包含一个中断服务的子程序TIMER和一个显示字符的子程序DISPCHAR。
TIMER每100次中断为1秒,DISPCHAR用于显示字符。
5.实验结果图
将time.asm汇编和连接结果如图1.5.1所示,在DOSBOX中执行time.exe文件结果1.5.2所示。
在这里我先输入错误一次,屏幕上会显示出错误提示;之后输入正确的格式,则开始计时。
图1.5.1汇编和连接结果
图1.5.2最终结果图
三、心得体会
实验编写前,我先看了一下书上的例题。
然后在编写过程中也发现了一些问题。
第一个是如何使8259A产生中断,一开始想的是固定循环次数,然后int8ch,但仔细研读了例题,并看了8253的工作方式36H=00110110B,发现方波发生器可以每一次可以把每个方波看做是事件,out为中断请求,这样就可以在计时的时候调用中断程序。
在设置的时候,就可以理解了。
第二个就是24小时以后清零问题。
23:
59:
59之后应该跳转到00:
00:
00,需要对小时加上一个跳转。
第三个是判断用户输入的对错问题。
分和秒的个位由于一开始写的jnc跳转,但最后要比较的应该改为JG。
这次练习的主要是中断操作,并且和硬件联系到了一起。
编程实验可以弥补书本上的不足,可以把书本上的理论应用起来,在应用中就会发现很多问题,在解决问题中提高自己的能力。
这次实验对我的编程能力是一次锻炼。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 北邮微机原理软件实验 第七章 实验报告 微机 原理 软件 实验 第七 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)