北邮微机原理软件实验 第七章 实验报告.docx

上传人:b****2 文档编号:24223544 上传时间:2023-05-25 格式:DOCX 页数:12 大小:368.70KB
下载 相关 举报
北邮微机原理软件实验 第七章 实验报告.docx_第1页
第1页 / 共12页
北邮微机原理软件实验 第七章 实验报告.docx_第2页
第2页 / 共12页
北邮微机原理软件实验 第七章 实验报告.docx_第3页
第3页 / 共12页
北邮微机原理软件实验 第七章 实验报告.docx_第4页
第4页 / 共12页
北邮微机原理软件实验 第七章 实验报告.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

北邮微机原理软件实验 第七章 实验报告.docx

《北邮微机原理软件实验 第七章 实验报告.docx》由会员分享,可在线阅读,更多相关《北邮微机原理软件实验 第七章 实验报告.docx(12页珍藏版)》请在冰豆网上搜索。

北邮微机原理软件实验 第七章 实验报告.docx

北邮微机原理软件实验第七章实验报告

微机原理与接口技术

第七章上机编程作业

实验报告

姓名:

曹爽

学号:

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。

这次练习的主要是中断操作,并且和硬件联系到了一起。

编程实验可以弥补书本上的不足,可以把书本上的理论应用起来,在应用中就会发现很多问题,在解决问题中提高自己的能力。

这次实验对我的编程能力是一次锻炼。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工作范文 > 行政公文

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

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