利用中断实现发声程序课程设计Word下载.docx
《利用中断实现发声程序课程设计Word下载.docx》由会员分享,可在线阅读,更多相关《利用中断实现发声程序课程设计Word下载.docx(12页珍藏版)》请在冰豆网上搜索。
设计题目
利用中断实现发声程序
设
计
技
术
参
数
Windows操作系统、masm5集成开发环境
要
求
用汇编语言编写程序完成发声子程序,要求使用中断程序实现
工
作
量
1.编写代码2.设计说明书不少于12页3.参考文献不少于5个
划
接受设计任务,收集资料
学习中断原理,中断服务程序设置方式
发声子程序原理
编码调试书写设计说明书
提交检查
考
资
料
1.周荷琴.微机原理接口技术[M].北京:
清华大学出版社,2016.
2.徐晨.微机原理与应用[M].北京:
高等教育出版社,2004.
3.王爽.汇编语言[M].北京:
清华大学出版社,2008.
4.孙德文.微型计算机技术[M].高等教育出版社,2010.
5.许立锌.微型计算机原理及应用[M].北京:
机械工业出版社,2003.
指导教师签字
教研室主任签字
2019年6月24日
安徽理工大学课程设计(论文)成绩评定表
任陈飞学号:
71专业班级:
课程设计题目:
利用中断实现发声程序
指导教师评语:
成绩:
年月日
1概述
MASM汇编开发环境简介
MASM是MicrosoftMacroAssembler的缩写,是微软公司为x86微处理器家族开发的汇编开发环境,拥有可视化的开发界面,使开发人员不必再使用DOS环境进行汇编的开发,编译速度快,支持80x86汇编以及Win32Asm,是Windows下开发汇编的利器。
它与windows平台的磨合程度非常好,但是在其他平台上就有所限制,使用MASM的开发人员必须在windows下进行开发。
它支持的宏很灵巧,既广泛又多样性,结构化程序的惯用语法,包含高级架构式的循环、程序调用,以及轮替(alternation)(因此,MASM算是高级汇编器的一个范本)。
设计要求
利用中断方式,编写程序实现每隔10秒响铃一次,并在屏幕上显示“Thebellisring”
2需求分析
CPU与I/O外设通信3种控制方式
CPU和I/O设备进行输入输出数据的方式有三种:
程序直接控制方式,中断方式和DMA方式。
三种方式的特点:
(1)程序直接控制方式
最简单的I/O控制方式是处理机对I/O设备直接进行控制,采取程序I/O(ProgrammedI/O)方式或称为忙一等待方式。
CPU首先向设备控制器的控制寄存器发出一条I/O指令启动I/O设备进行数据传输,硬件同时把状态寄存器中的忙/闲标志busy置为1,表示该I/O设备尚未输入完一个字(符)。
接着CPU应重复读取状态寄存器忙/闲标志busy进行测试(CPU不能执行其他进程),直至busy=0,表示该I/O设备已将输入数据送入到I/O控制器的数据寄存器中,于是CPU将从数据寄存器中取出数据,送入内存的指定单元,接着,再启动去读下一个数据,并置busy=l。
在程序I/O方式中,由于CPU的速度远远高于I/O设备,导致CPU的绝大部分时间都处于等待I/O设备完成而循环测试之中,造成了CPU的极大浪费。
但是它管理简单,在要求不高的场合可以被采用。
(2)中断控制
在现代计算机系统中,对I/O设备的控制,广泛地采用中断(Interrupt-Driven)方式,即当某进程要启动某个I/O设备时,便由CPU向相应的设备控制器的控制寄存器发出一条I/O命令,然后立即返回继续执行原来的任务。
设备控制器便按照该命令的要求去控制I/O设备。
若I/O设备忙,则由驱动程序将请求插入设备等待队列。
此时,CPU与I/O设备处于并行工作状态。
例如,在输入时,当设备控制器收到CPU发来的读命令后,便准备接收从相应输入设备送来的数据。
一旦数据进入数据寄存器,控制器便通过中断请求线INT向CPU发送一中断信号,中断子程序由CPU读取状态寄存器忙/闲标志busy进行测试检查输入过程中是否出错,若无错,便从数据寄存器中读出数据,写入指定内存单元。
所以,中断驱动方式在I/O设备输入数据的过程中,无需CPU干预,可以使CPU与I/O设备并行工作。
仅当输完一个数据时,才需CPU花费极短的时间去进行中断处理。
从而大大地提高了整个系统的资源利用率及吞吐量,特别是CPU的利用率。
(3)DMA控制
中断驱动I/O方式虽然大大提高了主机的利用率,但是它以字(节)为单位进行数据传送,每完成一个字(节)的传送,控制器便要向CPU请求一次中断(做保存现场信息,恢复现场等工作),仍然占用了CPU的许多时间。
这种方式对于高速的块设备的I/O控制显然是不适合。
为了进一步减少CPU对I/O的干预,引入了直接存储器访问DMA(DirectMemoryAccess)控制方式。
DMA方式是一种完全由硬件执行I/O数据交换的工作方式,它需要使用一个专门的DMA控制器(DMAC),内含于设备控制器,DMAC中有控制状态寄存器、传送字节计数器、内存地址寄存器和数据缓冲寄存器。
在这种方式中,DMAC采用盗窃总线控制权的方法从CPU接管对总线的控制,成批的数据交换不经过CPU而直接在内存和I/O设备之间进行。
DMA方式下的数据传送过程可分为三个阶段:
1)预处理阶段:
当进程要求设备输入数据时,CPU把准备存放输入数据的内存起始地址以及要传送的字节数分别送入DMAC中的内存地址寄存器和传送字节计数器。
另外,还把控制状态寄存器中的中断允许位和启动位置成1,从而启动设备,开始进行数据输入。
2)数据传送阶段:
发出数据传输要求的进程进入等待状态,进程调度程序调度其他进程占据CPU。
DMAC不断地窃取CPU工作周期,执行数据传送的操作:
向内存发出地址和控制信号,进行地址修改,对传送字的个数计数,直到所要求的字节全部传送完毕。
3)后处理阶段:
DMAC在传送完所有字节时,通过中断请求线发出中断信号。
CPU在接收到中断信号后,转入中断处理程序进行后续处理。
中断处理结束后,CPU返回到被中断的进程中,或切换到新的进程上下文环境中,继续执行。
DMA方式起到代理CPU的功能,较之中断驱动方式,又是成百倍地减少了CPU对I/O控制的干预,进一步提高了CPU与I/O设备的并行操作程度。
中断方式实现原理
中断工作原理:
计算技术里中断过程,就是主芯片的外部信号或内部信号,中断了该芯片正在执行的程序,主芯片转而处理由该信号引发的其他程序,结束后再回到中断的“断点”,继续执行原有程序。
中断服务子程序
(1)利用扬声器发出声音
端口号为61H的设备控制器的第1位交替为1和0,该位与扬声器的脉冲门相连,当第一位由1变0或由0变1,且维持一段时间,产生一个脉冲电流,经放大后送至扬声器发出声音。
61H的第0位和振荡器相连,不需要振荡器发声,所以把它置0。
(2)10秒控制
10秒控制:
定时器每秒钟中断次,每次调用一个1CH类型的中断。
系统中原有的1CH类型中断服务子程序没有执行任何功能。
即每次中断不执行任何操作返回主程序。
替换原有中断服务程序,变为用户的发声子程序ring。
10秒钟将进行182次中断,在第182次中断时执行发声功能,并重置计数次数182,其他直接跳出中断服务子程序。
主程序
主程序负责对中断向量进行设置和恢复等操作
中断向量的存取:
(1)设置中断向量:
MOVDX,OFFSETRING;
新偏移量送DX
MOVAX,SEGRING
MOVDS,AX;
新段址送DS
MOVAL,1CH
MOVAH,25H
INT21H;
写入新的中断向量
(2)取中断向量:
MOVAL,1CH;
取中断向量
MOVAH,35H
INT21H
PUSHES;
存原中断向量段址
PUSHBX;
存原中断向量偏移量
主程序的延时控制
延时控制目的是延长主程序执行期间给中断服务程序机会实现中断。
Movbx,1234H
Movdx,bx
Loop1:
Movcx,bx
Delay:
Loopdelay
Decdx
Looploop1
3程序实现
程序
数据段:
DATASEGMENT
COUNTDW1
MESSDB‘Thebellisring!
’,0DH,0AH,’$’
DATAENDS
主程序:
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,ES:
DATA
MAINPROCFAR
START:
PUSHDS
SUBAX,AX
PUSHAX
MOVAX,DATA
MOVDS,AX
MOVAL,1CH;
MOVAH,35H
INT21H
PUSHES;
PUSHBX;
PUSHDS
MOVDX,OFFSETRING;
MOVAX,SEGRING
MOVDS,AX;
MOVAL,1CH
MOVAH,25H
INT21H;
POPDS
INAL,21H;
读取中断屏蔽字
ANDAL,B;
允许定时器中断
OUT21H,AL
STI;
开中断
MOVBX,50
DELAY:
MOVDI,65535
DELAY2:
MOVSI,65535;
延时
DELAY1:
DECSI
JNZDELAY1
DECDI
JNZDELAY2
POPDX;
恢复原中断向量
POPDS
RET
MAINENDP
中断服务程序:
RINGPROCNEAR
PUSHDS;
各工作寄存器内容入栈
PUSHAX
PUSHCX
PUSHDX
STI
DECCOUNT;
计秒值
JNZEXIT
MOVDX,OFFSETMESS
MOVAH,09H
INT21H
MOVDX,100
INAL,61H
ANDAL,0FCH
SOUND:
XORAL,02
OUT61H,AL;
扬声器发声
MOVCX,140H
WAIT1:
LOOPWAIT1;
延时等待
DECDX
JNESOUND
MOVCOUNT,182
EXIT:
CLI;
关中断
POPDX
POPCX
POPAX
IRET;
中断返回
RINGENDP
程序和运行界面
图3-1程序1
图3-2程序2
图3-3运行结果
4总结
不知不觉,微机原理与接口技术课程已经结束了。
回想起来受益匪浅,主要是加深了对计算机的一些硬件情况和运行原理的理解和汇编语言的编写,期间也听老师讲过,微机原理这门课程是比较偏硬件一点的。
正是因为这一点,我还是对它比较喜欢的,因为它和我的专业方向“光电信息”有很大的联系,在光电信息领域很多场合要应用到微机,本着想就业好的心态,因此对该课程的学习还是有浓厚的兴趣的。
下面谈谈这期学习该课程的心得与体会:
刚开始接触这门课程的时候,感觉到它似乎非常的容易,尤其是第一章,它讲到的都是一些计算机的发展历程,听的是津津有味的,知道原来计算机是那么来的啊!
这时我有一个感想,当初发明出第一台计算机的人是多么的伟大啊,使人在计算复杂问题上,速度得到了很大的提高,随着时代的发展,计算机的运行速度也越来越快,CPU由原来的M级发展到了G级,是多么令人惊奇的一个进步,到了21世纪,计算机得到了充足的发展,IT行业也成为了一个热门的行业,如果专业技能强的话,一般比其它行业拿的工资都要高,同时也就增添了我对它学习的信心。
就像我们学的这个微机原理与接口技术课,如果能把它融会贯通的话,对专业的学习和深造都会有很大的益处,对将来的就业也会有极大的帮助。
其实我觉得,在学习微机原理这一块,最让我觉得棘手就是这个汇编语言了,在学它的过程中,觉得还是有点吃力,尤其是它的指令很多的,有时候总是把它给记混了,所以在做练习的时候这个问题最突出了,如果是自己写程序的话,总是写不对,到计算机上也运行不了,唯一的解决办法就是看参考书上的程序再模仿编写,但是自己的编程能力上没有得到有效的提高。
这也有可能是自己学习方法上的不足吧!
在今后的学习中要针对性的改变这种不足。
通过了这一学期对微机原理的学习,真的对它有了一个全新的认识,虽然说,这门课已经结束了,但是我会坚持对它的学习,使自己在汇编语言上有一个长足的提高!
力争在掌握高级语言基础上掌握一门汇编语言,这就是我这期学习《微型计算机原理与接口技术》课程的心得体会!
参考文献
[1]周荷琴.微机原理接口技术[M].北京:
[2]徐晨.微机原理与应用[M].北京:
[3]王爽.汇编语言[M].北京:
[4]孙德文.微型计算机技术[M].高等教育出版社,2010.
[5]许立锌.微型计算机原理及应用[M].北京: